В процессе работы с кадровыми данными в системе 1С:Зарплата и Управление Персоналом (ЗУП) 3.1 часто возникает необходимость выгрузки списков сотрудников с указанием их кадровых периодов. Разберем, как правильно обращаться к данным и как отфильтровать список, чтобы в него попадали только те, кто был уволен.
Для того чтобы получить актуальную информацию о сотрудниках, включая их текущие подразделения и даты приема или увольнения, мы будем использовать регистр сведений ТекущиеКадровыеДанныеСотрудников. Этот регистр специально оптимизирован для быстрого получения «среза» состояния штатного расписания и кадрового состава на текущий момент.
Обратите внимание, что в старых версиях системы (например, ЗУП 2.5) использовались другие регистры, такие как РаботникиОрганизации. В современных версиях ЗУП 3.1 структура метаданных изменилась, и для получения истории изменений (например, всех перемещений между подразделениями за год) рекомендуется использовать регистр КадроваяИсторияСотрудников. Однако для базовой задачи получения текущей даты увольнения ТекущиеКадровыеДанныеСотрудников подходит идеально.
Для построения отчета или простой выборки в консоли запросов выполним следующие шаги. Нам нужно выбрать поле сотрудника, его текущее подразделение и даты событий.
Напишем базовый запрос:
ВЫБРАТЬ
ТекущиеКадровыеДанныеСотрудников.Сотрудник КАК Сотрудник,
ТекущиеКадровыеДанныеСотрудников.ТекущееПодразделение КАК ТекущееПодразделение,
ТекущиеКадровыеДанныеСотрудников.ДатаПриема КАК ДатаПриема,
ТекущиеКадровыеДанныеСотрудников.ДатаУвольнения КАК ДатаУвольнения
ИЗ
РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников
УПОРЯДОЧИТЬ ПО
ДатаУвольнения УБЫВ
При выполнении такого запроса вы заметите, что в список попадают все сотрудники, включая тех, кто продолжает работать в компании. У работающих сотрудников поле ДатаУвольнения остается «пустым». В 1С «пустая дата» — это не значение NULL, а специальное значение, соответствующее 01 января 0001 года.
Чтобы отфильтровать только уволенных сотрудников, мы должны добавить условие ГДЕ. Мы исключаем записи, в которых дата увольнения равна начальной дате системы.
Применяем следующий код:
ВЫБРАТЬ
ТекущиеКадровыеДанныеСотрудников.Сотрудник КАК Сотрудник,
ТекущиеКадровыеДанныеСотрудников.ТекущееПодразделение КАК ТекущееПодразделение,
ТекущиеКадровыеДанныеСотрудников.ДатаПриема КАК ДатаПриема,
ТекущиеКадровыеДанныеСотрудников.ДатаУвольнения КАК ДатаУвольнения
ИЗ
РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников
ГДЕ
ТекущиеКадровыеДанныеСотрудников.ДатаУвольнения <> ДАТАВРЕМЯ(1, 1, 1)
УПОРЯДОЧИТЬ ПО
ДатаУвольнения УБЫВ
ДАТАВРЕМЯ(1, 1, 1)?Конструкция ДАТАВРЕМЯ(1, 1, 1) в языке запросов 1С — это стандартный литерал для обозначения пустой даты. В платформе 1С любое неинициализированное поле типа Дата всегда принимает это значение.
Практический совет: Если вы планируете использовать этот код в модуле конфигурации, а не просто в консоли запросов, профессиональным тоном считается передача пустой даты через параметр. Вместо жестко заданного ДАТАВРЕМЯ(1, 1, 1), используйте параметр &ПустаяДата и устанавливайте его значение в программном коде через Дата(1, 1, 1). Это обеспечит гибкость и чистоту вашего кода.
ТекущиеКадровыеДанныеСотрудников. Используйте регистр КадроваяИсторияСотрудников, так как именно он содержит хронологию всех событий по сотруднику.Администрирование включена опция «История изменений». Это позволит просматривать версии документов и видеть, какие значения были изменены и кем.Используя данный подход, вы сможете быстро формировать списки уволенных сотрудников и анализировать их кадровые данные, избегая лишних записей в итоговой выборке.