Как в 1С:ЗУП 3.1 программно получить кадровые данные и сведения для печатных форм

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

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

В конфигурациях на базе подсистемы БЗК (Библиотека Зарплата и Кадры) реализован специализированный программный интерфейс (API), который позволяет получать актуальные сведения гарантированно надежным и оптимизированным способом. Разберем по шагам, какие функции и модули следует использовать для различных задач.

Универсальное получение кадровых и персональных данных через модуль КадровыйУчет

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

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


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

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

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

Если ТаблицаДанных.Количество() > 0 Тогда
    СтрокаДанных = ТаблицаДанных[0];
    Сообщить("Должность: " + СтрокаДанных.Должность);
    Сообщить("Оклад/Тариф: " + СтрокаДанных.ТарифнаяСтавка);
КонецЕсли;

Проанализируем параметры этой функции:

  1. ТолькоРазрешенные — булево значение. Если передано Истина, запрос автоматически отфильтрует данные с учетом прав текущего пользователя (RLS).
  2. СписокСотрудников — массив, список значений или одиночная ссылка на справочник Сотрудники.
  3. КадровыеДанные — строка с именами полей через запятую либо массив строк. Позволяет запрашивать паспортные данные, контакты, кадровые перемещения, ставки и сведения об оплате труда.
  4. Период — дата, на которую требуется получить срез сведений. Если требуется получить данные по сотрудникам на разные даты, вместо даты можно передать таблицу отборов с колонками Сотрудник и Период.
  5. ФормироватьСПериодичностьДень — флаг периодичности. При значении Истина срез выполняется на конец дня без учета секунд, что повышает производительность. Если требуется учитывать точное время документов (например, несколько переводов в один день), передаем Ложь.

Использование методов во временных таблицах и сложных пакетных запросах

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

Для кадровых данных применяется процедура:


КадровыйУчет.ЗапросВТКадровыеДанныеСотрудников(
    ИмяВТ, 
    ИмяВременнойТаблицыОтборов, 
    КадровыеДанные, 
    ТолькоРазрешенные
);

Для получения списка плановых начислений сотрудника на определенную дату (например, для вывода всех действующих надбавок и доплат) модуль КадровыйУчет предоставляет отдельную функцию формирования запроса к временной таблице:


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

Разберем по шагам, как использовать этот механизм в своем пакетном запросе:

  1. Создаем менеджер временных таблиц и помещаем в него таблицу отбора с полями Сотрудник и Период.
  2. Вызываем функцию формирования текста запроса из общего модуля КадровыйУчет.
  3. Добавляем полученный текст к нашему основному пакету запросов и выполняем финальную выборку.

Получение сведений об организации и ответственных лицах

Для вывода реквизитов организации (юридический адрес, ИНН, КПП, ОГРН, банковские реквизиты) и фамилий подписантов (руководитель, главный бухгалтер, кадровик) в печатных формах предназначены функции общего модуля ЗарплатаКадрыПечатныеФормы.

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


// Получение полных реквизитов организации
СведенияОбОрганизации = ЗарплатаКадрыПечатныеФормы.СведенияОбОрганизации(
    СсылкаНаОрганизацию, 
    ТекущаяДатаСеанса()
);

ИННОрганизации = СведенияОбОрганизации.ИНН;
ЮрАдрес        = СведенияОбОрганизации.ЮридическийАдрес;
ПолноеИмя      = СведенияОбОрганизации.НаименованиеПолное;

// Получение ответственных лиц (руководитель, кадровик)
ОтветственныеЛица = ЗарплатаКадрыПечатныеФормы.ОтветственныеЛицаОрганизации(
    СсылкаНаОрганизацию, 
    ТекущаяДатаСеанса()
);

ФИОРуководителя        = ОтветственныеЛица.Руководитель;
ДолжностьРуководителя  = ОтветственныеЛица.РуководительДолжность;
ФИОКадровика           = ОтветственныеЛица.Кадровик;

Склонение ФИО, инициалы и число прописью

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

  1. Склонение ФИО и должностей: для склонения по падежам применяется общий модуль СклонениеПредставлений или метод ЗарплатаКадрыПечатныеФормы.СклонениеФИО(ФИО, НомерПадежа). Номера падежей соответствуют стандартному порядку (1 — именительный, 2 — родительный, 3 — дательный, 4 — винительный, 5 — творительный, 6 — предложный).
  2. Форматирование инициалов: для преобразования полного ФИО в формат «Фамилия И. О.» используется метод ФизическиеЛицаКлиентСервер.ФамилияИнициалы(ПолноеФИО).
  3. Сумма и оклад прописью: для вывода тарифных ставок текстом применяется стандартная функция платформы ЧислоПрописью с параметрами валюты:
    
    СуммаПрописью = ЧислоПрописью(
        СуммаОклада, 
        "L=ru_RU", 
        "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2"
    );
    

Чтение дополнительных реквизитов и сведений

Если для сотрудника, подразделения или организации заданы дополнительные реквизиты через подсистему БСП «Свойства», их получение выполняется с помощью функций модуля УправлениеСвойствами:

СтруктураСвойств = УправлениеСвойствами.ЗначенияСвойств(СсылкаНаСотрудника);

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

Рекомендации по оптимизации производительности

При использовании типового API важно соблюдать ключевые правила оптимизации:

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