Как добавить логотип или произвольную картинку в макет этикетки в 1С?

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

При доработке стандартной обработки печати этикеток и ценников в конфигурации «1С:Управление торговлей 10.3» часто возникает необходимость добавить логотип компании или графический знак. На первый взгляд задача кажется простой — достаточно вставить объект в макет. Однако при формировании печатной формы изображение нередко пропадает, сжимается или смещается. Разберем по шагам причины такого поведения платформы и рассмотрим правильные способы размещения графических объектов на этикетке.

Почему объект пропадает из печатной формы этикетки?

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


Макет = ПолучитьОбщийМакет("Этикетка");
ЭтикеткаОбласть = Макет.ПолучитьОбласть(1, 1, 4, 2);

В этом коде кроются две основные причины, из-за которых добавленный графический объект не выводится на печать:

  1. Выход за границы области: метод ПолучитьОбласть(1, 1, 4, 2) извлекает строго прямоугольник с 1-й по 4-ю строку и с 1-й по 2-ю колонку. Если графический объект расположен на макете свободно и хотя бы на один пиксель выступает за пределы указанных координат (например, задевает 5-ю строку или 3-ю колонку), платформа полностью исключает его из результирующего табличного документа.
  2. Динамический пересчет высоты строк: в типовой обработке высота строк пересчитывается программно под физический размер этикетки (например, ОбластьНоменклатура.ВысотаСтроки = ВысотаЭтикетки * 2.65 * 0.13). Если объект не привязан к конкретной ячейке, изменение высоты строк смещает или деформирует его.

Способ 1. Размещение статичного логотипа напрямую в макете

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

  1. Открываем общий макет или макет обработки печати этикеток в конфигураторе.
  2. Выбираем ячейку внутри диапазона, который гарантированно попадает в печать (например, строку с наименованием номенклатуры или отдельную объединенную ячейку в пределах строк 1–4 и колонок 1–2).
  3. Через главное меню добавляем графический объект в нужную ячейку.
  4. В свойствах объекта проверяем привязку к ячейкам и следим, чтобы его границы строго находились внутри области 1, 1, 4, 2.

При таком подходе объект автоматически попадает в результирующую область ЭтикеткаОбласть и выводится на печать без дополнительных правок в коде.

Способ 2. Программное добавление и позиционирование картинки

Если требуется динамически подставлять изображение (например, логотип конкретного бренда, знак соответствия или изображение из базы данных), воспользуемся программным управлением коллекцией Рисунки табличного документа.

Рассмотрим, как инициализировать объект, загрузить данные и спозиционировать его в именованной области макета:


// Получаем область этикетки
ЭтикеткаОбласть = Макет.ПолучитьОбласть(1, 1, 4, 2);

// Получаем именованную область ячеек, куда нужно поместить логотип
ОбластьДляКартинки = ЭтикеткаОбласть.Области.ОбластьЛоготип;

// Инициализируем картинку из нужного источника
КартинкаЛоготип = Новый Картинка("C:\Images\logo.png");

// Добавляем новый рисунок в область макета
РисунокЛого = ЭтикеткаОбласть.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
РисунокЛого.Картинка = КартинкаЛоготип;

// Привязываем рисунок к границам выбранной области
РисунокЛого.Расположить(ОбластьДляКартинки);

// Настраиваем режим отображения и отключаем рамку
РисунокЛого.РазмерКартинки = ИзменениеРазмераРисункаТабличногоДокумента.Пропорционально;
РисунокЛого.Линия = Новый Линия(ТипЛинииТабличногоДокумента.НетЛинии);

Источники получения картинок в коде 1С

В зависимости от архитектуры решения картинка может загружаться из разных источников. Рассмотрим основные варианты:

  1. Из библиотеки картинок конфигурации: если изображение внедрено в дерево метаданных (раздел «Общие» > «Картинки»), обращение к нему выполняется напрямую через менеджер: КартинкаЛоготип = БиблиотекаКартинок.ЛоготипКомпании;
  2. Из внешнего файла на диске: КартинкаЛоготип = Новый Картинка("C:\1C\logo.bmp");
  3. Из информационной базы (реквизит типа «ХранилищеЗначения»):
    
    ДвоичныеДанные = СтрокаИзСписка.Номенклатура.ОсновноеИзображение.Хранилище.Получить();
    Если ДвоичныеДанные <> Неопределено Тогда
        КартинкаЛоготип = Новый Картинка(ДвоичныеДанные);
    КонецЕсли;
    

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

При выводе графики на специализированные принтеры этикеток важно учитывать аппаратные ограничения оборудования:

  1. Монохромная печать: большинство термопринтеров поддерживают только однобитную печать. Цветные логотипы могут смазываться и покрываться точечной сеткой (дизерингом). Рекомендуется заранее переводить изображения в контрастный черно-белый формат без градаций серого с разрешением 203 или 300 dpi.
  2. Поля документа: для исключения смещения графики обязательно устанавливаем нулевые поля страницы перед выводом табличного документа:
    
    Таб.ПолеСверху = 0;
    Таб.ПолеСнизу  = 0;
    Таб.ПолеСлева  = 0;
    Таб.ПолеСправа = 0;
    
  3. Оптимизация памяти: при массовой печати тысяч этикеток создание нового объекта Картинка на каждой итерации цикла приводит к перерасходу оперативной памяти. Создавайте статичную картинку один раз перед началом цикла по товарам.
← На главную