Как добавить количество дней компенсации отпуска в печатную форму Т-8 в ЗУП 3.1

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

Переход с версии ЗУП 2.5 на 3.1 часто вызывает вопросы у разработчиков, привыкших к прямой структуре макетов и запросов внутри документов. Одной из популярных задач является возврат в печатную форму приказа об увольнении (форма Т-8) строки с количеством дней компенсации или удержания отпуска. В типовой конфигурации ЗУП 3.1 эти данные выводятся в «Записку-расчет» (Т-61), но в самом приказе Т-8 они отсутствуют.

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

Анализ структуры печати в ЗУП 3.1

Проанализируем ситуацию: в ЗУП 2.5 запрос для печати находился непосредственно в модуле объекта или менеджера документа, и его было легко подправить. В ЗУП 3.1 архитектура построена на базе Библиотеки стандартных подсистем (БСП). Печатные формы кадровых приказов теперь вынесены в специализированные общие модули или менеджеры обработок.

Рассмотрим основные места, где сосредоточена логика формирования Т-8:

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

Попытка найти текст запроса через F12 (переход к определению) на функции СформироватьЗапросДляТ8 часто заходит в тупик, так как запрос собирается программно из множества частей в зависимости от параметров (увольнение списком, наличие определенных начислений и т.д.).

Где хранятся данные о днях компенсации

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

Важно помнить:

Создание внешней печатной формы (рекомендуемый способ)

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

Рассмотрим по шагам процесс создания ВПФ для решения нашей задачи:

Шаг 1. Подготовка макета

Скопируем типовой макет ПФ_MXL_Т8 из документа Увольнение во внешнюю обработку. В области «Работник» добавим новый параметр, например, ДниКомпенсацииОтпуска. Вы можете разместить его в строке с основанием или создать для этого отдельную строку в макете.

Шаг 2. Получение данных в модуле менеджера ВПФ

В модуле менеджера внешней обработки нам нужно переопределить логику заполнения параметров макета. Проанализируем пример кода, который позволяет получить нужные данные напрямую из объекта документа:


// В процедуре Печать или функции формирования табличного документа
// МассивОбъектов содержит ссылки на печатаемые документы (Увольнение)

Для Каждого СсылкаНаДокумент Из МассивОбъектов Цикл
    
    // Получаем данные документа напрямую
    ДниКомпенсации = СсылкаНаДокумент.ДнейКомпенсацииУдержания;
    ВидКомпенсации = СсылкаНаДокумент.ПорядокВыплатыКомпенсации;
    
    // Формируем текст для вывода
    ТекстКомпенсации = "";
    Если ДниКомпенсации > 0 Тогда
        ТекстКомпенсации = "Компенсация отпуска: " + Строка(ДниКомпенсации) + " дн.";
    ИначеЕсли ДниКомпенсации < 0 Тогда
        ТекстКомпенсации = "Удержание за отпуск: " + Строка(-ДниКомпенсации) + " дн.";
    КонецЕсли;
    
    // Передаем значение в параметры макета
    ПараметрыМакета.ДниКомпенсацииОтпуска = ТекстКомпенсации;
    
КонецЦикла;

Шаг 3. Использование типовых механизмов склонения

Поскольку форма Т-8 требует вывода ФИО сотрудника в винительном падеже, при создании своей формы обязательно используйте функцию склонения, чтобы не нарушить правила кадрового делопроизводства. Посмотрим на пример вызова:


РезультатСклонения = "";
Если ФизическиеЛицаЗарплатаКадры.Просклонять(Параметры.Работник, 4, РезультатСклонения, Параметры.Пол) Тогда
    Параметры.Работник = РезультатСклонения;
КонецЕсли;

Альтернативный вариант: Изменение текста основания

Если вы не хотите менять структуру макета, можно воспользоваться «хитрым» приемом: программно добавить информацию о днях компенсации в поле Основание (реквизит ТекстОснования). В этом случае данные просто допишутся в стандартную строку приказа.

Разберем, как это выглядит в коде формирования печати:


// В функции ПолучитьДанныеДляПечатиКадровогоПриказаТ8
// Находим место формирования текста основания

Если НЕ ПустаяСтрока(Выборка.ТекстОснования) Тогда
    Параметры.СтатьяТКРФ = Выборка.ТекстОснования + ", " + КадровыйУчет.ПредставлениеСтатьиУвольненияДляТ8(Выборка.СтатьяТКРФ);
    
    // Добавляем наши данные
    Если Выборка.ДнейКомпенсацииУдержания <> 0 Тогда
        Параметры.СтатьяТКРФ = Параметры.СтатьяТКРФ + ". Компенсация отпуска: " + Выборка.ДнейКомпенсацииУдержания + " дн.";
    КонецЕсли;
КонецЕсли;

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

Многие программисты пытаются найти СформироватьЗапросДляТ8 и добавить поле туда. Мы не рекомендуем этот путь по нескольким причинам:

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

Резюме

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

← На главную