При работе в конфигурации 1С:Розница (особенно в версиях для магазинов одежды и обуви) пользователи часто сталкиваются с ограничением стандартного редактора шаблонов этикеток. Основная проблема заключается в том, что дополнительные реквизиты характеристик, такие как Размер и Цвет, хранятся в системе не как прямые поля справочника, а как записи в подчиненной табличной части. В результате при создании шаблона этикетки стандартными средствами эти данные либо выводятся одной строкой (через полное наименование), либо вовсе недоступны для раздельного размещения в макете. Разберем детально, как решить эту задачу с помощью программного вмешательства и расширения системы.
Для начала проанализируем, почему стандартные поля в компоновке данных часто оказываются пустыми или не подходят для решения задачи. В системе 1С:Розница данные для печати этикеток и ценников собираются программно в модуле менеджера обработки ПечатьЦенниковИЭтикеток. Этот процесс базируется на системе компоновки данных (СКД), но сам запрос генерируется динамически и состоит из множества временных таблиц (в некоторых версиях их число достигает 17 и более).
Рассмотрим структуру хранения характеристик. У справочника Номенклатура есть подчиненный справочник ХарактеристикиНоменклатуры. Внутри этого справочника имеется табличная часть ДополнительныеРеквизиты, которая содержит:
Когда мы пытаемся добавить эти поля в шаблон этикетки через пользовательский интерфейс, механизм печати обращается к итоговому набору данных. Если в итоговом запросе эти поля не «проброшены» из временных таблиц или не развернуты из строк табличной части в отдельные колонки, принтер этикеток получит пустые значения.
Наиболее корректный способ решения проблемы — создание расширения, которое модифицирует текст запроса в модуле менеджера обработки ПечатьЦенниковИЭтикеток. Нам необходимо перехватить процедуру подготовки данных и дополнить ее логикой выбора конкретных дополнительных реквизитов.
Рассмотрим подробнее шаги реализации:
ПечатьЦенниковИЭтикеток.ПодготовитьДанныеДляПечати или специализированная функция сборки текста запроса).В этой процедуре нам нужно найти место, где формируется временная таблица с данными характеристик, и выполнить к ней ЛЕВОЕ СОЕДИНЕНИЕ с таблицей дополнительных реквизитов. Главная хитрость заключается в том, чтобы превратить строки табличной части в отдельные колонки (выполнить операцию Pivot).
Выясним, как должен выглядеть фрагмент кода для извлечения, например, размера и цвета. Нам нужно обратиться к таблице ХарактеристикиНоменклатуры.ДополнительныеРеквизиты, отфильтровать ее по нужному свойству и присоединить к основному запросу по ссылке на характеристику.
// В модуле менеджера расширения перехватываем формирование запроса
&Вместо("ТекстЗапросаДляПечати")
Функция Расш1_ТекстЗапросаДляПечати()
ТекстЗапроса = ПродолжитьВызов();
// Добавляем левые соединения для получения конкретных свойств
НовыйТекст =
"ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры.ДополнительныеРеквизиты КАК ТаблицаЦвет
ПО ТаблицаЦвет.Ссылка = ИсходныеДанные.Характеристика
И ТаблицаЦвет.Свойство = &СвойствоЦвет
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры.ДополнительныеРеквизиты КАК ТаблицаРазмер
ПО ТаблицаРазмер.Ссылка = ИсходныеДанные.Характеристика
И ТаблицаРазмер.Свойство = &СвойствоРазмер";
// Вставляем соединения в нужное место основного текста запроса
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ГДЕ", НовыйТекст + Символы.ПС + "ГДЕ");
Возврат ТекстЗапроса;
КонецФункции
Обратите внимание: ИсходныеДанные — это имя временной таблицы в стандартном механизме 1С, из которой выбираются основные реквизиты номенклатуры и характеристик. После добавления соединений необходимо также добавить выбранные поля в раздел ВЫБРАТЬ основного запроса, чтобы они стали доступны в макете под именами ЗначениеЦвет и ЗначениеРазмер.
Если при попытке открыть расширение в конфигураторе вы видите пустое дерево объектов, это означает, что объекты метаданных не были в него добавлены (заимствованы). Чтобы исправить это:
ПечатьЦенниковИЭтикеток.ХарактеристикиНоменклатуры, если планируете использовать его типы в коде расширения.После этого в модуле менеджера заимствованной обработки можно будет использовать аннотацию &Вместо или &После для изменения логики заполнения данных. Проанализируем ситуацию: использование &Вместо позволяет полностью переписать запрос, однако это может привести к проблемам при обновлении конфигурации. Рекомендуется максимально использовать строковые замены (СтрЗаменить) в тексте запроса, чтобы сохранить совместимость с будущими версиями программы.
Разберем, почему данные могут выводиться на обычный принтер, но не печататься на принтере этикеток (Zebra, TSC и др.). При использовании специализированного оборудования 1С передает данные через систему компоновки в драйвер принтера. Если поле в СКД добавлено, но в итоговом наборе данных (после всех 17 временных таблиц) оно оказалось неопределенным или не попало в финальную выборку ВыбранныеПоля, драйвер просто проигнорирует его.
Важный момент: при добавлении новых полей в запрос через расширение, не забудьте программно добавить эти поля в описание доступных полей компоновки данных. Это делается в коде инициализации схемы компоновки, чтобы пользователь мог увидеть их в списке доступных полей при редактировании макета этикетки в режиме «1С:Предприятие».
Подводя итог, можно сказать, что разделение характеристик на этикетке — задача сугубо техническая. Основные шаги к успеху:
После внесения правок в макете этикетки появятся отдельные поля для Цвета и Размера. Вы сможете разместить их в разных частях этикетки, назначить им разные шрифты или даже использовать в составе штрихкода, что значительно повысит информативность ценников в вашем магазине.