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