Как добавить свой параметр (штрихкод номенклатуры) в табличную часть печатной формы ТОРГ-12 в 1С:УТ 11?

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

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

Анализ типичной ошибки: почему параметр не заполняется

Проанализируем стандартную структуру формирования печатной формы. Процесс разделен на несколько независимых этапов:

  1. Формирование запроса к базе данных и выборка данных по шапке и табличным частям документа.
  2. Заполнение параметров области Шапка.
  3. Построчный обход выборки товаров и заполнение области Строка (или СтрокаНабор / СтрокаКомплектующие).
  4. Заполнение параметров области Подвал и расчет итогов по страницам.

Типичная ошибка начинающих специалистов заключается в попытке передать значение строчного параметра (например, ШтрихКодТест) в процедуре ЗаполнитьРеквизитыШапкиТОРГ12 через структуру шапки:


СтруктураПараметров.Вставить("ШтрихКодТест", "12341234");
ОбластьМакета.Параметры.Заполнить(СтруктураПараметров);
ТабличныйДокумент.Вывести(ОбластьМакета);

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

Особенности хранения штрихкодов в УТ 11

В конфигурации «1С:Управление торговлей 11» штрихкод не является строковым реквизитом справочника СправочникСсылка.Номенклатура. Штрихкоды хранятся в специализированном регистре сведений РегистрСведений.ШтрихкодыНоменклатуры.

Регистр имеет следующие ключевые измерения:

  1. Номенклатура — ссылка на позицию номенклатуры.
  2. Характеристика — характеристика товара (если учет ведется в разрезе характеристик).
  3. Упаковка — упаковка или единица измерения.

Сам штрихкод содержится в строковом ресурсе Штрихкод. Так как у одной номенклатуры может быть зарегистрировано несколько штрихкодов для разных упаковок, получать его следует корректным соединением в запросе с учетом упаковки и характеристики, чтобы избежать задвоения строк в накладной.

Пошаговый алгоритм доработки печатной формы

Разберем последовательность действий для корректного вывода данных.

  1. Доработка макета печатной формы
    Откроем макет накладной (например, ПФ_MXL_ТОРГ12 в обработке ПечатьОбщихФорм или в модуле внешней печатной формы). В строках заголовка таблицы, области строк (Строка) и подвала добавим новую колонку. Для ячейки в области Строка установим свойство Заполнение в значение Параметр и укажем имя параметра, например, Штрихкод.
  2. Доработка запроса получения данных
    Формирование данных для ТОРГ-12 выполняется в модуле менеджера документа (например, Документ.РеализацияТоваровУслуг.МодульМенеджера) в функции ПолучитьДанныеДляПечатнойФормыТОРГ12. Необходимо дополнить пакет запроса выборки товаров левым соединением с регистром штрихкодов:
    
    ВЫБРАТЬ
        ТаблицаТовары.Номенклатура КАК Номенклатура,
        ТаблицаТовары.Характеристика КАК Характеристика,
        ТаблицаТовары.Упаковка КАК Упаковка,
        ТаблицаТовары.Количество КАК Количество,
        ТаблицаТовары.Сумма КАК Сумма,
        МАКСИМУМ(ЕСТЬNULL(Штрихкоды.Штрихкод, "")) КАК Штрихкод
    ИЗ
        ДокументТовары КАК ТаблицаТовары
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК Штрихкоды
            ПО ТаблицаТовары.Номенклатура = Штрихкоды.Номенклатура
            И ТаблицаТовары.Характеристика = Штрихкоды.Характеристика
            И ТаблицаТовары.Упаковка = Штрихкоды.Упаковка
    СГРУППИРОВАТЬ ПО
        ТаблицаТовары.Номенклатура,
        ТаблицаТовары.Характеристика,
        ТаблицаТовары.Упаковка,
        ТаблицаТовары.Количество,
        ТаблицаТовары.Сумма
    
    Важно: никогда не выполняйте отдельные запросы к регистру штрихкодов внутри цикла вывода строк. Это вызовет существенное замедление печати накладных с большим количеством позиций. Все данные должны извлекаться пакетным запросом.
  3. Передача значения в область строки
    В процедуре ЗаполнитьТабличныйДокументТОРГ12 обход строк выполняется циклом по выборке СтрокаТовары, которая передается в процедуру ЗаполнитьРеквизитыСтрокиТовара. Если имя параметра в макете совпадает с именем поля в выборке запроса (Штрихкод), стандартный метод ОбластьМакета.Параметры.Заполнить(СтрокаТовары) заполнит его автоматически. При необходимости явного присвоения используем следующий код: ОбластьМакета.Параметры.Штрихкод = СтрокаТовары.Штрихкод;

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

Для сохранения типовой конфигурации на полной поддержке рекомендуется использовать один из двух подходов:

  1. Внешняя печатная форма (ВПФ): создается внешняя обработка, подключаемая через раздел «Печатные формы, отчеты и обработки». В модуль объекта помещается функция СведенияОВнешнейОбработке() в соответствии со стандартами БСП, а логика формирования макета переносится внутрь обработки.
  2. Расширение конфигурации: макет и процедуры печати переопределяются в расширении с помощью аннотаций &Вместо или &ИзменениеИКонтроль, что исключает сложности при последующих обновлениях типовой конфигурации.
← На главную