Как получить паспортные данные и банковский счет сотрудника для макета печатной формы

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

При создании произвольных печатных форм в программе 1С:Зарплата и управление персоналом 8 (редакция 3.1) или 1С:ERP пользователи часто сталкиваются с проблемой: реквизиты, необходимые для трудового договора, такого как Ученический договор (с выбором подписанта) или Соглашение о конфиденциальности, отсутствуют непосредственно в документе Прием на работу. Это происходит потому, что архитектура 1С предполагает хранение персональных данных в отдельных регистрах сведений, связанных с физическим лицом, а не с объектом сотрудника или документа кадрового учета.

В этой статье мы подробно разберем, как программно извлечь эти данные, объединить их в одну структуру и вывести в макет печатной формы. Мы проанализируем механизмы работы с кадровыми данными и рассмотрим примеры кода, которые помогут автоматизировать процесс заполнения договоров — для этого также подойдёт автоматическая печать трудовых договоров по шаблонам.

Разберем структуру хранения данных

Прежде чем писать код, нам необходимо понять, где именно «живут» нужные нам сведения. Рассмотрим основные источники данных:

  1. Паспортные данные: Хранятся в регистре сведений ДокументыФизическихЛиц. Они привязаны не к сотруднику, а к физическому лицу.
  2. ИНН и СНИЛС: Являются реквизитами справочника ФизическиеЛица. Важно помнить, что для работы с этими сведениями в системе должно быть оформлено Согласие на обработку персональных данных для ЗУП 3.1.
  3. Банковские счета: Здесь ситуация сложнее. Данные могут находиться в регистре ЛицевыеСчетаСотрудников (если используется зарплатный проект) или в справочнике БанковскиеСчетаКонтрагентов, если выплата идет на личную карту сотрудника.
  4. Кадровые данные (должность, подразделение): Определяются на конкретную дату через срезы последних соответствующих регистров или через специализированные функции программного интерфейса (API) конфигурации.

Для решения задачи мы воспользуемся возможностями общего модуля КадровыйУчет, который позволяет получить массив данных одной выборкой — ускорить работу поможет конструктор печатных форм по шаблонам для 1С:ЗУП. Изучить другие доступные функции программного интерфейса вам поможет Справочник методов конфигурации Зарплата и кадры 3.1.

Программная реализация сбора данных

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


Функция ПолучитьСтруктуруКадровыхДанныхСотрудника(СотрудникСсылка, ДатаСреза = Неопределено) Экспорт
    РезультатДанных = Новый Структура;
    
    // Если дата не указана, берем текущую
    Период = ?(ЗначениеЗаполнено(ДатаСреза), ДатаСреза, ТекущаяДата());
    
    // Создаем запрос для подготовки временной таблицы сотрудников
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   &Сотрудник КАК Сотрудник,
        |   &Период КАК Период
        |ПОМЕСТИТЬ ВТСотрудники";
        
    Запрос.УстановитьПараметр("Сотрудник", СотрудникСсылка);
    Запрос.УстановитьПараметр("Период", Период);
    Запрос.Выполнить();
    
    // Описываем, какие именно поля нам нужны из кадрового учета
    ОписательТаблицы = КадровыйУчет.ОписаниеВременнойТаблицыОтборовСотрудников("ВТСотрудники", "Сотрудник", "Период");
    
    // Формируем список полей: ФИО, Паспорт, ИНН, СНИЛС, Должность и т.д.
    НужныеПоля = Новый Массив;
    НужныеПоля.Добавить("ФИОПолные");
    НужныеПоля.Добавить("ДокументПредставление"); // Здесь будет серия, номер и кем выдан паспорт
    НужныеПоля.Добавить("ИНН");
    НужныеПоля.Добавить("СтраховойНомерПФР");
    НужныеПоля.Добавить("Должность");
    НужныеПоля.Добавить("Подразделение");
    
    // Генерируем текст запроса программным интерфейсом ЗУП
    ТекстЗапросаКадровыеДанные = КадровыйУчет.ЗапросВТКадровыеДанныеСотрудников(Истина, ОписательТаблицы, НужныеПоля);
    
    // Выполняем запрос и выгружаем данные
    Запрос.Текст = ТекстЗапросаКадровыеДанные;
    Выборка = Запрос.Выполнить().Выбрать();
    
    Если Выборка.Следующий() Тогда
        // Заполняем структуру для макета
        ЗаполнитьЗначенияСвойств(РезультатДанных, Выборка);
    КонецЕсли;
    
    Возврат РезультатДанных;
КонецФункции

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

Склонение ФИО и должностей для договора

Для печатной формы трудового договора нам часто требуется ФИО в родительном падеже (например, «в лице Иванова Ивана Ивановича»). Выясним, как это сделать правильно. В типовых конфигурациях для этого предусмотрены функции склонения.

Проанализируем пример кода для получения ФИО в нужном падеже:


// Пример склонения ФИО сотрудника (2 - Родительный падеж)
ПолСотрудника = Выборка.ФизическоеЛицоПол; // Получаем из кадровых данных
ФИО_РП = ЗарплатаКадрыОтчеты.ПросклоненныеФИО(Выборка.ФИОПолные, 2, ПолСотрудника);
РезультатДанных.Вставить("ФИО_РодительныйПадеж", ФИО_РП);

// Склонение должности
ДолжностьНаименование = Выборка.ДолжностьНаименование;
Должность_РП = СклонениеПредставленийОбъектов.ПросклонятьПредставление(ДолжностьНаименование, 2);
РезультатДанных.Вставить("Должность_РодительныйПадеж", Должность_РП);

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

Как вытащить банковский счет

Это самый «капризный» реквизит. Если в вашей организации зарплата выплачивается через Зарплатный проект, данные следует искать в регистре ЛицевыеСчетаСотрудников. Правильность заполнения этих данных можно проверить, если использовать инструмент Выгрузка данных сотрудников по шаблону банка для открытия лицевых счетов. Если же перечисления идут на личные счета, данные хранятся в настройках способа выплаты зарплаты.

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


ЗапросСчет = Новый Запрос;
ЗапросСчет.Текст = 
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
    |   ЛицевыеСчета.НомерЛицевогоСчета КАК НомерСчета,
    |   ЛицевыеСчета.Банк.Наименование КАК НаименованиеБанка,
    |   ЛицевыеСчета.Банк.БИК КАК БИК
    |ИЗ
    |   РегистрСведений.ЛицевыеСчетаСотрудников КАК ЛицевыеСчета
    |ГДЕ
    |   ЛицевыеСчета.Сотрудник = &Сотрудник
    |   И ЛицевыеСчета.Организация = &Организация";

ЗапросСчет.УстановитьПараметр("Сотрудник", СотрудникСсылка);
ЗапросСчет.УстановитьПараметр("Организация", Выборка.Организация);

ВыборкаСчет = ЗапросСчет.Выполнить().Выбрать();
Если ВыборкаСчет.Следующий() Тогда
    СтрокаСчета = "р/с " + ВыборкаСчет.НомерСчета + " в " + ВыборкаСчет.НаименованиеБанка + " БИК " + ВыборкаСчет.БИК;
    РезультатДанных.Вставить("БанковскиеРеквизиты", СтрокаСчета);
Иначе
    РезультатДанных.Вставить("БанковскиеРеквизиты", "Счет не указан");
КонецЕсли;

Вывод данных в макет

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


Макет = ПолучитьМакет("ТрудовойДоговор");
ОбластьМакета = Макет.ПолучитьОбласть("ДанныеСотрудника");

// Заполняем параметры области из нашей структуры
ОбластьМакета.Параметры.Заполнить(РезультатДанных);

// Дополнительно можно отформатировать даты
ОбластьМакета.Параметры.ДатаДоговора = Формат(Объект.Дата, "ДЛФ=DD");

ТабличныйДокумент.Вывести(ОбластьМакета);

Подведем итог: для успешного создания печатной формы со сложными данными (паспорт, счета, ИНН) не стоит пытаться найти эти поля в реквизитах самого документа. Правильный путь — использование программного интерфейса КадровыйУчет для персональных данных и прямых запросов к регистру ЛицевыеСчетаСотрудников для банковских реквизитов. Такой подход гарантирует, что ваша печатная форма будет работать корректно даже при изменении данных сотрудника в будущем.

← На главную