Как новичку разработать внешнюю печатную форму (ВПФ) для документа ТОРГ-13 в 1С?

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

Разработка внешних печатных форм (ВПФ) — одна из наиболее частых задач для начинающего программиста 1С. Основная сложность заключается в том, что в современных конфигурациях (на базе БСП — Библиотеки стандартных подсистем) логика формирования печатных форм распределена по разным модулям. В этой статье мы подробно разберем, как найти нужный код, чем отличаются модули объекта и менеджера, и как правильно собрать ВПФ на примере накладной на внутреннее перемещение (ТОРГ-13).

Постановка задачи и выбор стратегии

Представим ситуацию: нам необходимо доработать стандартную форму ТОРГ-13, добавив в нее специфические приписки или дополнительные колонки, при этом не снимая конфигурацию с поддержки. Оптимальное решение — создание Внешней печатной формы. Рассмотрим стандартный алгоритм действий:

  1. Создание новой внешней обработки.
  2. Копирование макета из типовой конфигурации.
  3. Реализация обязательной функции СведенияОВнешнейОбработке.
  4. Перенос логики формирования табличного документа из конфигурации в модуль обработки.

Важный нюанс: начинающие разработчики часто пытаются найти код печати в модуле объекта документа, но в современных решениях 1С (ERP, УТ 11, БП 3.0) логика печати почти всегда вынесена в модуль менеджера или общие модули.

Где искать код формирования печатной формы?

Разберем, почему поиск в модуле объекта часто заводит в тупик. Рассмотрим структуру модулей:

Модуль объекта предназначен для работы с конкретным экземпляром документа (объектом). Чтобы вызвать его методы, систему нужно заставить прочитать весь объект из базы. Это ресурсозатратно при массовой печати.

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

  1. Команда печати вызывает процедуру Печать в модуле менеджера.
  2. Эта процедура собирает коллекцию печатных форм и вызывает функции формирования данных.
  3. Если форма стандартная (как ТОРГ-13) и используется в нескольких документах, код формирования выносится в Общий модуль (например, УправлениеПечатьюБП или ПечатьТорговыхДокументов).

Чтобы быстро найти нужный участок кода, используем Глобальный поиск (Ctrl+Shift+F). В качестве ключа поиска используем имя макета, например, ПФ_MXL_ТОРГ13. Результаты поиска укажут на функцию, где этот макет вызывается (ПолучитьМакет("ПФ_MXL_ТОРГ13")).

Работа с отладчиком для понимания структуры

Выясним причину, по которой код кажется запутанным. Для этого воспользуемся отладкой. Посмотрим на алгоритм:

  1. Установим точку останова в модуле менеджера документа ПеремещениеТоваров в процедуре Печать.
  2. Запустим печать ТОРГ-13 в режиме предприятия.
  3. Когда выполнение остановится, воспользуемся окном Стек вызовов.

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

Реализация ВПФ: основные технические требования

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


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

Далее необходимо реализовать процедуру Печать, которая является точкой входа. Обратите внимание на сигнатуру — она должна строго соответствовать стандартам БСП:


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

Перенос логики формирования (функция СформироватьПечатнуюФорму)

Рассмотрим подробнее процесс адаптации типового кода. После того как мы нашли функцию СформироватьПечатнуюФормуТОРГ13 в общем модуле, нам нужно скопировать ее текст в модуль нашей ВПФ.

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

Проанализируем пример внесения изменений в макет:

  1. В макете добавим новую область или параметр, например, ДополнительнаяИнформация.
  2. В коде формирования найдем место, где заполняются параметры области заголовка или подвала.
  3. Добавим строку заполнения: ОбластьМакета.Параметры.ДополнительнаяИнформация = "Ваша приписка";.

Альтернатива: редактирование макетов без программирования

Иногда задачу можно решить значительно проще. Рассмотрим инструмент "Макеты печатных форм" (раздел Администрирование — Печатные формы, отчеты и обработки).

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

Использование расширений как современный подход

Выясним, почему опытные разработчики часто предпочитают Расширения вместо ВПФ. При использовании расширения вы можете применить аннотацию &Вместо для процедуры печати. Это позволяет:

Подводя итог, можно сказать, что для новичка путь через ВПФ является наиболее безопасным и понятным способом обучения структуре программы 1С. Главное — активно использовать Глобальный поиск и Отладчик для распутывания цепочек вызовов в типовых конфигурациях.

← На главную