При работе с крупными конфигурациями на платформе 1С:Предприятие 8.3, такими как 1С:ERP Управление предприятием 2 или 1С:Комплексная автоматизация 2, разработчики часто сталкиваются с необходимостью кастомизации печатных форм. Одной из наиболее востребованных форм является Товарная накладная (ТОРГ-12).
В этой статье мы подробно разберем устройство подсистемы печати на базе БСП (Библиотеки стандартных подсистем), выясним, где именно в конфигураторе располагаются алгоритмы формирования ТОРГ-12, как данные связываются с макетом и какими способами можно внести изменения с минимальными затратами на последующую поддержку системы.
Прежде чем открывать конфигуратор, давайте разберем логику работы печати. В современных конфигурациях 1С вся печать стандартизирована. Процесс вывода печатной формы на экран состоит из нескольких шагов:
РеализацияТоваровУслуг) описывается состав доступных печатных форм. Это происходит в экспортной процедуре ДобавитьКомандыПечати.Печать в том же модуле менеджера.Печать выполняет запросы к базе данных, получает макет и последовательно заполняет его области полученными данными. Часто для унифицированных форм (таких как ТОРГ-12, М-11, Счет-фактура) логика вынесена в специализированные общие модули или обработки.Выясним точное местонахождение механизмов ТОРГ-12 в конфигурации 1С:ERP:
РеализацияТоваровУслуг (Реализация товаров и услуг).Печать. Внутри нее будет происходить анализ того, какую именно форму выбрал пользователь.Для ТОРГ-12 в типовых конфигурациях управление обычно передается специализированной обработке. Проанализируем этот момент подробнее. Сами макеты и общие алгоритмы печати торговых документов вынесены в обработку ПечатьОбщихФорм.
В этой обработке находятся макеты с именами вида ПФ_MXL_ТОРГ12 (или аналогичные). Чтобы быстро найти место получения макета в коде, мы можем запустить глобальный поиск по конфигурации со строкой:
ПолучитьМакет("ПФ_MXL_ТОРГ12")
Или выполнить поиск по имени обработки ПечатьОбщихФорм в процедуре печати менеджера документа.
В простых внешних печатных формах разработчики привыкли видеть последовательное заполнение каждого параметра вручную, например:
ОбластьМакета.Параметры.Организация = Выборка.Организация;
ОбластьМакета.Параметры.Контрагент = Выборка.Контрагент;
В 1С:ERP и других типовых решениях используется более оптимизированный и лаконичный подход. Разберем по шагам, как это работает:
НомерДокумента, ДатаДокумента, Грузополучатель).Посмотрим на классический пример заполнения параметров области макета из структуры данных или выборки запроса:
// Получаем область макета
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
// Заполняем параметры области напрямую из структуры ДанныеШапки
ОбластьШапка.Параметры.Заполнить(ДанныеШапки);
// Выводим заполненную область в табличный документ
ТабличныйДокумент.Вывести(ОбластьШапка);
Метод Заполнить() у объекта Параметры автоматически сопоставляет имена ключей в переданной структуре (или имена колонок в выборке/строке таблицы значений) с именами параметров в ячейках макета. Если имена совпадают, значение переносится автоматически.
Если вам требуется добавить новое поле в ТОРГ-12 (например, артикул или особый реквизит организации), вам достаточно:
<НовоеПоле>.Править код типовой конфигурации напрямую в модуле менеджера или в обработке ПечатьОбщихФорм — крайне нежелательное решение. Это усложнит последующие обновления системы. Рассмотрим три современных и безопасных альтернативных варианта решения этой задачи.
Если вам нужно просто изменить визуальное оформление (поменять шрифты, цвета, границы ячеек, добавить статический текст, логотип компании или переместить поля), это можно сделать прямо в пользовательском режиме:
Важное правило: Ни в коем случае не удаляйте и не переименовывайте существующие параметры макета (обозначенные угловыми скобками <>). Если какой-то параметр вам больше не нужен, просто очистите ячейку, сделайте цвет текста белым или уменьшите ширину этой колонки/строки до минимума. Удаление параметра приведет к ошибке выполнения кода при печати.
Расширения — это самый гибкий инструмент для программиста 1С, позволяющий кастомизировать систему без изменения основной конфигурации поставщика.
Выясним алгоритм действий при использовании расширения:
РеализацияТоваровУслуг и его модуль менеджера.ПечатьОбщихФорм и нужный макет ТОРГ-12.&Вместо или &После. Это позволит вам перенаправить логику формирования печатной формы на ваш измененный макет, расположенный внутри расширения, и дополнить запрос собственными данными.Преимущество этого метода в том, что основная конфигурация остается на полной поддержке, а ваш код изолирован в расширении и легко переносится при обновлениях.
Этот классический способ подходит, если вам нужно кардинально изменить логику работы ТОРГ-12 для конкретных пользователей, сохранив при этом типовой вариант для всех остальных.
Для создания ВПФ нам потребуется реализовать стандартный интерфейс БСП:
СведенияОВнешнейОбработке(), которая регистрирует обработку в справочнике дополнительных отчетов и обработок.Печать(), которая будет принимать параметры от БСП, выполнять логику формирования табличного документа и возвращать его на экран.Пример структуры функции регистрации ВПФ в модуле объекта обработки:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Документ.РеализацияТоваровУслуг");
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", "Товарная накладная (ТОРГ-12) измененная");
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд, "ТОРГ-12 (модифицированная)", "ТОРГ12_Мод", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Используя один из этих подходов, вы сможете быстро, качественно и безопасно для будущих обновлений внести любые изменения в печатную форму ТОРГ-12 в системе 1С:ERP.