Переход с версии ЗУП 2.5 на 3.1 часто вызывает вопросы у разработчиков, привыкших к прямой структуре макетов и запросов внутри документов. Одной из популярных задач является возврат в печатную форму приказа об увольнении (форма Т-8) строки с количеством дней компенсации или удержания отпуска. В типовой конфигурации ЗУП 3.1 эти данные выводятся в «Записку-расчет» (Т-61), но в самом приказе Т-8 они отсутствуют.
Разберем подробно, как реализовать этот функционал, где искать данные и как правильно изменить логику формирования печати, не снимая конфигурацию с поддержки.
Проанализируем ситуацию: в ЗУП 2.5 запрос для печати находился непосредственно в модуле объекта или менеджера документа, и его было легко подправить. В ЗУП 3.1 архитектура построена на базе Библиотеки стандартных подсистем (БСП). Печатные формы кадровых приказов теперь вынесены в специализированные общие модули или менеджеры обработок.
Рассмотрим основные места, где сосредоточена логика формирования Т-8:
ПечатьКадровыхПриказов (модуль менеджера) — здесь находятся основные вызовы процедур формирования макетов.КадровыйУчет — именно здесь вызывается функция СформироватьЗапросДляТ8, которая динамически собирает текст запроса.Увольнение — в его модуле менеджера описана процедура Печать, которая является точкой входа.Попытка найти текст запроса через F12 (переход к определению) на функции СформироватьЗапросДляТ8 часто заходит в тупик, так как запрос собирается программно из множества частей в зависимости от параметров (увольнение списком, наличие определенных начислений и т.д.).
Выясним, откуда нам нужно забирать данные. В документе Увольнение (или в табличной части документа УвольнениеСписком) есть реквизит ДнейКомпенсацииУдержания. Именно это число нам необходимо вывести в макет.
Важно помнить:
Чтобы не вносить изменения в типовую конфигурацию, мы создадим Внешнюю печатную форму (ВПФ). Это позволит сохранить возможность автоматического обновления программы.
Рассмотрим по шагам процесс создания ВПФ для решения нашей задачи:
Скопируем типовой макет ПФ_MXL_Т8 из документа Увольнение во внешнюю обработку. В области «Работник» добавим новый параметр, например, ДниКомпенсацииОтпуска. Вы можете разместить его в строке с основанием или создать для этого отдельную строку в макете.
В модуле менеджера внешней обработки нам нужно переопределить логику заполнения параметров макета. Проанализируем пример кода, который позволяет получить нужные данные напрямую из объекта документа:
// В процедуре Печать или функции формирования табличного документа
// МассивОбъектов содержит ссылки на печатаемые документы (Увольнение)
Для Каждого СсылкаНаДокумент Из МассивОбъектов Цикл
// Получаем данные документа напрямую
ДниКомпенсации = СсылкаНаДокумент.ДнейКомпенсацииУдержания;
ВидКомпенсации = СсылкаНаДокумент.ПорядокВыплатыКомпенсации;
// Формируем текст для вывода
ТекстКомпенсации = "";
Если ДниКомпенсации > 0 Тогда
ТекстКомпенсации = "Компенсация отпуска: " + Строка(ДниКомпенсации) + " дн.";
ИначеЕсли ДниКомпенсации < 0 Тогда
ТекстКомпенсации = "Удержание за отпуск: " + Строка(-ДниКомпенсации) + " дн.";
КонецЕсли;
// Передаем значение в параметры макета
ПараметрыМакета.ДниКомпенсацииОтпуска = ТекстКомпенсации;
КонецЦикла;
Поскольку форма Т-8 требует вывода ФИО сотрудника в винительном падеже, при создании своей формы обязательно используйте функцию склонения, чтобы не нарушить правила кадрового делопроизводства. Посмотрим на пример вызова:
РезультатСклонения = "";
Если ФизическиеЛицаЗарплатаКадры.Просклонять(Параметры.Работник, 4, РезультатСклонения, Параметры.Пол) Тогда
Параметры.Работник = РезультатСклонения;
КонецЕсли;
Если вы не хотите менять структуру макета, можно воспользоваться «хитрым» приемом: программно добавить информацию о днях компенсации в поле Основание (реквизит ТекстОснования). В этом случае данные просто допишутся в стандартную строку приказа.
Разберем, как это выглядит в коде формирования печати:
// В функции ПолучитьДанныеДляПечатиКадровогоПриказаТ8
// Находим место формирования текста основания
Если НЕ ПустаяСтрока(Выборка.ТекстОснования) Тогда
Параметры.СтатьяТКРФ = Выборка.ТекстОснования + ", " + КадровыйУчет.ПредставлениеСтатьиУвольненияДляТ8(Выборка.СтатьяТКРФ);
// Добавляем наши данные
Если Выборка.ДнейКомпенсацииУдержания <> 0 Тогда
Параметры.СтатьяТКРФ = Параметры.СтатьяТКРФ + ". Компенсация отпуска: " + Выборка.ДнейКомпенсацииУдержания + " дн.";
КонецЕсли;
КонецЕсли;
Многие программисты пытаются найти СформироватьЗапросДляТ8 и добавить поле туда. Мы не рекомендуем этот путь по нескольким причинам:
КадровыйУчет меняется почти в каждом релизе ЗУП. Ваши правки придется переносить вручную.ДнейКомпенсацииУдержания нужно будет пробрасывать через несколько вложенных функций и временных таблиц, которые формирует БСП.Для реализации задачи по выводу дней компенсации в Т-8 наиболее эффективным и безопасным методом является создание внешней печатной формы. Вы копируете типовой код из ПечатьКадровыхПриказов в модуль менеджера внешней обработки, добавляете обращение к реквизиту ДнейКомпенсацииУдержания из ссылки на документ и выводите его в нужную область макета. Такой подход гарантирует стабильность работы системы и корректность отображения данных даже после обновления конфигурации.