При работе в программе 1С:Зарплата и управление персоналом 3.1 кадровые специалисты часто сталкиваются с необходимостью видеть дополнительную информацию непосредственно в списках документов. Одним из частых запросов является вывод даты приема на работу и занимаемой должности сотрудника прямо в форму списка документов Увольнение. Это позволяет быстро анализировать стаж работы увольняемого сотрудника без необходимости заглядывать внутрь каждого документа или строить сложные отчеты.
В этой статье мы подробно разберем, почему стандартный интерактивный способ настройки формы не решает данную задачу, проанализируем внутреннюю архитектуру хранения данных в 1С:ЗУП 3 и рассмотрим правильное программное решение с использованием механизма расширений и оптимизированных запросов к динамическим спискам.
---
Казалось бы, простейший путь, который выбирают многие пользователи и начинающие администраторы — это штатная настройка формы. Мы открываем форму списка документов увольнения, нажимаем кнопку Еще — Изменить форму, находим элемент Ссылка, раскрываем его свойства, ищем поле Сотрудник, а внутри него пытаемся отметить флажками реквизиты Должность и Дата приема.
Однако на практике при таком подходе мы сталкиваемся со следующими проблемами:
Проанализируем причину такого поведения системы. В отличие от старых версий конфигураций (например, ЗУП 2.5), в 1С:ЗУП 3 справочник Сотрудники спроектирован максимально облегченным. Он практически не хранит в себе жестких кадровых реквизитов. Кадровая история (приемы, переводы, должности, подразделения) — это периодические данные, которые записываются и хранятся в специализированных регистрах сведений.
Поля должности, которые доступны для выбора через стандартное разыменование ссылки сотрудника на форме, являются устаревшими техническими реквизитами, оставленными разработчиками «для совместимости» (часто они заполняются только при первоначальном переносе данных из старых баз и далее не поддерживаются в актуальном состоянии). Поэтому получить из них реальную текущую должность сотрудника интерактивным путем невозможно.
---
Чтобы вывести на форму списка актуальные и достоверные данные, нам потребуется изменить поисковый запрос, на котором построен динамический список формы документов увольнения. Для того чтобы сохранить конфигурацию на поддержке и обеспечить простоту последующих обновлений, мы настоятельно рекомендуем выполнять эту доработку через **Расширение конфигурации**.
Разберем детально, как правильно составить запрос для динамического списка и избежать типичных ошибок производительности.
На форумах часто предлагают связать таблицу документов с виртуальной таблицей СрезПоследних регистра сведений КадроваяИсторияСотрудников. Типичный пример такого запроса выглядит следующим образом:
ВЫБРАТЬ
ДокументУвольнение.Ссылка КАК Ссылка,
ДокументУвольнение.Сотрудник КАК Сотрудник,
КадроваяИсторияСрезПоследних.Должность КАК Должность
ИЗ
Документ.Увольнение КАК ДокументУвольнение
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних КАК КадроваяИсторияСрезПоследних
ПО ДокументУвольнение.Сотрудник = КадроваяИсторияСрезПоследних.Сотрудник
Внимание! Использовать такой запрос в динамическом списке крайне опасно. Поскольку регистр КадроваяИсторияСотрудников является периодическим, левое соединение с его виртуальной таблицей без жесткого ограничения по дате (или при наличии нескольких кадровых изменений в пределах одного дня) может привести к неявному дублированию строк в результате запроса. Платформа 1С при обнаружении дублей ключевого поля Ссылка не сможет отобразить список и выдаст критическую ошибку: «Обнаружено дублирование ключевых значений в колонках...».
Для решения этой проблемы разработчики фирмы «1С» предусмотрели специальный вспомогательный регистр сведений — ТекущиеКадровыеДанныеСотрудников. Он является непериодическим, и в нем всегда гарантированно хранится ровно одна актуальная строка для каждого сотрудника. В этом регистре уже есть готовые и всегда актуальные поля: ТекущаяДолжность, ТекущееПодразделение, а также ДатаПриема.
Рассмотрим правильный и безопасный вариант построения запроса для динамического списка формы. Нам необходимо применить левое соединение таблицы документов с регистром текущих кадровых данных сотрудников по полю Сотрудник:
ВЫБРАТЬ
ДокументУвольнение.Ссылка КАК Ссылка,
ДокументУвольнение.Дата КАК Дата,
ДокументУвольнение.Номер КАК Номер,
ДокументУвольнение.Проведен КАК Проведен,
ДокументУвольнение.Организация КАК Организация,
ДокументУвольнение.Сотрудник КАК Сотрудник,
ДокументУвольнение.ДатаУвольнения КАК ДатаУвольнения,
КадровыеДанные.ТекущаяДолжность КАК Должность,
КадровыеДанные.ДатаПриема КАК ДатаПриема,
ДокументУвольнение.Ответственный КАК Ответственный,
ДокументУвольнение.Комментарий КАК Комментарий
ИЗ
Документ.Увольнение КАК ДокументУвольнение
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК КадровыеДанные
ПО ДокументУвольнение.Sotrudnik = КадровыеДанные.Сотрудник
Использование регистра ТекущиеКадровыеДанныеСотрудников дает нам сразу несколько преимуществ:
Сотрудники. Благодаря связи по полю Сотрудник, в списке увольнений отобразится именно та должность и дата приема, которые относились к конкретному рабочему периоду (по конкретному трудовому договору), а не к текущему новому месту работы физлица.---
Если у вас нет возможности привлекать программиста для создания расширения или вносить изменения в конфигурацию, вы можете быстро получить список уволенных сотрудников с их должностями и датами приема с помощью стандартных отчетов кадрового блока.
Рассмотрим два наиболее удобных инструмента настройки отчетов:
Этот отчет позволяет гибко выводить любые кадровые события за произвольный период времени.
Вид события Равно Увольнение.Дата приема и Должность. Если их нет, нажмите кнопку «Добавить» и выберите их из структуры данных сотрудника.Специализированный отчет, который изначально ориентирован на предоставление сведений по расторгнутым трудовым договорам.
Дата увольнения (например, «Больше или равно» для начала периода и «Меньше или равно» для окончания периода).Дата приема, которое в стандартном варианте может быть скрыто разработчиками.Используя предложенные методы, вы сможете оптимизировать свою работу в программе 1С:ЗУП 3.1, сделав отображение кадровой информации удобным и наглядным как в интерфейсе списков документов, так и в оперативной отчетности.