Как программно вывести штрихкод на печатную форму из произвольной строки в 1С:УНФ?

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

В современных конфигурациях 1С, таких как Управление нашей фирмой (УНФ), работа со штрихкодами переведена на использование Native-компоненты. Это кроссплатформенное решение, которое позволяет генерировать изображения штрихкодов без установки сторонних шрифтов или устаревших ActiveX-элементов. В данной статье мы разберем, как программно преобразовать строку в изображение штрихкода и вывести его в табличный документ.

Где искать штатные механизмы в конфигурации

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

  1. ГенерацияШтрихкодаКлиентСервер — здесь сосредоточена логика формирования параметров. Нас особенно интересует функция ИзображениеШтрихкода.
  2. ШтрихкодированиеПечатныхФорм — содержит высокоуровневые процедуры для работы с табличными документами. Процедура ВывестиШтрихкодВТабличныйДокумент позволяет автоматизировать процесс вставки картинки в макет.
  3. МенеджерОборудованияВызовСервера — используется для подключения самой компоненты печати штрихкодов, которая хранится в общих макетах системы.

Алгоритм вывода штрихкода через Native-компоненту

Проанализируем ситуацию: нам нужно взять произвольную строку (например, артикул или серийный номер), превратить её в картинку определенного формата (EAN13, Code128 или QR) и поместить в заранее подготовленную область макета. Процесс состоит из нескольких этапов.

Шаг 1: Подготовка макета печатной формы

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

Шаг 2: Подключение компоненты и формирование параметров

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

Обычно параметры включают в себя:

Шаг 3: Программная реализация генерации

Рассмотрим подробнее программный код, который можно разместить в модуле менеджера документа или в обработке печати. Мы воспользуемся штатным методом, чтобы получить двоичные данные картинки.


// Подготовим параметры штрихкода
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина",          300);
ПараметрыШтрихкода.Вставить("Высота",          150);
ПараметрыШтрихкода.Вставить("ТипКода",         4); // Code128
ПараметрыШтрихкода.Вставить("Текст",           "MY-STRING-12345");
ПараметрыШтрихкода.Вставить("ОтображатьТекст", Истина);
ПараметрыШтрихкода.Вставить("УголПоворота",    0);

// Генерируем изображение с помощью штатного модуля
// В УНФ функция возвращает ДвоичныеДанные (PNG)
КартинкаШтрихкода = ГенерацияШтрихкодаКлиентСервер.ИзображениеШтрихкода(ПараметрыШтрихкода);

Если КартинкаШтрихкода = Неопределено Тогда
    Сообщить("Не удалось сформировать штрихкод");
Возврат;
КонецЕсли;

Шаг 4: Вывод в табличный документ

Теперь разберем по шагам, как вставить полученную картинку в макет. Предположим, у нас уже получена ОбластьМакета, в которой есть рисунок с именем РисунокШтрихкод.


// Создаем объект Картинка из двоичных данных
НоваяКартинка = Новый Картинка(КартинкаШтрихкода);

// Ищем рисунок в области макета и подменяем его содержимое
Попытка
    ОбластьМакета.Рисунки.РисунокШтрихкод.Картинка = НоваяКартинка;
Исключение
    // Если рисунок не найден или произошла ошибка
    ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
    ЗаписьЖурналаРегистрации("ПечатьШтрихкода", УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки);
КонецПопытки;

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

Тонкости работы с форматами QR и DataMatrix

Если ваша задача — вывести QR-код или код маркировки Честный Знак (DataMatrix), проанализируем дополнительные настройки. Для DataMatrix крайне важно передавать корректные управляющие символы. В Native-компоненте 1С для этого используется тип кода GS1_DataMatrix.

Посмотрим на пример настройки для QR-кода:


ПараметрыQR = Новый Структура;
ПараметрыQR.Вставить("ТипКода", 16); // QR-код
ПараметрыQR.Вставить("Текст", "https://mysite.ru");
ПараметрыQR.Вставить("УровеньКоррекцииОшибок", 2); // 0-3, где 2 - высокий уровень
ПараметрыQR.Вставить("Масштаб", 5);

Уровень коррекции ошибок позволяет коду оставаться читаемым даже при частичном повреждении или загрязнении печатной формы, что критично для складской логистики.

Рекомендации по качеству печати

При использовании Native-технологии важно учитывать разрешение печати (DPI). Если штрихкод выглядит "размытым", попробуйте увеличить параметры Ширина и Высота в структуре параметров. Оптимальным считается разрешение 300 DPI. Также убедитесь, что в свойствах рисунка в макете установлено свойство «Размер» в значение «Автомасштабирование» или «Пропорционально», чтобы избежать искажения геометрии штрихов, иначе сканеры не смогут распознать код.

Таким образом, использование общего модуля ГенерацияШтрихкодаКлиентСервер является наиболее правильным и надежным способом решения задачи в УНФ. Это гарантирует стабильную работу как на Windows-клиентах, так и на серверах под управлением Linux. Если требуется готовое решение для вывода штрихкодов в документы без изменения конфигурации, можно использовать расширение для печати штрихкода номенклатуры в заказе покупателя.

← На главную