Как в 1С:ЗУП 3.1 получить дату приема сотрудника, если часть данных введена документом Начальная штатная расстановка

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

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

Способ 1. Использование программного интерфейса (API) конфигурации

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


// Подготовим массив сотрудников, по которым нужны данные
МассивСотрудников = Новый Массив;
МассивСотрудников.Добавить(СсылкаНаСотрудника);

// Определим дату, на которую актуальны данные
ДатаАктуальности = ТекущаяДата();

// Вызываем типовую функцию
ТЗКадровыеДанные = КадровыйУчет.КадровыеДанныеСотрудников(
    Истина, 
    МассивСотрудников, 
    "ДатаПриема, ТекущаяДолжность, ТекущееПодразделение", 
    ДатаАктуальности
);

// Извлекаем результат
Если ТЗКадровыеДанные.Количество() > 0 Тогда
    ДатаПриема = ТЗКадровыеДанные[0].ДатаПриема;
КонецЕсли;

Рассмотрим подробнее преимущества этого метода. Во-первых, вам не нужно знать структуру регистров, которая может измениться с очередным обновлением. Во-вторых, функция корректно обрабатывает ситуации с «кратким» переносом данных, когда информация о приеме хранится в специфических ресурсах регистров, не всегда очевидных для простого запроса.

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

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

Выясним, как составить правильный запрос:

  1. Нам необходимо найти самую раннюю запись по сотруднику в регистре Кадровая история сотрудников.
  2. В качестве даты приема следует рассматривать поле Период для записей с видом события Прием.
  3. Однако для записей с видом события Начальные данные реальная дата приема часто выносится в отдельные ресурсы или извлекается через минимальный период всех кадровых событий.

Рассмотрим пример запроса, который учитывает оба варианта:


ВЫБРАТЬ
    КадроваяИстория.Сотрудник КАК Сотрудник,
    МИНИМУМ(КадроваяИстория.Период) КАК ДатаПервогоСобытия
ПОМЕСТИТЬ ВТ_ПервыеЗаписи
ИЗ
    РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИстория
ГДЕ
    КадроваяИстория.ВидСобытия В (ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Прием), ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.НачальныеДанные))
ГРУППИРОВАТЬ ПО
    КадроваяИстория.Сотрудник;

Важный нюанс: Для документа Начальная штатная расстановка период в регистре может быть равен дате самого документа (например, 01.01.2024), но внутри документа есть колонка "Дата приема", которая может содержать 15.05.2015. Чтобы достать именно ее в запросе, иногда приходится обращаться к регистру Основные данные контракта, договора сотрудника, где поле ДатаНачала соответствует фактической дате приема по трудовому договору.

Способ 3. Регистр сведений «Текущие кадровые данные сотрудников»

Многие разработчики используют регистр Текущие кадровые данные сотрудников, так как в нем уже есть готовое поле ДатаПриема. Проанализируем ситуацию: этот регистр является независимым и не имеет регистратора. Записи в него попадают через механизм подписок на события при проведении документов.

Посмотрим на особенности этого регистра:

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


ВЫБРАТЬ
    ТекущиеДанные.ДатаПриема КАК ДатаПриема
ИЗ
    РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеДанные
ГДЕ
    ТекущиеДанные.Сотрудник = &Сотрудник

Способ 4. Регистр «Реестр кадровых приказов»

Еще один полезный источник — регистр сведений Реестр кадровых приказов. В нем хранятся данные обо всех кадровых документах в «плоском» виде. Рассмотрим его структуру: он содержит ссылку на документ-основание и дату этого документа. Для Начальной штатной расстановки там фиксируется соответствующая запись. Это удобный способ, если нужно получить список именно «приказов», которыми сотрудники были заведены в систему.

Рекомендации по выбору метода

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

  1. Если вы пишете внешнюю обработку или программный код — всегда используйте КадровыйУчет.КадровыеДанныеСотрудников. Это гарантирует корректность данных даже после обновления конфигурации.
  2. Если вы создаете отчет на СКД и важна производительность на огромных объемах данных — используйте соединение с регистром Текущие кадровые данные сотрудников, но добавьте в описание отчета предупреждение о необходимости актуализации кадровых данных (через раздел Обслуживание).
  3. Если данные перенесены из ЗУП 2.5 «кратким» переносом и дата приема в кадровой истории не совпадает с реальной — обязательно проверьте регистр Основные данные контракта, договора сотрудника.

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

← На главную