Как изменить заголовок и макет печатной формы накладной в 1С:Управление торговлей?

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

При необходимости изменить печатную форму документа (например, документа «Реализация товаров и услуг») разработчики и администраторы 1С часто сталкиваются с вопросом: обязательно ли создавать внешнюю печатную форму (ВПФ), можно ли просто скопировать экспортные процедуры из модуля менеджера документа или достаточно отредактировать макет в режиме «1С:Предприятие»?

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

Когда внешняя печатная форма не требуется: редактирование пользовательских макетов

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

В конфигурациях 1С предусмотрен встроенный механизм пользовательских макетов печати:

  1. Перейдем в раздел НСИ и администрирование → Печатные формы, отчеты и обработки → Макеты печатных форм.
  2. Найдем в списке нужный макет документа (например, печатную форму накладной).
  3. Откроем макет для редактирования, внесем необходимые визуальные правки и сохраним изменения.

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

Почему простое копирование кода из модуля менеджера во внешнюю обработку не работает?

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

  1. Обращение к макетам конфигурации: В типовых модулях менеджеров вызовы макетов часто выполняются через общие методы подсистемы печати, например УправлениеПечатью.МакетПечатнойФормы("Документ.РеализацияТоваровУслуг.ПФ_MXL_..."). В контексте внешней обработки макет должен извлекаться локально с помощью метода ЭтотОбъект.ПолучитьМакет("ИмяМакета").
  2. Зависимость от неэкспортных процедур: Экспортные методы формирования данных в модуле менеджера часто обращаются к локальным неэкспортным функциям и процедурам своего же модуля, недоступным из внешнего контекста.
  3. Разделение данных и алгоритмов вывода (особенность УТ 11, КА и ERP): В современных конфигурациях модуль менеджера документа нередко формирует только структуру данных и таблицы запросов, а алгоритмы компоновки табличного документа вынесены в общие обработки (например, Обработка.ПечатьОбщихФорм) или общие модули.
  4. Стандарты БСП: Для корректной работы внешней печатной формы модуль объекта обработки должен содержать стандартную экспортную функцию СведенияОВнешнейОбработке() и процедуру печати со строго определенной сигнатурой параметров.

Вариант 1. Использование расширения конфигурации (рекомендуемый подход)

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

Разберем по шагам порядок действий при разработке расширения:

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

Вариант 2. Разработка внешней печатной формы через постобработку табличного документа

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

Посмотрим на пример структуры модуля объекта внешней печатной формы:


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
    ПараметрыРегистрации.Версия = "1.0";
    ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг");
    
    Команда = ПараметрыРегистрации.Команды.Добавить();
    Команда.Представление = НСтр("ru = 'Накладная (с измененным заголовком)'");
    Команда.Идентификатор = "НакладнаяСвойЗаголовок";
    Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСервера();
    Команда.Модификатор = "ПечатьДокументов";
    
    Возврат ПараметрыРегистрации;
КонецФункции

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

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

Вариант 3. Использование экспортных функций сбора данных

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

В этом случае внешняя обработка вызывает типовую функцию сбора данных документа (например, Документы.РеализацияТоваровУслуг.ДанныеДляПечатиНакладной(...)), получает подготовленную структуру или таблицу значений, после чего процедура печати обращается к локальному макету внешней обработки через ЭтотОбъект.ПолучитьМакет("ПФ_MXL_Накладная") и заполняет его полученными данными с необходимыми модификациями.

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

← На главную