Как создать внешнюю печатную форму для Приказа о переводе Т-5 в Зарплате 3.1

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

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

Анализ архитектуры печатной формы Т-5

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

Для создания ВПФ нам необходимо выполнить три глобальные задачи:

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

Шаг 1. Подготовка каркаса внешней обработки

Создадим новую внешнюю обработку. В модуле объекта нам необходимо разместить экспортную функцию СведенияОВнешнейОбработке. Без неё система не сможет распознать файл как печатную форму.


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
    ПараметрыРегистрации.Назначение.Добавить("Документ.КадровыйПеревод");
    ПараметрыРегистрации.Наименование = "Приказ о переводе (Т-5) внешняя";
    ПараметрыРегистрации.Идентификатор = "ПФ_MXL_Т5_Внешняя";
    ПараметрыРегистрации.БезопасныйРежим = Ложь;
    ПараметрыРегистрации.Версия = "1.0";
    
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = "Приказ о переводе (Т-5) (измененный)";
    НоваяКоманда.Идентификатор = "Т5_Внешняя";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    НоваяКоманда.Модификатор = "ПечатьMXL";
    
    Возврат ПараметрыРегистрации;
КонецФункции

Обратим внимание на Модификатор. Значение ПечатьMXL сообщает системе, что результатом работы будет табличный документ, который нужно вывести в стандартное окно предпросмотра.

Шаг 2. Реализация процедуры Печать

Основная точка входа для БСП — процедура Печать. Именно здесь мы будем управлять процессом формирования документа. Разберем её структуру:


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "Т5_Внешняя");
    
    Если ПечатнаяФорма <> Неопределено Тогда
        ПечатнаяФорма.ТабличныйДокумент = СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати);
        ПечатнаяФорма.СинонимМакета = "Приказ о переводе (Т-5)";
        ПечатнаяФорма.ПолныйПутьКМакету = ""; // Оставляем пустым для ВПФ
    КонецЕсли;
    
КонецПроцедуры

Шаг 3. Перенос логики формирования данных

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

Найдем в конфигурации (модуль менеджера документа КадровыйПеревод или модуль обработки ПечатьПриказов) функцию, отвечающую за Т-5. Обычно она называется СформироватьПечатныеФормыПриказовОПереводе. Проанализируем её содержимое и скопируем в нашу обработку под именем СформироватьПечатнуюФорму.

Важный нюанс: В ЗУП 3.1 данные для печати собираются через сложные запросы к виртуальным таблицам и срезам последних. Убедимся, что все вспомогательные функции (например, склонение ФИО через СклонениеФИО.Просклонять) доступны. Если какие-то методы не являются экспортными в типовой конфигурации, их логику также придется перенести в ВПФ.

Шаг 4. Переопределение макета

Теперь разберем, как заставить код брать макет из файла обработки. В типовом коде вы встретите строку вида:

Макет = УправлениеПечатью.МакетПечатнойФормы("ОбщийМакет.ПФ_MXL_Т5");

Нам необходимо изменить её на получение макета из текущего объекта. Рассмотрим пример кода:


Функция СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати)
    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_КадровыйПеревод_Т5";
    
    // Получаем макет из состава внешней обработки
    Макет = ЭтотОбъект.ПолучитьМакет("ПФ_MXL_Т5");
    
    // Здесь идет логика заполнения областей макета
    // Например:
    // ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    // ДанныеПечати = ПолучитьДанныеДляПечати(МассивОбъектов);
    // ... заполнение параметров ...
    // ТабличныйДокумент.Вывести(ОбластьЗаголовок);
    
    Возврат ТабличныйДокумент;
    
КонецФункции

Не забудьте скопировать сам макет ПФ_MXL_Т5 из конфигурации в состав вашей внешней обработки и внести в него необходимые правки (например, изменить логотип, добавить дополнительные подписи или изменить формулировки).

Шаг 5. Особенности работы с общей формой печати

Поскольку ЗУП 3.1 использует механизм «Печать общих форм», ваша ВПФ автоматически получит все преимущества типового интерфейса:

Для этого важно, чтобы процедура Печать корректно заполняла КоллекцияПечатныхФорм. Если вы хотите, чтобы форма сразу открывалась на экране, убедитесь, что в регистрации команды указан правильный тип вызова.

Типичные ошибки при разработке ВПФ для Т-5

Проанализируем ситуации, в которых ВПФ может работать некорректно:

  1. Ошибки склонения: В ЗУП 3.1 используется компонента склонения. Если вы копируете запрос, убедитесь, что параметры склонения (Падеж) передаются правильно в соответствующие функции БСП.
  2. Области макета: Если вы удалите или переименуете именованную область в макете (например, Подвал или Строка), программный код, который обращается к ней через Макет.ПолучитьОбласть(), вызовет исключение. Будьте осторожны при визуальном редактировании.
  3. Совместительство и дистанционная работа: Приказ Т-5 содержит условия отображения некоторых полей в зависимости от типа занятости сотрудника. Проверьте, чтобы ваша логика в ВПФ учитывала эти ветвления кода.

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

← На главную