Как правильно реализовать печать штрихкодов EAN-128 (GS1-128) средствами 1С

Программист IT и автоматизация бизнеса
← На главную

Формирование штрихкодов формата GS1-128 (ранее известного как EAN-128) в среде 1С часто вызывает вопросы у разработчиков. Основная сложность заключается в том, что этот формат является не просто графическим представлением символов, а структурированным стандартом хранения данных. В данной статье мы подробно разберем, как использовать штатную компоненту 1CBarCode, почему визуальный вид кода может отличаться от онлайн-генераторов и как правильно передавать данные для кодирования.

Основы работы с компонентой 1CBarCode

Для начала рассмотрим стандартный алгоритм вывода штрихкода на печатную форму. Предположим, у нас есть макет с объектом типа "Штрихкод". Настройка печати обычно выполняется программно в модуле обработки или документа. Проанализируем базовый код для инициализации объекта:


ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МакетШтрихКод");
Область = Макет.ПолучитьОбласть("ОбластьШтрихкод");

// Установка параметров штрихкода
// ТипКода 2 соответствует стандарту EAN-128 в старых версиях компоненты
Область.Рисунки.Штрихкод.Объект.ТипКода = 2; 
Область.Рисунки.Штрихкод.Объект.Сообщение = стрШтрихКод; // Данные для шифровки
Область.Рисунки.Штрихкод.Объект.ТекстКода = стрШтрихКод; // Текст под штрихкодом

ТабДок.Вывести(Область);
ТабДок.Показать();

Важно помнить, что результат работы компоненты сильно зависит от версии библиотеки. В старых версиях (8.0.x) используется технология ActiveX, в то время как современные конфигурации на управляемых формах перешли на Native-компоненты, которые работают стабильнее и не требуют регистрации в реестре Windows. Для упрощения вывода и гибкой настройки штрихкодов в произвольных печатных формах можно использовать подсистему настройки отображения штрихкодов.

Загадка скобок и идентификаторов применения (AI)

Одной из главных проблем, с которой сталкиваются программисты, является использование скобок в строке сообщения. Разберем ситуацию: если мы передаем строку 01950123456789033103000123, компонента может не понять, где заканчивается один параметр и начинается другой. В стандарте GS1 используются так называемые Application Identifiers (AI) — цифровые префиксы, определяющие смысл последующих данных.

Рассмотрим, как компонента 1С интерпретирует входные данные:

  1. Скобки в свойстве Сообщение (например, (01)95012345678903(3103)000123) служат служебными маркерами для самой библиотеки.
  2. Встречая скобки, компонента понимает, что внутри указан идентификатор применения.
  3. Критически важно: при формировании самого графического изображения (зебр) компонента убирает скобки, но вставляет специальный непечатный символ FNC1.
  4. Символ FNC1 в начале кода сообщает сканеру, что это именно GS1-128, а не обычный Code 128.

Если вы видите, что сканер при считывании выдает скобки — это ошибка. Это означает, что вы либо выбрали неверный тип кода (например, просто Code 128 вместо EAN-128), либо компонента просто закодировала скобки как часть текста. В правильно сформированном штрихкоде скобок внутри "зебры" быть не должно, они присутствуют только в текстовой подписи под кодом для удобства человека.

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

Часто возникает вопрос: почему штрихкод из 1С визуально шире или "длиннее", чем штрихкод, сгенерированный сторонним сервисом? Выясним причину этого явления. Стандарт Code 128 (на котором базируется EAN-128) имеет три набора знаков: Subset A, Subset B и Subset C.

Проанализируем их различия:

Компонента 1CBarCode (особенно старых версий) не всегда оптимально выбирает стратегию сжатия. Она может кодировать цифры через набор B, что увеличивает физическую длину кода. Однако, как показывает практика тестирования, даже если коды выглядят по-разному, сканер считывает их идентично, так как оба варианта соответствуют спецификации стандарта. Чтобы обойти ограничения штатной компоненты, можно использовать программу печати этикеток с альтернативным генератором штрихкодов.

Обработка полей переменной длины

Разберем еще один сложный момент — поля переменной длины. Например, идентификатор (10) (номер партии) может содержать до 20 символов. Если после него идет другой идентификатор, сканер должен как-то понять, где закончилась партия.

Для этого используется разделитель FNC1 внутри кода. Посмотрим, как этого добиться в 1С:

Если вы используете правильную разметку со скобками в строке Сообщение, компонента 1С автоматически вставит символ-разделитель FNC1 после поля переменной длины. Если же вы подаете "голую" строку без разделителей, сканер объединит идентификаторы в одну нечитаемую кашу. Поэтому всегда используйте скобки при передаче данных в объект штрихкода 1С.

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

Если штрихкод напечатан, но не читается сканером, проанализируем следующие факторы:

  1. Разрешение печати: Для длинных кодов (более 40–50 символов) требуется высокое качество печати. Если ширина "полосок" становится меньше физического размера точки принтера, код "сливается". Попробуйте увеличить ширину рисунка в макете.
  2. Настройка сканера: Многие сканеры по умолчанию работают в режиме эмуляции клавиатуры и могут некорректно передавать служебные символы. Проверьте настройки префиксов в руководстве к вашему оборудованию.
  3. Версия платформы: Начиная с версии 8.3.x, рекомендуется использовать встроенные возможности печати штрихкодов, которые поставляются в составе БСП (Библиотеки Стандартных Подсистем). В них реализована поддержка Native-компоненты, лишенной многих проблем старой ActiveX-версии.

В современных конфигурациях (например, УТ 11 или БП 3.0) логика формирования штрихкода скрыта в общих модулях. Рассмотрим пример обращения к таким механизмам:


// Пример получения параметров штрихкода через БСП
ПараметрыШтрихкода = ГенерацияШтрихкода.ПараметрыШтрихкода();
ПараметрыШтрихкода.ТипКода = 2; // GS1-128
ПараметрыШтрихкода.Ширина = 100;
ПараметрыШтрихкода.Высота = 50;
ПараметрыШтрихкода.Значение = "(01)04601234567890(17)211231(10)BATCH123";

КартинкаШтрихкода = МенеджерОборудованияВызовСервера.СформироватьШтрихкод(ПараметрыШтрихкода);

Использование актуальных библиотек позволяет избежать ручной возни с регистрацией компонент и обеспечивает корректную работу как в 32-битных, так и в 64-битных версиях платформы 1С:Предприятие.

Итоги

Мы выяснили, что для успешной печати EAN-128 необходимо четко следовать правилам разметки данных (использовать скобки для AI), следить за тем, чтобы физический размер кода на печати позволял сканеру различать штрихи, и не пугаться визуальных отличий от онлайн-сервисов. Правильно настроенная компонента 1С является надежным инструментом, обеспечивающим полное соответствие международным стандартам маркировки продукции.

← На главную