Как сформировать и напечатать штрихкод RSS Expanded (GS1 DataBar Expanded) в 1С?

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

Формат RSS Expanded (согласно актуальной классификации GS1 — GS1 DataBar Expanded) активно применяется при маркировке весовой продукции, фармацевтических препаратов и товаров с переменными характеристиками. Он позволяет кодировать не только глобальный номер товара (GTIN), но и дополнительные реквизиты: дату производства, срок годности, номер партии, вес или серийный номер с использованием стандартных идентификаторов применения (AI).

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

Особенности и правила формирования данных GS1 DataBar Expanded

Прежде чем приступать к программной генерации графического кода, проанализируем структуру кодируемых данных:

  1. Идентификаторы применения (AI): Данные кодируются строго по стандарту GS1 в формате пар «идентификатор – значение». Например, 01 обозначает GTIN (14 цифр), 17 — срок годности (YYMMDD), 10 — номер партии, 3103 — вес нетто в килограммах с тремя знаками после запятой.
  2. Разделители FNC1 / GS: Для полей переменной длины (например, номер серии или партии) стандарт требует обязательной вставки специального разделителя (ASCII-код 29, Символ(29)), который позволяет сканеру отделить значение одного реквизита от следующего идентификатора применения.
  3. Ограничения емкости: Символика GS1 DataBar Expanded рассчитана на кодирование до 74 числовых или до 41 буквенно-цифрового символа. При превышении стандартной ширины этикетки используется многоуровневый вариант — Expanded Stacked (двумерное разбиение полос на несколько строк).

Вариант 1. Использование штатной Native-компоненты 1С (БСП / БПО)

В современных конфигурациях 1С, использующих Библиотеку подключаемого оборудования (БПО) или Библиотеку стандартных подсистем (БСП), поддерживается прямое формирование штрихкодов типа GS1 Databar Expanded Stacked через компоненту 1C:Печать штрихкодов (Native API).

Посмотрим на пример программного формирования штрихкода в памяти сервера:


ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина", 400);
ПараметрыШтрихкода.Вставить("Высота", 150);
ПараметрыШтрихкода.Вставить("ТипВходногоШтрихкода", 21); // Тип символики GS1 Databar Expanded Stacked
ПараметрыШтрихкода.Вставить("ОтображатьТекст", Ложь);
ПараметрыШтрихкода.Вставить("Штрихкод", "(01)04601234567893(3103)001500(17)251231");

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

Если ДвоичныеДанныеКартинки <> Неопределено Тогда
    КартинкаШтрихкода = Новый Картинка(ДвоичныеДанныеКартинки);
    РисунокТаблицы.Картинка = КартинкаШтрихкода;
КонецЕсли;

Главное преимущество этого способа — полная кроссплатформенность: генерация выполняется на стороне сервера как под ОС Windows, так и под Linux без вызова внешних исполняемых файлов.

Вариант 2. Генерация через консольную утилиту Zint

Если в используемой конфигурации 1С отсутствует подходящая версия компоненты печати штрихкодов, эффективным решением является вызов специализированной открытой утилиты Zint Barcode Generator через метод ЗапуститьПриложение().

Утилита Zint поддерживает стандарт GS1 DataBar Expanded (внутренний тип символики --barcode=79 для Expanded или --barcode=81 для Expanded Stacked). Рассмотрим по шагам алгоритм взаимодействия 1С с утилитой:

  1. Формируем путь к временному файлу изображения (PNG).
  2. Формируем командную строку с указанием типа штрихкода, кодируемой строки и пути сохранения.
  3. Вызываем утилиту через ЗапуститьПриложение() с флагом ожидания завершения.
  4. Считываем полученный файл в объект Картинка и удаляем временный файл с диска.

Разберем пример кода на платформе 1С:


ИмяФайлаКартинки = ПолучитьИмяВременногоФайла("png");
ПутьZint = "C:\Tools\zint\zint.exe";

ДанныеКода = "[01]04601234567893[3103]002500[10]BATCH123";
Команда = СтрШаблон("%1 -b 81 -d ""%2"" -o ""%3"" --whitesp=0", ПутьZint, ДанныеКода, ИмяФайлаКартинки);

КодВозврата = 0;
ЗапуститьПриложение(Команда, , Истина, КодВозврата);

Если КодВозврата = 0 И ЭтоФайл(ИмяФайлаКартинки) Тогда
    ДвоичныеДанныеШК = Новый ДвоичныеДанные(ИмяФайлаКартинки);
    КартинкаДляОтчета = Новый Картинка(ДвоичныеДанныеШК);
    УдалитьФайлы(ИмяФайлаКартинки);
Иначе
    ВызватьИсключение "Ошибка генерации штрихкода утилитой Zint. Код ошибки: " + Строка(КодВозврата);
КонецЕсли;

Вариант 3. Аппаратная печать на принтер этикеток (EZPL, ZPL, TSPL)

При интенсивной печати на специализированных принтерах этикеток (Godex, Zebra, TSC) наиболее производительным решением является прямая отправка команд на языке управления принтером без генерации растровых картинок.

Проанализируем преимущества прямого формирования команд:

  1. Скорость: Принтер получает текстовый поток малого объема, штрихкод рендерится процессором самого принтера на максимальном аппаратном разрешении головки (DPI).
  2. Качество: Полностью исключаются артефакты масштабирования и размытия линий штрихкода.
  3. Независимость: Не требуются сторонние библиотеки и компоненты на стороне 1С.

Для отправки командного кода (ZPL, TSPL, EZPL) сформированный текст передается напрямую через TCP-сокет принтера или отправляется в спулер печати операционной системы в режиме RAW-печати. В командных языках принтеров (например, команда ^BR в ZPL) достаточно передать тип символики 6 (Expanded) и саму строку с идентификаторами применения, после чего принтер выполнит расчет и печать штрихкода автоматически.

← На главную