В современной разработке на платформе 1С:Предприятие 8.3 вывод штрихкодов стал стандартной задачей, однако механизмы её реализации значительно изменились с переходом на управляемые формы и использованием Библиотеки подключаемого оборудования (БПО). В этой статье мы подробно разберем, как правильно интегрировать генерацию штрихкодов в печатные формы, проанализируем структуру параметров и выясним, как избежать распространенных ошибок при работе с форматами EAN-13, ITF-14 и QR-кодами.
Для начала проанализируем современный стандарт работы. В актуальных конфигурациях, таких как УНФ, ERP или УТ 11, штрихкоды формируются с помощью кроссплатформенной внешней компоненты, входящей в состав БПО. Ранее разработчики использовали ActiveX, но это ограничивало работу только Windows-клиентами. Сейчас мы используем технологию Native API.
Рассмотрим основной механизм получения изображения. Вместо того чтобы вручную подключать компоненту через ПодключитьВнешнююКомпоненту, рекомендуется использовать встроенные функции типовых модулей. Это гарантирует стабильность и корректное управление памятью сервера.
Перед тем как вызвать функцию генерации, нам необходимо подготовить структуру параметров. В БПО для этого существует специальный конструктор. Разберем пример кода, который подготавливает данные для формирования изображения:
ПараметрыШтрихкода = ГенерацияШтрихкодаКлиентСервер.ПараметрыГенерацииШтрихкода();
ПараметрыШтрихкода.Ширина = ШиринаШтрихкода;
ПараметрыШтрихкода.Высота = ВысотаШтрихкода;
ПараметрыШтрихкода.ТипКода = 1; // Соответствует EAN-13
ПараметрыШтрихкода.ОтображатьТекст = Ложь;
ПараметрыШтрихкода.Штрихкод = "127372020090"; // Передаем 12 знаков для EAN-13
ПараметрыШтрихкода.ПрозрачныйФон = Ложь;
ПараметрыШтрихкода.Масштабировать = Истина;
Рассмотрим подробнее ключевые свойства этой структуры:
EAN13, 16 — QR Code, 17 — DataMatrix.Истина, компонента постарается вписать код в заданные размеры Ширина и Высота.После подготовки параметров мы обращаемся к серверному модулю для формирования двоичных данных картинки. Выясним, как выглядит этот вызов в коде:
РезультатОперации = ГенерацияШтрихкодаВызовСервера.ИзображениеШтрихкода(ПараметрыШтрихкода);
Если РезультатОперации.Результат Тогда
КартинкаШК = РезультатОперации.Картинка;
Иначе
// Обработка ошибки, если штрихкод не сформировался
КартинкаШК = Неопределено;
КонецЕсли;
Обратите внимание, что функция ИзображениеШтрихкода возвращает структуру, содержащую не только саму картинку, но и флаг успеха. Это позволяет избежать аварийного завершения печати, если данные штрихкода оказались некорректными.
Теперь разберем, как поместить полученную картинку в макет печатной формы. В макете необходимо заранее создать объект типа Рисунок. Для этого выберите в меню 1С: "Таблица -> Рисунки -> Вставить рисунок". Присвойте ему понятное имя, например, ШтрихКод.
Проанализируем программный код вывода области:
Макет = ПолучитьМакет("МойМакет");
ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
// Находим рисунок в области макета по имени
РисунокШК = ОбластьМакета.Рисунки.ШтрихКод;
// Получаем картинку с учетом физических размеров рисунка в макете
РисунокШК.Картинка = ПолучитьШтрихкод(РисунокШК.Ширина, РисунокШК.Высота, СтрокаКода);
ТабличныйДокумент.Вывести(ОбластьМакета);
Важный нюанс: при передаче ширины и высоты в функцию генерации штрихкода, компонента ожидает размеры в пикселях. Чтобы штрихкод не был размытым, опытные разработчики иногда используют специальные коэффициенты пересчета из единиц 1С в пиксели, используя эталонные картинки с известным размером.
Рассмотрим ситуацию, когда вместо штрихкода выводится пустая картинка или сообщение "Invalid barcode". Чаще всего это связано с неправильной длиной передаваемой строки.
Проблема контрольного символа в EAN-13 и ITF-14
Для формата EAN-13 компонента БПО часто ожидает на вход 12 знаков. Тринадцатый знак (контрольная сумма) вычисляется компонентой автоматически. Если вы передадите 13 знаков, и последний из них не совпадет с расчетным, компонента выдаст ошибку. Аналогично для ITF-14: передавайте 13 знаков, а 14-й символ компонента добавит сама.
Проблема отображения текста под кодом
Многие программисты сталкиваются с тем, что при установке ОтображатьТекст = Истина цифры выглядят либо слишком мелкими, либо "пиксельными". Также может возникать ошибка при попытке программно изменить РазмерШрифта. Это связано с ограничениями внешней компоненты на работу с системными шрифтами. Рекомендуемое решение: отключить отображение текста в параметрах компоненты, а в самом макете под рисунком штрихкода создать обычную текстовую ячейку и выводить значение туда стандартными средствами платформы.
Посмотрим на ситуацию со стороны системного администрирования. Поскольку современная компонента БПО использует Native API, она способна работать на серверах Linux. Однако для успешной генерации изображения в памяти сервера должны быть установлены графические библиотеки. Если ваш код идеально работает на Windows, но выдает ошибки на Linux-сервере, проверьте наличие пакетов libgsf и ImageMagick (или их аналогов в зависимости от дистрибутива). Без них компонента не сможет создать объект картинки.
При массовой печати (например, печать 1000 ценников за один раз) инициализация компоненты на каждом шаге может замедлить процесс. В типовых решениях для этого используется модуль ГенерацияШтрихкодаСерверПовтИсп. Система кэширует подключение к внешней компоненте, что значительно ускоряет формирование печатных форм в цикле. Мы рекомендуем всегда использовать именно такой подход, обращаясь к стандартным методам БПО, а не изобретать собственные велосипеды по подключению внешних файлов .dll или .so.
Таким образом, мы выяснили, что ключ к успешному выводу штрихкода — это правильное сочетание параметров структуры ПараметрыШтрихкода, учет особенностей подсчета контрольных сумм в конкретных форматах и использование стандартных механизмов БПО для обеспечения кроссплатформенности и быстродействия.