При переносе данных из одной базы 1С:ЗУП в другую или при автоматизации кадрового учета часто возникает задача программного формирования отчетности в СФР (ранее ПФР). Одной из наиболее специфических задач является заполнение документа СЗВ-ТД (который теперь является частью формы ЕФС-1) на основании уже имеющихся идентификаторов мероприятий. В этой статье мы подробно разберем, как устроена связь между кадровыми данными и этим документом, а также изучим алгоритм программного заполнения.
Прежде чем приступать к написанию кода, давайте проанализируем ситуацию и поймем, как 1С:ЗУП «видит» данные для отчета. Важно осознать, что сам документ СЗВ-ТД не является первичным местом хранения информации о трудовой деятельности. Он выполняет роль сборщика данных из специализированных регистров.
Ключевым объектом здесь выступает регистр сведений МероприятияТрудовойДеятельности. Именно в нем хранятся записи о приемах, переводах и увольнениях с уникальными идентификаторами (UUID). Рассмотрим подробнее: когда мы нажимаем кнопку «Заполнить» в документе, система ищет в этом регистре записи, которые еще не были «закрыты» другими документами СЗВ-ТД.
Если у вас есть ИД мероприятия из внешнего файла (например, из другой базы), ваша задача делится на два этапа: обеспечить наличие корректной записи в регистре и правильно инициировать заполнение документа.
Проанализируем записи регистра МероприятияТрудовойДеятельности. Чтобы мероприятие попало в документ, оно должно соответствовать следующим критериям:
ИдентификаторМероприятия должно совпадать с тем UUID, который вы получили из файла переноса. Это критически важно для последующих корректировок или отмен.МероприятияТрудовойДеятельностиПереданные).Посмотрим на пример того, как программно проверить или создать связь с UUID:
// Пример получения УникальногоИдентификатора из строки
ИДМероприятия = Новый УникальныйИдентификатор(СтрокаИзФайла);
// При создании записи в регистре программно (если это перенос данных)
МенеджерЗаписи = РегистрыСведений.МероприятияТрудовойДеятельности.СоздатьМенеджерЗаписи();
// Заполнение ключевых полей...
МенеджерЗаписи.ИдентификаторМероприятия = ИДМероприятия;
МенеджерЗаписи.Записать();
Теперь выясним причину, по которой документ может не заполняться автоматически. Обычно это происходит из-за отсутствия связи между кадровым документом и флагом «Отразить в трудовой книжке». Однако, если мы работаем чисто программно, нам нужно использовать типовые механизмы конфигурации.
В ЗУП 3.1 за заполнение СЗВ-ТД отвечают процедуры общего модуля СведенияОТрудовойДеятельностиРаботников. Рассмотрим алгоритм создания документа:
// 1. Создаем объект нового документа
НовыйДокумент = Документы.СЗВ_ТД.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Организация = ВыбраннаяОрганизация;
НовыйДокумент.Ответственный = Пользователи.ТекущийПользователь();
// 2. Вызываем типовое заполнение
// Этот метод проанализирует регистр МероприятияТрудовойДеятельности
СведенияОТрудовойДеятельностиРаботников.ЗаполнитьСЗВ_ТД(НовыйДокумент);
// 3. Записываем объект
НовыйДокумент.Записать(РежимЗаписиДокумента.Запись);
Если нам нужно заполнить документ не всеми доступными записями, а только по конкретным сотрудникам, разберем по шагам использование другого метода:
МассивСотрудников = Новый Массив;
МассивСотрудников.Добавить(СсылкаНаСотрудника);
// Используем метод заполнения по списку сотрудников
СведенияОТрудовойДеятельностиРаботников.ЗаполнитьПоСотрудникам(НовыйДокумент, МассивСотрудников);
Выясним ситуацию: часто кадровая служба требует не просто создать документ, а сделать его «принятым», чтобы эти мероприятия не «выскакивали» в будущих отчетах. Если мы просто создадим документ, мероприятия будут считаться готовыми к отправке.
Чтобы зафиксировать перенос данных как завершенный, необходимо программно установить признак того, что документ принят в ПФР. В последних версиях ЗУП это управляется реквизитом ДокументПринятВПФРПолностью или аналогичными флагами в табличных частях.
Проанализируем, что происходит при установке этого флага: при проведении документа создаются записи в регистре МероприятияТрудовойДеятельностиПереданные. Именно этот регистр «выключает» ИД мероприятия из очереди на заполнение.
// Установка флага принятия
НовыйДокумент.ДокументПринятВПФРПолностью = Истина;
// Важно также заполнить колонку "ПринятоПФР" в табличной части Мероприятия
Для Каждого СтрИз ТЧМероприятия Из НовыйДокумент.Мероприятия Цикл
СтрИз.ПринятоПФР = Истина;
КонецЦикла;
НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
Разберем ситуацию, когда переносятся данные до 2020 года (так называемое «последнее событие на 01.01.2020»). При программном заполнении таких записей через ИД, убедитесь, что в регистре МероприятияТрудовойДеятельностиПрочие также созданы соответствующие записи. Без них табличная часть документа может заполниться не полностью (например, может отсутствовать информация о должности или подразделении).
Резюмируем последовательность действий:
Документы.СЗВ_ТД.СоздатьДокумент().СведенияОТрудовойДеятельностиРаботников.ЗаполнитьСЗВ_ТД() для автоматического подбора записей из регистра в ТЧ документа.Используя этот подход, вы сможете корректно перенести историю трудовой деятельности и сформировать документы СЗВ-ТД, которые будут полностью соответствовать требованиям учетной системы и кадровой службы.