Как программно заполнить документ СЗВ-ТД в 1С:ЗУП 3.1 по идентификаторам мероприятий?

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

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

Понимание архитектуры хранения данных СЗВ-ТД

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

Ключевым объектом здесь выступает регистр сведений МероприятияТрудовойДеятельности. Именно в нем хранятся записи о приемах, переводах и увольнениях с уникальными идентификаторами (UUID). Рассмотрим подробнее: когда мы нажимаем кнопку «Заполнить» в документе, система ищет в этом регистре записи, которые еще не были «закрыты» другими документами СЗВ-ТД.

Если у вас есть ИД мероприятия из внешнего файла (например, из другой базы), ваша задача делится на два этапа: обеспечить наличие корректной записи в регистре и правильно инициировать заполнение документа.

Шаг 1: Подготовка данных в регистре мероприятий

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

  1. Запись должна существовать в регистре по конкретному сотруднику и организации.
  2. Поле ИдентификаторМероприятия должно совпадать с тем UUID, который вы получили из файла переноса. Это критически важно для последующих корректировок или отмен.
  3. Мероприятие не должно быть отмечено как уже переданное в ПФР (в регистре МероприятияТрудовойДеятельностиПереданные).

Посмотрим на пример того, как программно проверить или создать связь с UUID:


// Пример получения УникальногоИдентификатора из строки
ИДМероприятия = Новый УникальныйИдентификатор(СтрокаИзФайла);

// При создании записи в регистре программно (если это перенос данных)
МенеджерЗаписи = РегистрыСведений.МероприятияТрудовойДеятельности.СоздатьМенеджерЗаписи();
// Заполнение ключевых полей...
МенеджерЗаписи.ИдентификаторМероприятия = ИДМероприятия;
МенеджерЗаписи.Записать();

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

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

В ЗУП 3.1 за заполнение СЗВ-ТД отвечают процедуры общего модуля СведенияОТрудовойДеятельностиРаботников. Рассмотрим алгоритм создания документа:


// 1. Создаем объект нового документа
НовыйДокумент = Документы.СЗВ_ТД.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Организация = ВыбраннаяОрганизация;
НовыйДокумент.Ответственный = Пользователи.ТекущийПользователь();

// 2. Вызываем типовое заполнение
// Этот метод проанализирует регистр МероприятияТрудовойДеятельности
СведенияОТрудовойДеятельностиРаботников.ЗаполнитьСЗВ_ТД(НовыйДокумент);

// 3. Записываем объект
НовыйДокумент.Записать(РежимЗаписиДокумента.Запись);

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


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

// Используем метод заполнения по списку сотрудников
СведенияОТрудовойДеятельностиРаботников.ЗаполнитьПоСотрудникам(НовыйДокумент, МассивСотрудников);

Шаг 3: Установка статуса «Сдано» (Важный нюанс)

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

Чтобы зафиксировать перенос данных как завершенный, необходимо программно установить признак того, что документ принят в ПФР. В последних версиях ЗУП это управляется реквизитом ДокументПринятВПФРПолностью или аналогичными флагами в табличных частях.

Проанализируем, что происходит при установке этого флага: при проведении документа создаются записи в регистре МероприятияТрудовойДеятельностиПереданные. Именно этот регистр «выключает» ИД мероприятия из очереди на заполнение.


// Установка флага принятия
НовыйДокумент.ДокументПринятВПФРПолностью = Истина;
// Важно также заполнить колонку "ПринятоПФР" в табличной части Мероприятия
Для Каждого СтрИз ТЧМероприятия Из НовыйДокумент.Мероприятия Цикл
    СтрИз.ПринятоПФР = Истина;
КонецЦикла;

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

Особенности работы с историческими данными

Разберем ситуацию, когда переносятся данные до 2020 года (так называемое «последнее событие на 01.01.2020»). При программном заполнении таких записей через ИД, убедитесь, что в регистре МероприятияТрудовойДеятельностиПрочие также созданы соответствующие записи. Без них табличная часть документа может заполниться не полностью (например, может отсутствовать информация о должности или подразделении).

Резюмируем последовательность действий:

  1. Проверяем UUID: Убеждаемся, что ИдентификаторМероприятия в базе соответствует ИД из вашего файла.
  2. Заполняем регистры: Если данных в регистрах еще нет, создаем их программно, соблюдая ссылочную целостность (Организация, Сотрудник, ФизическоеЛицо).
  3. Создаем документ: Используем Документы.СЗВ_ТД.СоздатьДокумент().
  4. Автозаполнение: Вызываем СведенияОТрудовойДеятельностиРаботников.ЗаполнитьСЗВ_ТД() для автоматического подбора записей из регистра в ТЧ документа.
  5. Фиксация: Устанавливаем статус «Принято ПФР» для предотвращения дублирования данных в будущем.

Используя этот подход, вы сможете корректно перенести историю трудовой деятельности и сформировать документы СЗВ-ТД, которые будут полностью соответствовать требованиям учетной системы и кадровой службы.

← На главную