Как вывести изображение номенклатуры в этикетку или ценник?

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

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

Выясним причину: почему картинка не отображается в списке полей

Проанализируем типичную ситуацию: у нас есть справочник Номенклатура, и в нем присутствует реквизит, ссылающийся на хранилище с картинкой. Если база пуста, может потребоваться Загрузка изображений в номенклатуру из внешних каталогов, чтобы наполнить справочник КартинкиДляНоменклатуры с типом ХранилищеЗначений. При попытке редактировать шаблон этикетки в режиме 1С:Предприятие мы обнаруживаем, что наше поле с картинкой отсутствует в списке доступных для выбора.

Это происходит потому, что типовой редактор этикеток ожидает увидеть данные в формате, который он может интерпретировать как графический объект. Прямая ссылка на ХранилищеЗначений или на элемент справочника не дает системе понимания, что внутри находятся двоичные данные изображения. Для решения этой проблемы нам потребуется либо вмешательство в программный код, либо корректировка схемы компоновки данных (СКД).

Способ 1. Программное заполнение области картинки

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

Сначала на макете этикетки необходимо разместить объект типа «Рисунок» и присвоить ему имя, например, ФотоТовара. Далее в коде формирования этикетки мы обращаемся к этому объекту:


// Получаем область макета
ОбластьМакета = Макет.ПолучитьОбласть("Строка");

// Извлекаем двоичные данные из хранилища
ДанныеКартинки = СсылкаНаНоменклатуру.ОсновноеИзображение.Хранилище.Получить();

Если ТипЗнч(ДанныеКартинки) = Тип("ДвоичныеДанные") Тогда
    // Создаем объект Картинка и помещаем его в именованный рисунок на макете
    ОбластьМакета.Рисунки.ФотоТовара.Картинка = Новый Картинка(ДанныеКартинки);
КонецЕсли;

// Выводим область в итоговый табличный документ
ТабличныйДокумент.Вывести(ОбластьМакета);

Данный подход эффективен, но требует понимания того, где именно в типовой конфигурации происходит цикл обхода этикеток. В типовых решениях (УТ 11, ERP, КА) печать этикеток реализована через обработку ПечатьЭтикетокИЦенников. Чтобы не менять типовой код, часто используют внешние обработки и расширения, такие как Печать этикеток и ценников с выбором из документов (ERP 2, КА 2, УТ 11), которые позволяют интегрировать этот процесс без снятия с поддержки.

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

Способ 2. Использование СКД и расширений конфигурации

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

Пошаговый алгоритм настройки через СКД:

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

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

Способ 3. Интеграция с Библиотекой стандартных подсистем (БСП)

Выясним, как упростить задачу, если в вашей конфигурации внедрена БСП. Вместо создания собственного справочника КартинкиДляНоменклатуры, мы рекомендуем использовать штатный механизм присоединенных файлов.

В современных версиях «1С:Управление торговлей» или «1С:Розница» уже реализован механизм вывода основного изображения. Если вы привяжете свои картинки к номенклатуре через стандартную кнопку «Файлы», то в редакторе этикеток поле «Изображение» должно появиться автоматически в списке доступных полей. Это происходит благодаря тому, что типовая СКД уже настроена на связь справочника Номенклатура с его присоединенными файлами.

Важные нюансы производительности и качества печати

Разберем ситуации, которые могут возникнуть при массовой печати ценников с картинками. Если вы печатаете 500-1000 этикеток за один раз, база данных и оперативная память компьютера могут испытывать серьезную нагрузку.

Проанализируем рекомендации по оптимизации:

Работа с внешними компонентами

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

Подводя итог, мы видим, что решение задачи вывода картинки зависит от архитектуры вашей базы. Для разовой задачи подойдет программная подмена рисунка в макете через ОбластьМакета.Рисунки, а для тиражируемого решения лучше использовать расширение и модификацию типовой СКД печати ценников.

← На главную