Как программно заполнить дату приема сотрудника в 1С:ЗУП 3?

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

При переносе данных или первичной загрузке сотрудников в программу «1С:Зарплата и управление персоналом 3» разработчики нередко сталкиваются с ситуацией, когда дату приема пытаются записать напрямую в справочник Сотрудники, но в карточке сотрудника она так и не появляется. Выясним причину такого поведения системы и разберем правильные способы заполнения даты приема.

Архитектура хранения кадровых данных в ЗУП 3

Проанализируем структуру конфигурации. В отличие от предыдущих редакций (например, ЗУП 2.5), в редакции 3.х справочник Сотрудники не содержит собственного реквизита для хранения даты приема на работу. В форме элемента и динамических списках это значение является расчетным.

Рассмотрим, как устроено хранение кадровых данных:

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

Способ 1. Заполнение через документ «Начальная штатная расстановка»

Разберем основной и наиболее корректный вариант ввода начальных остатков по персоналу. В документе НачальнаяШтатнаяРасстановка в табличной части предусмотрен реквизит ДатаПриема. При проведении документа конфигурация автоматически делает необходимые движения по кадровым регистрам и обновляет регистр ТекущиеКадровыеДанныеСотрудников.

Посмотрим на пример программного создания и заполнения документа:


ДокументОбъект = Документы.НачальнаяШтатнаяРасстановка.СоздатьДокумент();
ДокументОбъект.Дата = ТекущаяДата();
ДокументОбъект.Организация = ВыбраннаяОрганизация;
ДокументОбъект.Месяц = НачалоМесяца(ТекущаяДата());

СтрокаСотрудника = ДокументОбъект.Сотрудники.Добавить();
СтрокаСотрудника.Сотрудник = СсылкаНаСотрудника;
СтрокаСотрудника.Подразделение = ВыбранноеПодразделение;
СтрокаСотрудника.Должность = ВыбраннаяДолжность;
СтрокаСотрудника.КоличествоСтавок = 1;
СтрокаСотрудника.ДатаПриема = ДатаПриемаСотрудника;

ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);

После проведения документа дата приема автоматически отобразится в карточке сотрудника и будет корректно использоваться во всех кадровых отчетах и расчетах стажа.

Способ 2. Оформление через документ «Прием на работу»

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

Разберем по шагам создание кадрового документа:


ДокументПрием = Документы.ПриемНаРаботу.СоздатьДокумент();
ДокументПрием.Дата = ТекущаяДата();
ДокументПрием.Организация = ВыбраннаяОрганизация;
ДокументПрием.Сотрудник = СсылкаНаСотрудника;
ДокументПрием.ФизическоеЛицо = СсылкаНаСотрудника.ФизическоеЛицо;
ДокументПрием.ДатаПриема = ДатаПриемаСотрудника;
ДокументПрием.Подразделение = ВыбранноеПодразделение;
ДокументПрием.Должность = ВыбраннаяДолжность;
ДокументПрием.КоличествоСтавок = 1;

ДокументПрием.Записать(РежимЗаписиДокумента.Проведение);

Обратите внимание: если по сотруднику уже был проведен документ НачальнаяШтатнаяРасстановка, создавать на него ПриемНаРаботу нельзя, чтобы избежать дублирования движений по кадровой истории.

Способ 3. Использование документа «Перенос данных»

При прямой загрузке данных из внешних систем или нестандартных баз часто применяется документ ПереносДанных с кодом регистратора ТДК. В этом случае формируются прямые движения по наборам записей регистров КадроваяИсторияСотрудников и ОсновныеДанныеКонтрактаДоговораСотрудника.

Этот способ требует точного заполнения всех служебных измерений и ресурсов кадровых регистров, поэтому рекомендуется использовать его только в рамках специализированных правил конвертации данных.

Как правильно читать дату приема программно

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

Посмотрим на вызов типовой функции кадрового учета:


МассивСотрудников = Новый Массив;
МассивСотрудников.Добавить(СсылкаНаСотрудника);

КадровыеПоля = "ДатаПриема";
ТаблицаКадровыхДанных = КадровыйУчет.КадровыеДанныеСотрудников(Истина, МассивСотрудников, КадровыеПоля, ТекущаяДата());

Если ТаблицаКадровыхДанных.Количество() > 0 Тогда
    ДатаПриема = ТаблицаКадровыхДанных[0].ДатаПриема;
КонецЕсли;

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

← На главную