Как изменить печатную форму и добавить в нее данные из новых колонок в 1С:Комплексная автоматизация 2?

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

В современных конфигурациях 1С, таких как «Комплексная автоматизация 2», «ERP» или «Управление торговлей 11», разработчики часто сталкиваются с ситуацией, когда привычные методы редактирования форм не работают. Открыв форму документа в конфигураторе, мы не видим привычных кнопок «Печать», а поиск макета внутри самого документа не приносит результатов. Это связано с использованием БСП (Библиотеки стандартных подсистем), где интерфейс и логика печати формируются программно. Разберем подробно, как найти нужные механизмы и внести изменения.

Выясняем причину: почему кнопки нет на форме

Проанализируем ситуацию: в БСП команды печати не привязываются к форме жестко. Они регистрируются динамически. Когда открывается форма документа РеализацияТоваровУслуг, система обращается к модулю менеджера этого документа, собирает список доступных команд и «рисует» кнопку печати на лету. Именно поэтому в конфигураторе на самой форме искать её бесполезно.

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

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

Шаг 1: Поиск и редактирование макета (визуальная часть)

Прежде чем менять код, разберемся, где лежит сам бланк. В «Комплексной автоматизации 2» макеты часто являются общими. Например, Счет-фактура используется во множестве документов, поэтому 1С хранит её в Общих макетах.

Рассмотрим два способа правки макета:

Способ А: Через пользовательский режим (без программирования)
Если вам нужно просто изменить шрифт, добавить логотип или статичный текст, перейдите в раздел НСИ и администрирование — Печатные формы, отчеты и обработки — Макеты печатных форм. Найдите в списке нужный макет (например, «Счет-фактура (Постановление №1137)»), нажмите «Изменить». Вы сможете отредактировать ячейки прямо в интерфейсе программы.

Способ Б: Через конфигуратор
Для серьезных правок (добавления новых параметров) найдите макет в ветке Общие -> Общие макеты. Ориентируйтесь на имена, начинающиеся с ПФ_MXL_.... После того как вы добавили в макет новый параметр (например, ДополнительныеДанные в фигурных скобках), его нужно заполнить программно.

Шаг 2: Изменение алгоритма заполнения данных

Предположим, как в нашем случае, нам нужно изменить вывод колонки «Наименование», добавив туда данные из новых реквизитов табличной части. Проанализируем, где происходит сбор данных.

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

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


// В соответствующем модуле, где формируется структура данных для печати
// Находим место формирования временной таблицы с товарами
ТекстЗапроса = 
"ВЫБРАТЬ
|	ТЧТовары.Номенклатура.Наименование КАК Наименование,
|	ТЧТовары.МояКолонка1 КАК МояКолонка1,
|	ТЧТовары.МояКолонка2 КАК МояКолонка2,
|	...
|ИЗ
|	Документ.РеализацияТоваровУслуг.Товары КАК ТЧТовары
|ГДЕ
|	ТЧТовары.Ссылка В(&МассивОбъектов)";

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


// Пример модификации строки в цикле формирования документа
Пока ВыборкаСтрок.Следующий() Цикл
    ОбластьМакета = Макет.ПолучитьОбласть("Строка");
    
    // Формируем комбинированное наименование
    ПолноеНаименование = ВыборкаСтрок.Наименование 
        + " (" + ВыборкаСтрок.МояКолонка1 + " " 
        + ВыборкаСтрок.МояКолонка2 + ")";
    
    // Заполняем параметры области
    ОбластьМакета.Параметры.Заполнить(ВыборкаСтрок);
    ОбластьМакета.Параметры.ТоварНаименование = ПолноеНаименование;
    
    ТабличныйДокумент.Вывести(ОбластьМакета);
КонецЦикла;

Шаг 3: Выбор метода реализации (Расширение или Внешняя форма)

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

1. Использование расширения (Рекомендуется):
Это наиболее современный путь. Мы создаем расширение, заимствуем в него документ и нужные модули. Используя аннотацию &Вместо для процедур печати, мы можем полностью переопределить логику формирования данных, не снимая основную конфигурацию с поддержки. Это позволит обновлять «Комплексную автоматизацию» в автоматическом режиме.

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

Важные особенности Счета-фактуры

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

Подведем итог: для решения задачи по изменению печатной формы в КА 2 необходимо:

  1. Определить, является ли макет общим или принадлежит объекту.
  2. Найти в модуле менеджера код, отвечающий за заполнение структуры данных (запрос).
  3. Добавить свои поля в запрос и в макет.
  4. Реализовать объединение строк в коде формирования области макета.
  5. Оформить решение в виде расширения или внешней печатной формы для сохранения обновляемости системы.
← На главную