Как сформировать и распечатать штрихкод GS1 DataBar Expanded Stacked и GS1-128 в 1С?

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

Маркировка весовой, упаковочной и логистической продукции часто требует размещения большого объема данных в компактном штрихкоде. Стандарты GS1 DataBar Expanded Stacked и GS1-128 позволяют кодировать глобальные номера товаров (GTIN), серийные номера, сроки годности, даты производства и партии с помощью стандартизированных идентификаторов применения (Application Identifiers, AI). Разберем по шагам, как настроить печать таких кодов в системе 1С и корректно организовать их считывание терминалами сбора данных (ТСД) и сканерами.

Варианты генерации GS1 DataBar Expanded Stacked в 1С

Штрихкод формата GS1 DataBar Expanded Stacked представляет собой многострочный (многоуровневый) составной код. Рассмотрим основные способы его вывода на печать:

  1. Использование штатной компоненты «1С:Печать штрихкодов»: В актуальных версиях Библиотеки подключаемого оборудования (БПО) и Библиотеки стандартных подсистем (БСП) native-компонента генерации штрихкодов для платформы 8.3 полностью поддерживает стандарт GS1 DataBar Expanded Stacked. Это позволяет формировать изображение непосредственно на стороне сервера без сторонних ActiveX-объектов.
  2. Использование библиотеки Zint: Открытая кроссплатформенная библиотека генерации штрихкодов Zint поддерживает практически все существующие форматы, включая семейство GS1 DataBar. Ее можно подключить через внешнюю компоненту или вызывать из командной строки для генерации файлов изображений штрихкодов с последующей загрузкой в табличный документ 1С.
  3. Прямая печать на принтер этикеток (ZPL / TSPL): Большинство современных промышленных и настольных принтеров этикеток поддерживают прямую генерацию символики встроенными процессорами принтера. Например, в языке ZPL для этого предусмотрена специальная команда, формирующая код с идеальной четкостью штрихов без передачи тяжелой графики из 1С.

Формирование штрихкода GS1-128 и передача идентификаторов применения

Штрихкоды стандарта GS1-128 (ранее EAN-128) и логистические коды SSCC формируются на базе символики Code 128, но имеют обязательный стартовый функциональный символ FNC1. При использовании компоненты 1С для разделения идентификаторов применения (AI) в строке штрихкода указываются круглые скобки. Посмотрим на пример программного заполнения объекта штрихкода в макете печати:


// Задаем тип кода EAN-128 / GS1-128 (ТипКода = 2 для типовой компоненты)
ОбластьМакета.Рисунки.ШтрихКод.Объект.ТипКода = 2;

// Собираем строку с идентификаторами применения:
// (01) - GTIN товара (14 цифр)
// (11) - Дата производства (ГГММДД)
// (30) - Количество (переменная длина)
// (10) - Номер партии (переменная длина)
ОбластьМакета.Рисунки.ШтрихКод.Объект.Сообщение = "(01)" + "04600822901507" + "(11)" + "161109" + "(30)" + "24" + Символ(29) + "(10)" + "16453I";

Проанализируем ключевые правила составления кодируемой строки:

  1. Служебный символ FNC1: Стартовый признак системы GS1 генератор штрихкода добавляет в начало кодовой последовательности автоматически, вручную передавать его в начале строки не требуется.
  2. Круглые скобки: Скобки используются компонентами для корректного отображения человекочитаемого текста (HRI) под штрихкодом. В саму графическую структуру штрихов скобки не кодируются.
  3. Разделитель Group Separator (GS): Если реквизит имеет фиксированную длину (например, (01) — всегда 14 знаков, (11) и (17) — всегда 6 знаков), разделитель после него не нужен. Если же реквизит имеет переменную длину (например, (10) — номер партии или (30) — количество), после него перед следующим идентификатором применения необходимо вставить разделитель Символ(29) (код ASCII 29).

Почему сканер или ТСД не читает штрихкод: поиск и устранение причин

Если сгенерированный штрихкод не считывается оборудованием, выясним причину с помощью последовательной проверки:

  1. Отключенная символика в сканере: По умолчанию на многих ТСД и 2D-сканерах чтение семейства GS1 DataBar (RSS) выключено для ускорения декодирования стандартных кодов. Необходимо открыть утилиту настройки сканера на устройстве (или отсканировать настроечные штрихкоды из руководства) и активировать поддержку GS1 DataBar Expanded.
  2. Слишком большая плотность или длина: Если код содержит много данных, штрихи становятся слишком тонкими. При печати на термопринтере с низким разрешением (203 dpi) линии могут сливаться. Проверим параметры масштабирования, увеличим модуль толщины штриха или уменьшим количество одновременно кодируемых реквизитов.
  3. Режим клавиатурного ввода (HID Keyboard): При передаче данных в режиме эмуляции клавиатуры служебный непечатный символ ASCII 29 (GS) операционной системой часто отбрасывается или обрабатывается как нажатие функциональных клавиш. В результате строка «склеивается», и учетная система не может ее распознать.

Определение типа штрихкода и парсинг данных при считывании

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

  1. Использование AIM ID префиксов: Для точной идентификации типа считанного кода настроим сканирующее оборудование на передачу префикса AIM ID. Для кодов GS1 DataBar стандартный префикс равен ]e0, а для кодов GS1-128 — ]C1. Анализируя префикс в процедуре обработки штрихкода, можно сразу направлять строку в нужный алгоритм разбора.
  2. Режим эмуляции COM-порта: Перевод сканеров и ТСД в режим виртуального COM-порта (или использование стандартных драйверов БПО) гарантирует, что спецсимвол ASCII 29 будет передан в 1С без искажений.
  3. Алгоритм разбора строки: При получении строки разбор выполняется последовательным считыванием: программа определяет идентификатор применения (AI) по таблице стандартов GS1, считывает данные фиксированной длины, а для полей переменной длины выполняет чтение до очередного символа с кодом 29 (Символ(29)) или до конца строки.
← На главную