Как добавить свое поле в шаблон этикетки или ценника в 1С:ERP 2.5?

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

Механизм печати этикеток и ценников в современных редакциях 1С (ERP 2.5, КА 2.5, УТ 11.5) является достаточно сложным и многоуровневым — для вывода дополнительных реквизитов (серий, упаковок, количеств) на одном бланке есть расширение печати этикеток для 1С:УТ, КА и ERP. Он построен на использовании схем компоновки данных (СКД), динамическом формировании структур и кешировании параметров в хранилищах значений. Часто программисты сталкиваются с ситуацией, когда поле добавлено в запрос и макет, но при печати оно остается пустым. Разберем по шагам, как правильно внедрить свое поле в этот механизм, чтобы данные корректно выводились на печать.

Анализ структуры механизма печати

Прежде чем приступать к написанию кода, проанализируем, как система понимает, какие поля доступны для печати. Основным «поставщиком» описания доступных полей является обработка ПечатьЭтикетокИЦенников. В ней содержатся макеты СКД, которые система разбирает для построения списка доступных параметров в пользовательском конструкторе шаблонов.

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

  1. Макеты обработки — чтобы поле стало доступно в визуальном редакторе.
  2. Форма обработки — чтобы данные физически попадали в таблицу товаров на форме.
  3. Логика формирования данных — чтобы при формировании печатной формы система знала, откуда взять значение для вашего параметра.

Шаг 1: Модификация макетов СКД

Первым делом откроем обработку ПечатьЭтикетокИЦенников. Нас интересуют макеты с именами ПоляШаблонаТовары и ПоляШаблонаБДТовары. Именно эти схемы компоновки данных отвечают за то, какие поля увидит пользователь, когда нажмет кнопку «Редактировать макет» в справочнике шаблонов.

Рассмотрим подробнее действия в СКД:

Шаг 2: Добавление поля в табличную часть формы

После того как мы описали поле в макете, нам нужно подготовить место для хранения этого значения в интерфейсе обработки. На форме обработки ПечатьЭтикетокИЦенников найдем табличную часть Товары.

Добавим в эту табличную часть новую колонку с тем же именем, которое мы использовали в запросе СКД. Это критически важно: имя колонки в ТЧ должно строго совпадать с именем поля в схеме компоновки данных.

Шаг 3: Программное заполнение данных на форме

Теперь выясним причину, по которой данные могут не попадать в нашу новую колонку. Нам нужно найти процедуру, отвечающую за заполнение таблицы товаров. В модуле формы это обычно ЗаполнитьТаблицуТоваровНаСервере.

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

Пример модификации может выглядеть так:


// В процедуре ЗаполнитьТаблицуТоваровНаСервере
Для Каждого СтрокаТовар Из Объект.Товары Цикл
    // Ваша логика получения значения
    СтрокаТовар.МоеНовоеПоле = ПолучитьДополнительноеЗначение(СтрокаТовар.Номенклатура);
КонецЦикла;

Шаг 4: Регистрация поля в справочнике шаблонов

Многие разработчики забывают о том, что справочник ШаблоныЭтикетокИЦенников сам «разбирает» макет и кэширует список параметров — для задач расширения состава реквизитов есть обработка вывода штрихкода GTIN на этикетки в ERP, КА, УТ. За это отвечает процедура ПодготовитьСтруктуруМакетаШаблона в модуле менеджера справочника.

Разберем по шагам, что там происходит:

  1. Система читает двоичные данные макета (Табличный документ).
  2. Ищет в ячейках параметры, заключенные в квадратные скобки (например, [МоеНовоеПоле]).
  3. Сопоставляет эти имена со списком доступных полей, полученных из обработки печати.

Если вы используете расширение, убедитесь, что вы переопределили или дополнили логику в этом модуле, если система не видит ваш параметр автоматически. Однако, как правило, если поле корректно добавлено в СКД обработки ПечатьЭтикетокИЦенников, процедура подготовки структуры должна подхватить его без дополнительных правок.

Шаг 5: Обеспечение вывода на печать

Даже если в таблице на форме данные есть, при нажатии кнопки «Печать» формируется отдельная структура данных. Здесь в игру вступает процедура УстановитьОбязательныеПоляДанных в модуле формы обработки.

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


&НаСервере
Процедура УстановитьОбязательныеПоляДанных(СхемаКомпоновки)
    // Здесь система добавляет поля, которые ВСЕГДА должны быть в результате запроса
    // Добавим наше поле в список обязательных, если это необходимо
    НовоеПоле = СхемаКомпоновки.НаборыДанных.НаборДанных1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
    НовоеПоле.Поле = "МоеНовоеПоле";
    НовоеПоле.ПутьКДанным = "МоеНовоеПоле";
КонецПроцедуры

Также стоит обратить внимание на модуль ПечатьЭтикетокИЦенниковЛогика (или аналогичный серверный модуль). В нем происходит финальная «склейка» данных товаров, цен и штрихкодов. Убедитесь, что ваше поле не теряется в процессе объединения таблиц значений (метод ПолучитьДанныеДляПечати).

Типичные ошибки и важные нюансы

Создание нового шаблона: После внесения изменений в код и макеты СКД, старые шаблоны этикеток, созданные пользователями, могут «не знать» о существовании нового поля. Рекомендуется создать новый шаблон с нуля, чтобы система заново проинициализировала структуру параметров из обновленных макетов.

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

Тип заполнения в макете: В самом редакторе шаблона (в справочнике) убедитесь, что для ячейки с вашим полем в свойствах установлено «Заполнение: Параметр». Если там стоит «Текст», то 1С просто напечатает имя вашего поля как обычное слово.

Подводя итог: добавление своего поля — это цепочка действий от макета СКД в обработке до колонок в табличной части формы и контроля обязательных полей при печати. Если на каком-то этапе цепочка прервется (например, имя поля в ТЧ не совпадет с именем в СКД), данные на печать не выведутся.

← На главную