В конфигурации 1С:Зарплата и управление персоналом 3.1 задача получения даты приема на работу часто осложняется тем, что данные в информационную базу могут попадать разными путями. Если организация работает в программе «с нуля», все сотрудники принимаются документом Прием на работу. Однако при переходе из других систем или старых версий (например, ЗУП 2.5) часто используется документ Начальная штатная расстановка. В этом случае стандартные запросы к регистру сведений Кадровая история сотрудников могут возвращать дату начала эксплуатации системы вместо реальной даты приема. Разберем подробно, как правильно извлекать эти данные программно и с помощью запросов.
Разработчики 1С предусмотрели универсальный механизм для получения кадровых данных. Использование типовой функции КадровыйУчет.КадровыеДанныеСотрудников является самым надежным способом, так как внутри нее уже заложена сложная логика анализа различных регистров и документов переноса данных. Проанализируем пример кода:
// Подготовим массив сотрудников, по которым нужны данные
МассивСотрудников = Новый Массив;
МассивСотрудников.Добавить(СсылкаНаСотрудника);
// Определим дату, на которую актуальны данные
ДатаАктуальности = ТекущаяДата();
// Вызываем типовую функцию
ТЗКадровыеДанные = КадровыйУчет.КадровыеДанныеСотрудников(
Истина,
МассивСотрудников,
"ДатаПриема, ТекущаяДолжность, ТекущееПодразделение",
ДатаАктуальности
);
// Извлекаем результат
Если ТЗКадровыеДанные.Количество() > 0 Тогда
ДатаПриема = ТЗКадровыеДанные[0].ДатаПриема;
КонецЕсли;
Рассмотрим подробнее преимущества этого метода. Во-первых, вам не нужно знать структуру регистров, которая может измениться с очередным обновлением. Во-вторых, функция корректно обрабатывает ситуации с «кратким» переносом данных, когда информация о приеме хранится в специфических ресурсах регистров, не всегда очевидных для простого запроса.
Если вам необходимо получить дату приема внутри сложного запроса (например, в отчете на СКД), обратимся к регистру сведений Кадровая история сотрудников. Здесь важно понимать разницу между кадровыми событиями. Когда сотрудник вводится через Начальную штатную расстановку, в регистре фиксируется вид события Начальные данные.
Выясним, как составить правильный запрос:
Кадровая история сотрудников.Период для записей с видом события Прием.Начальные данные реальная дата приема часто выносится в отдельные ресурсы или извлекается через минимальный период всех кадровых событий.Рассмотрим пример запроса, который учитывает оба варианта:
ВЫБРАТЬ
КадроваяИстория.Сотрудник КАК Сотрудник,
МИНИМУМ(КадроваяИстория.Период) КАК ДатаПервогоСобытия
ПОМЕСТИТЬ ВТ_ПервыеЗаписи
ИЗ
РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИстория
ГДЕ
КадроваяИстория.ВидСобытия В (ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Прием), ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.НачальныеДанные))
ГРУППИРОВАТЬ ПО
КадроваяИстория.Сотрудник;
Важный нюанс: Для документа Начальная штатная расстановка период в регистре может быть равен дате самого документа (например, 01.01.2024), но внутри документа есть колонка "Дата приема", которая может содержать 15.05.2015. Чтобы достать именно ее в запросе, иногда приходится обращаться к регистру Основные данные контракта, договора сотрудника, где поле ДатаНачала соответствует фактической дате приема по трудовому договору.
Многие разработчики используют регистр Текущие кадровые данные сотрудников, так как в нем уже есть готовое поле ДатаПриема. Проанализируем ситуацию: этот регистр является независимым и не имеет регистратора. Записи в него попадают через механизм подписок на события при проведении документов.
Посмотрим на особенности этого регистра:
Если вы уверены в целостности базы, запрос будет выглядеть максимально просто:
ВЫБРАТЬ
ТекущиеДанные.ДатаПриема КАК ДатаПриема
ИЗ
РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеДанные
ГДЕ
ТекущиеДанные.Сотрудник = &Сотрудник
Еще один полезный источник — регистр сведений Реестр кадровых приказов. В нем хранятся данные обо всех кадровых документах в «плоском» виде. Рассмотрим его структуру: он содержит ссылку на документ-основание и дату этого документа. Для Начальной штатной расстановки там фиксируется соответствующая запись. Это удобный способ, если нужно получить список именно «приказов», которыми сотрудники были заведены в систему.
Проанализировав все варианты, мы рекомендуем придерживаться следующей стратегии:
КадровыйУчет.КадровыеДанныеСотрудников. Это гарантирует корректность данных даже после обновления конфигурации.Текущие кадровые данные сотрудников, но добавьте в описание отчета предупреждение о необходимости актуализации кадровых данных (через раздел Обслуживание).Основные данные контракта, договора сотрудника.Выясним также причину возможных ошибок: если дата приема кажется пустой, попробуйте запустить регламентное задание «Обновление кадровых данных сотрудников». В ЗУП 3.1 это стандартная процедура, которая пересчитывает вспомогательные регистры на основе первичных документов. После ее завершения регистр Текущие кадровые данные сотрудников должен заполниться автоматически.