Как найти и получить дату приема и увольнения сотрудника в 1С:ЗУП 3.1?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

В конфигурации «1С:Зарплата и управление персоналом», редакция 3.1 (ЗУП 3.1), архитектура хранения данных претерпела значительные изменения по сравнению со старой редакцией 2.5. Одной из частых проблем, с которой сталкиваются разработчики и аналитики при составлении запросов и отчетов, является поиск дат приема и увольнения сотрудников. В справочнике Сотрудники эти реквизиты больше не хранятся напрямую. В этой статье мы подробно разберем, где именно в системе находятся эти даты, как их правильно получать программно с помощью запросов и встроенного API, а также как вывести их на форму в пользовательском режиме.

Важное различие: «Физическое лицо» против «Сотрудника»

Прежде чем перейти к поиску дат, проанализируем важный методологический нюанс ЗУП 3.1. В системе строго разделены понятия физического лица (справочник ФизическиеЛица) и сотрудника (справочник Сотрудники). Один и тот же человек (физическое лицо) может иметь несколько карточек в справочнике Сотрудники. Например, если он уволился, а через год снова устроился в компанию, или если он работает по внутреннему совместительству. Каждая карточка сотрудника жестко привязана к конкретному трудовому договору.

Поэтому помните: если вам нужны даты работы сотрудника по конкретному договору, поиск необходимо вести в привязке к элементу справочника Сотрудники. Если же стоит задача найти самую первую дату, когда человек вообще пришел в компанию, придется анализировать данные в разрезе физического лица.

Способ 1. Использование регистра сведений «Текущие кадровые данные сотрудников»

Для быстрого и удобного получения актуальной информации разработчики фирмы «1С» добавили специальный вспомогательный регистр сведений — ТекущиеКадровыеДанныеСотрудников. Этот регистр хранит срез актуальных кадровых данных по каждому сотруднику на текущий момент времени.

Преимущества работы с этим регистром:

  1. В нем присутствуют готовые поля ДатаПриема и ДатаУвольнения.
  2. Вам не нужно писать сложные соединения таблиц или вычислять срез последних. Каждому сотруднику соответствует ровно одна строка.
  3. Помимо дат, там содержатся другие полезные реквизиты: ТекущаяОрганизация, ТекущееПодразделение, ТекущаяДолжность.

Важное предупреждение: этот регистр является вспомогательным (информационным) и заполняется автоматически при проведении кадровых документов. В редких случаях (например, при некорректной программной загрузке данных, сбоях или незавершенных транзакциях) данные в нем могут временно разойтись с реальными документами. Если вам нужна абсолютная точность, используйте кадровые регистры напрямую.

Способ 2. Получение дат из регистра «Кадровая история сотрудников»

Если вам требуется «железобетонный» вариант получения данных в запросе, который гарантированно исключает рассинхронизацию, следует обращаться к основному регистру сведений КадроваяИсторияСотрудников. Данные в нем хранятся в неявном виде через кадровые события. Для выгрузки сведений из этого регистра можно использовать отчет по кадровой истории сотрудников.

Выясним причину такой структуры: регистр хранит всю историю изменений по сотруднику. Каждая запись содержит ресурс ВидСобытия, который принимает значения из перечисления ВидыКадровыхСобытий (например: Прием, Перемещение, Увольнение, НачальныеДанные, ВосстановлениеВДолжности).

Для вычисления нужных дат в запросе используем следующую логику:

  1. Дата приема на работу: это значение поля Период для записей, где вид события равен Прием или НачальныеДанные (используется при переносе остатков из старых баз). Если периодов работы у сотрудника было несколько, обычно выбирают самый поздний из них.
  2. Дата увольнения: это значение поля Период для записи с видом события Увольнение.

Критически важный нюанс при работе с датой увольнения в запросах: в регистре КадроваяИсторияСотрудников дата увольнения записывается как первый день, когда сотрудник больше не работает. Это часто вызывает путаницу. Например, если в документе «Увольнение» последним рабочим днем сотрудника указано 10 ноября, то в регистре кадровой истории в поле Период запишется дата 11 ноября. Чтобы получить реальную дату увольнения (последний рабочий день), в запросе необходимо вычесть один день с помощью функции ДОБАВИТЬКДАТЕ(Период, ДЕНЬ, -1).

Способ 3. Программный интерфейс (API) конфигурации

Если вы пишете программный код в конфигураторе, выполнять прямые запросы к регистрам не рекомендуется. В ЗУП 3.1 реализован мощный программный интерфейс (API) для разработчиков. Для получения кадровых данных предназначена функция общего модуля КадровыйУчет.КадровыеДанныеСотрудников.

Рассмотрим пример кода для получения даты приема одного сотрудника:


КадровыеДанные = КадровыйУчет.КадровыеДанныеСотрудников(Истина, Сотрудник, "ДатаПриема, ДатаУвольнения");
Если КадровыеДанные.Количество() > 0 Тогда
    СтрокаДанных = КадровыеДанные[0];
    ДатаПриема = СтрокаДанных.ДатаПриема;
    ДатаУвольнения = СтрокаДанных.ДатаУвольнения;
КонецЕсли;

Проанализируем этот пример подробнее. Первым параметром мы передаем булево значение (нужно ли помещать результат во временную таблицу, в данном случае Истина). Второй параметр — это ссылка на сотрудника или массив сотрудников. Третий параметр — строка с перечислением необходимых нам полей через запятую.

Преимущества программного API перед прямым запросом:

Если же вам нужно получить самую первую дату приема физического лица в компанию (а не по конкретному трудовому договору), воспользуйтесь аналогичной функцией КадровыйУчет.КадровыеДанныеФизическихЛиц.

Способ 4. Использование виртуальных полей в Системе компоновки данных (СКД)

Если вы разрабатываете отчет на базе СКД, вам вообще не нужно вручную связывать таблицы или писать сложные программные вызовы. В ЗУП 3.1 реализован механизм предопределенных (виртуальных) полей.

Когда в качестве источника данных в конструкторе схемы компоновки данных вы выбираете таблицу Справочник.Сотрудники, вам автоматически становятся доступны вложенные поля через точку от поля Ссылка:

Платформа сама на лету обратится к нужным кадровым регистрам и выведет корректные даты в ваш отчет.

Способ 5. Поиск первоисточника в документах

Иногда требуется найти именно первичный документ, зафиксировавший прием или увольнение. Реквизиты дат хранятся непосредственно в кадровых документах:

Способ 6. Вывод дат приема и увольнения в пользовательском режиме

Если вы являетесь пользователем программы или аналитиком, и вам нужно просто увидеть эти даты на экране без программирования, разберем по шагам, как вывести их в список сотрудников:

  1. Откройте раздел Кадры и перейдите в справочник Сотрудники.
  2. В правом верхнем углу формы нажмите кнопку Еще и выберите пункт меню Изменить форму... (в некоторых версиях доступна кнопка Настройка списка...).
  3. В открывшемся дереве элементов найдите группу Список (или ветку, отвечающую за вывод колонок таблицы).
  4. Поставьте галочки напротив полей Принят (соответствует дате приема) и Уволен (соответствует дате увольнения).
  5. Нажмите кнопку Применить или ОК. Теперь даты отображаются непосредственно в списке сотрудников и вы можете быстро визуально контролировать кадровое состояние штата.

Мы подробно изучили все основные способы поиска и извлечения дат приема и увольнения в программе 1С:ЗУП 3.1. Используйте быстрый регистр ТекущиеКадровыеДанныеСотрудников для простых запросов, основной регистр кадровой истории для сложных выборок, и всегда отдавайте предпочтение готовому API КадровыйУчет при разработке программных модулей. При необходимости формирования готовой отчетности без программирования можно использовать отчет по датам приема и увольнения сотрудников.

← На главную