Как вывести дополнительные характеристики (цвет, размер) в разные поля этикетки в 1С:Розница

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

При работе в конфигурации 1С:Розница (особенно в версиях для магазинов одежды и обуви) пользователи часто сталкиваются с ограничением стандартного редактора шаблонов этикеток. Основная проблема заключается в том, что дополнительные реквизиты характеристик, такие как Размер и Цвет, хранятся в системе не как прямые поля справочника, а как записи в подчиненной табличной части. В результате при создании шаблона этикетки стандартными средствами эти данные либо выводятся одной строкой (через полное наименование), либо вовсе недоступны для раздельного размещения в макете. Разберем детально, как решить эту задачу с помощью программного вмешательства и расширения системы.

Анализ проблемы и структуры хранения данных

Для начала проанализируем, почему стандартные поля в компоновке данных часто оказываются пустыми или не подходят для решения задачи. В системе 1С:Розница данные для печати этикеток и ценников собираются программно в модуле менеджера обработки ПечатьЦенниковИЭтикеток. Этот процесс базируется на системе компоновки данных (СКД), но сам запрос генерируется динамически и состоит из множества временных таблиц (в некоторых версиях их число достигает 17 и более).

Рассмотрим структуру хранения характеристик. У справочника Номенклатура есть подчиненный справочник ХарактеристикиНоменклатуры. Внутри этого справочника имеется табличная часть ДополнительныеРеквизиты, которая содержит:

  1. Свойство: ссылка на План видов характеристик (например, «Цвет»).
  2. Значение: конкретное значение этого свойства (например, «Красный»).

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

Программное решение через расширение конфигурации

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

Рассмотрим подробнее шаги реализации:

  1. Создаем новое расширение и добавляем в него обработку ПечатьЦенниковИЭтикеток.
  2. Заимствуем в расширение Модуль менеджера данной обработки.
  3. Находим процедуру, отвечающую за формирование текста запроса (обычно это ПодготовитьДанныеДляПечати или специализированная функция сборки текста запроса).

В этой процедуре нам нужно найти место, где формируется временная таблица с данными характеристик, и выполнить к ней ЛЕВОЕ СОЕДИНЕНИЕ с таблицей дополнительных реквизитов. Главная хитрость заключается в том, чтобы превратить строки табличной части в отдельные колонки (выполнить операцию Pivot).

Пример модификации запроса

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


// В модуле менеджера расширения перехватываем формирование запроса
&Вместо("ТекстЗапросаДляПечати")
Функция Расш1_ТекстЗапросаДляПечати()
    ТекстЗапроса = ПродолжитьВызов();
    
    // Добавляем левые соединения для получения конкретных свойств
    НовыйТекст = 
    "ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры.ДополнительныеРеквизиты КАК ТаблицаЦвет
    ПО ТаблицаЦвет.Ссылка = ИсходныеДанные.Характеристика
    И ТаблицаЦвет.Свойство = &СвойствоЦвет
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры.ДополнительныеРеквизиты КАК ТаблицаРазмер
    ПО ТаблицаРазмер.Ссылка = ИсходныеДанные.Характеристика
    И ТаблицаРазмер.Свойство = &СвойствоРазмер";
    
    // Вставляем соединения в нужное место основного текста запроса
    ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ГДЕ", НовыйТекст + Символы.ПС + "ГДЕ");
    
    Возврат ТекстЗапроса;
КонецФункции

Обратите внимание: ИсходныеДанные — это имя временной таблицы в стандартном механизме 1С, из которой выбираются основные реквизиты номенклатуры и характеристик. После добавления соединений необходимо также добавить выбранные поля в раздел ВЫБРАТЬ основного запроса, чтобы они стали доступны в макете под именами ЗначениеЦвет и ЗначениеРазмер.

Решение проблемы с «пустым расширением»

Если при попытке открыть расширение в конфигураторе вы видите пустое дерево объектов, это означает, что объекты метаданных не были в него добавлены (заимствованы). Чтобы исправить это:

  1. Откройте основную конфигурацию.
  2. Найдите обработку ПечатьЦенниковИЭтикеток.
  3. Нажмите правую кнопку мыши и выберите «Добавить в расширение».
  4. Повторите процедуру для справочника ХарактеристикиНоменклатуры, если планируете использовать его типы в коде расширения.

После этого в модуле менеджера заимствованной обработки можно будет использовать аннотацию &Вместо или &После для изменения логики заполнения данных. Проанализируем ситуацию: использование &Вместо позволяет полностью переписать запрос, однако это может привести к проблемам при обновлении конфигурации. Рекомендуется максимально использовать строковые замены (СтрЗаменить) в тексте запроса, чтобы сохранить совместимость с будущими версиями программы.

Особенности работы с принтерами этикеток

Разберем, почему данные могут выводиться на обычный принтер, но не печататься на принтере этикеток (Zebra, TSC и др.). При использовании специализированного оборудования 1С передает данные через систему компоновки в драйвер принтера. Если поле в СКД добавлено, но в итоговом наборе данных (после всех 17 временных таблиц) оно оказалось неопределенным или не попало в финальную выборку ВыбранныеПоля, драйвер просто проигнорирует его.

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

Итоги и рекомендации

Подводя итог, можно сказать, что разделение характеристик на этикетке — задача сугубо техническая. Основные шаги к успеху:

После внесения правок в макете этикетки появятся отдельные поля для Цвета и Размера. Вы сможете разместить их в разных частях этикетки, назначить им разные шрифты или даже использовать в составе штрихкода, что значительно повысит информативность ценников в вашем магазине.

← На главную