В современных конфигурациях 1С, таких как Управление нашей фирмой (УНФ), работа со штрихкодами переведена на использование Native-компоненты. Это кроссплатформенное решение, которое позволяет генерировать изображения штрихкодов без установки сторонних шрифтов или устаревших ActiveX-элементов. В данной статье мы разберем, как программно преобразовать строку в изображение штрихкода и вывести его в табличный документ.
Прежде чем писать собственный велосипед, проанализируем структуру типового решения. В УНФ, как и в других конфигурациях на базе БСП (Библиотеки стандартных подсистем), за генерацию изображений отвечают специализированные модули. Рассмотрим основные из них, упомянутые опытными разработчиками:
ИзображениеШтрихкода.ВывестиШтрихкодВТабличныйДокумент позволяет автоматизировать процесс вставки картинки в макет.Проанализируем ситуацию: нам нужно взять произвольную строку (например, артикул или серийный номер), превратить её в картинку определенного формата (EAN13, Code128 или QR) и поместить в заранее подготовленную область макета. Процесс состоит из нескольких этапов.
Для начала откроем макет нашей печатной формы. Нам необходимо создать область, где будет располагаться код. В этой области выберем в меню «Таблица — Рисунки — Вставить рисунок» и выберем тип «Объект». Однако на практике чаще используют пустой прямоугольник (рисунок), которому задают имя, например, РисунокШтрихкод. В коде мы будем обращаться к этому объекту через коллекцию Рисунки.
Выясним причину, почему прямой вывод строки не работает: компоненте нужно точно знать формат штрихкода, размеры и дополнительные параметры. Рассмотрим пример формирования структуры параметров для генерации.
Обычно параметры включают в себя:
Рассмотрим подробнее программный код, который можно разместить в модуле менеджера документа или в обработке печати. Мы воспользуемся штатным методом, чтобы получить двоичные данные картинки.
// Подготовим параметры штрихкода
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина", 300);
ПараметрыШтрихкода.Вставить("Высота", 150);
ПараметрыШтрихкода.Вставить("ТипКода", 4); // Code128
ПараметрыШтрихкода.Вставить("Текст", "MY-STRING-12345");
ПараметрыШтрихкода.Вставить("ОтображатьТекст", Истина);
ПараметрыШтрихкода.Вставить("УголПоворота", 0);
// Генерируем изображение с помощью штатного модуля
// В УНФ функция возвращает ДвоичныеДанные (PNG)
КартинкаШтрихкода = ГенерацияШтрихкодаКлиентСервер.ИзображениеШтрихкода(ПараметрыШтрихкода);
Если КартинкаШтрихкода = Неопределено Тогда
Сообщить("Не удалось сформировать штрихкод");
Возврат;
КонецЕсли;
Теперь разберем по шагам, как вставить полученную картинку в макет. Предположим, у нас уже получена ОбластьМакета, в которой есть рисунок с именем РисунокШтрихкод.
// Создаем объект Картинка из двоичных данных
НоваяКартинка = Новый Картинка(КартинкаШтрихкода);
// Ищем рисунок в области макета и подменяем его содержимое
Попытка
ОбластьМакета.Рисунки.РисунокШтрихкод.Картинка = НоваяКартинка;
Исключение
// Если рисунок не найден или произошла ошибка
ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
ЗаписьЖурналаРегистрации("ПечатьШтрихкода", УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки);
КонецПопытки;
// Выводим область в результирующий табличный документ
ТабличныйДокумент.Вывести(ОбластьМакета);
Если ваша задача — вывести 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. Если требуется готовое решение для вывода штрихкодов в документы без изменения конфигурации, можно использовать расширение для печати штрихкода номенклатуры в заказе покупателя.