Как найти и внести изменения в код заполнения печатной формы ТОРГ-12 в 1С:ERP

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

При работе с крупными конфигурациями на платформе 1С:Предприятие 8.3, такими как 1С:ERP Управление предприятием 2 или 1С:Комплексная автоматизация 2, разработчики часто сталкиваются с необходимостью кастомизации печатных форм. Одной из наиболее востребованных форм является Товарная накладная (ТОРГ-12).

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

Архитектура подсистемы печати БСП в 1С:ERP

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

  1. Регистрация команды печати: В модуле менеджера документа (например, РеализацияТоваровУслуг) описывается состав доступных печатных форм. Это происходит в экспортной процедуре ДобавитьКомандыПечати.
  2. Вызов процедуры формирования: Когда пользователь нажимает кнопку печати в интерфейсе, система обращается к экспортной процедуре Печать в том же модуле менеджера.
  3. Сбор данных и заполнение макета: Процедура Печать выполняет запросы к базе данных, получает макет и последовательно заполняет его области полученными данными. Часто для унифицированных форм (таких как ТОРГ-12, М-11, Счет-фактура) логика вынесена в специализированные общие модули или обработки.

Где найти код и макет ТОРГ-12 в конфигураторе

Выясним точное местонахождение механизмов ТОРГ-12 в конфигурации 1С:ERP:

  1. Откройте конфигуратор и найдите документ, из которого печатается накладная. Обычно это документ РеализацияТоваровУслуг (Реализация товаров и услуг).
  2. Откройте Модуль менеджера этого документа.
  3. Найдите процедуру Печать. Внутри нее будет происходить анализ того, какую именно форму выбрал пользователь.

Для ТОРГ-12 в типовых конфигурациях управление обычно передается специализированной обработке. Проанализируем этот момент подробнее. Сами макеты и общие алгоритмы печати торговых документов вынесены в обработку ПечатьОбщихФорм.

В этой обработке находятся макеты с именами вида ПФ_MXL_ТОРГ12 (или аналогичные). Чтобы быстро найти место получения макета в коде, мы можем запустить глобальный поиск по конфигурации со строкой:

ПолучитьМакет("ПФ_MXL_ТОРГ12")

Или выполнить поиск по имени обработки ПечатьОбщихФорм в процедуре печати менеджера документа.

Как программно заполняются параметры макета

В простых внешних печатных формах разработчики привыкли видеть последовательное заполнение каждого параметра вручную, например:


ОбластьМакета.Параметры.Организация = Выборка.Организация;
ОбластьМакета.Параметры.Контрагент = Выборка.Контрагент;

В 1С:ERP и других типовых решениях используется более оптимизированный и лаконичный подход. Разберем по шагам, как это работает:

  1. Данные для печати собираются одним большим пакетным запросом. Поля выборки называют точно так же, как параметры в макете печатной формы (например, НомерДокумента, ДатаДокумента, Грузополучатель).
  2. Для заполнения параметров шапки или строк используется групповой метод заполнения свойств. Это позволяет избежать написания сотен строк однотипного кода.

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


// Получаем область макета
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");

// Заполняем параметры области напрямую из структуры ДанныеШапки
ОбластьШапка.Параметры.Заполнить(ДанныеШапки);

// Выводим заполненную область в табличный документ
ТабличныйДокумент.Вывести(ОбластьШапка);

Метод Заполнить() у объекта Параметры автоматически сопоставляет имена ключей в переданной структуре (или имена колонок в выборке/строке таблицы значений) с именами параметров в ячейках макета. Если имена совпадают, значение переносится автоматически.

Если вам требуется добавить новое поле в ТОРГ-12 (например, артикул или особый реквизит организации), вам достаточно:

Способы изменения ТОРГ-12 без снятия конфигурации с поддержки

Править код типовой конфигурации напрямую в модуле менеджера или в обработке ПечатьОбщихФорм — крайне нежелательное решение. Это усложнит последующие обновления системы. Рассмотрим три современных и безопасных альтернативных варианта решения этой задачи.

Вариант 1. Редактирование макета в режиме «1С:Предприятие» (без программирования)

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

  1. Перейдите в раздел НСИ и администрированиеАдминистрированиеПечатные формы, отчеты и обработки.
  2. Выберите пункт Макеты печатных форм.
  3. Найдите в списке макет ТОРГ-12 (он будет относиться к общим макетам или к документу реализации).
  4. Нажмите кнопку Изменить макет.
  5. Отредактируйте его во встроенном табличном редакторе 1С и сохраните изменения.

Важное правило: Ни в коем случае не удаляйте и не переименовывайте существующие параметры макета (обозначенные угловыми скобками <>). Если какой-то параметр вам больше не нужен, просто очистите ячейку, сделайте цвет текста белым или уменьшите ширину этой колонки/строки до минимума. Удаление параметра приведет к ошибке выполнения кода при печати.

Вариант 2. Использование расширения конфигурации

Расширения — это самый гибкий инструмент для программиста 1С, позволяющий кастомизировать систему без изменения основной конфигурации поставщика.

Выясним алгоритм действий при использовании расширения:

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

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

Вариант 3. Создание внешней печатной формы (ВПФ)

Этот классический способ подходит, если вам нужно кардинально изменить логику работы ТОРГ-12 для конкретных пользователей, сохранив при этом типовой вариант для всех остальных.

Для создания ВПФ нам потребуется реализовать стандартный интерфейс БСП:

  1. Создайте новую внешнюю обработку в конфигураторе.
  2. В модуле объекта обработки обязательно разместите функцию СведенияОВнешнейОбработке(), которая регистрирует обработку в справочнике дополнительных отчетов и обработок.
  3. Напишите экспортную процедуру Печать(), которая будет принимать параметры от БСП, выполнять логику формирования табличного документа и возвращать его на экран.

Пример структуры функции регистрации ВПФ в модуле объекта обработки:


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

Используя один из этих подходов, вы сможете быстро, качественно и безопасно для будущих обновлений внести любые изменения в печатную форму ТОРГ-12 в системе 1С:ERP.

← На главную