Как получить кадровые данные для внешних печатных форм в ЗУП 3.1.8?

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

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

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

Вариант 1. Правильный переход на новые функции API

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

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


ДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(
    Истина, 
    МассивСотрудников, 
    "ФИОПолные,ФамилияИО,ДатаПриема,ДолжностьПоШтатномуРасписанию,СрочныйДоговор", 
    ДатаПолучения
);

Этот метод вернет таблицу значений со всеми запрошенными реквизитами на указанную дату. Если же нам требуется сформировать сложный запрос и соединить кадровые данные с нашими собственными таблицами, проанализируем работу через временные таблицы (ВТ).

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


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

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

// 3. Формируем временную таблицу с кадровыми данными
КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(
    ОписательВременныхТаблиц, 
    Истина, 
    КадровыеДанные
);

Также программный интерфейс 1С предлагает и другие полезные инструменты, которые мы можем применять в зависимости от нашей задачи:

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

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

Вариант 2. Быстрый перенос старых алгоритмов (Режим совместимости)

Если сроки поджимают и внешних печатных форм очень много, рассмотрим «быстрый» путь решения проблемы. Поскольку фирма «1С» гарантирует сохранение только программного интерфейса, служебные процедуры для старых алгоритмов были удалены.

Чтобы восстановить работоспособность за 5 минут, мы можем:

  1. Открыть конфигурацию старого релиза (например, ЗУП 3.1.7).
  2. Найти там удаленные процедуры (например, СформироватьЗапросДляТ5).
  3. Скопировать эти функции прямо в модуль нашей внешней печатной формы (или создать для них свой общий модуль).

Однако помните, что этот подход несет риски в будущем. Если 1С изменит структуру регистров сведений, к которым обращаются эти старые запросы, наша печатная форма все равно сломается, и ошибку будет искать сложнее.

Итоги

Мы настоятельно рекомендуем переводить все внешние печатные формы и отчеты на использование актуального программного интерфейса. Применение таких методов, как КадровыеДанныеСотрудников и СоздатьВТКадровыеДанныеСотрудников, не только решает проблему с печатью Т-1, Т-5 и Т-8 в новых релизах, но и делает ваши разработки независимыми от внутренней архитектуры типовых отчетов 1С.

← На главную