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