Формат RSS Expanded (согласно актуальной классификации GS1 — GS1 DataBar Expanded) активно применяется при маркировке весовой продукции, фармацевтических препаратов и товаров с переменными характеристиками. Он позволяет кодировать не только глобальный номер товара (GTIN), но и дополнительные реквизиты: дату производства, срок годности, номер партии, вес или серийный номер с использованием стандартных идентификаторов применения (AI).
Разберем основные практические способы формирования и вывода на печать штрихкода данного стандарта в среде 1С:Предприятие.
Прежде чем приступать к программной генерации графического кода, проанализируем структуру кодируемых данных:
01 обозначает GTIN (14 цифр), 17 — срок годности (YYMMDD), 10 — номер партии, 3103 — вес нетто в килограммах с тремя знаками после запятой.Символ(29)), который позволяет сканеру отделить значение одного реквизита от следующего идентификатора применения.В современных конфигурациях 1С, использующих Библиотеку подключаемого оборудования (БПО) или Библиотеку стандартных подсистем (БСП), поддерживается прямое формирование штрихкодов типа GS1 Databar Expanded Stacked через компоненту 1C:Печать штрихкодов (Native API).
Посмотрим на пример программного формирования штрихкода в памяти сервера:
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина", 400);
ПараметрыШтрихкода.Вставить("Высота", 150);
ПараметрыШтрихкода.Вставить("ТипВходногоШтрихкода", 21); // Тип символики GS1 Databar Expanded Stacked
ПараметрыШтрихкода.Вставить("ОтображатьТекст", Ложь);
ПараметрыШтрихкода.Вставить("Штрихкод", "(01)04601234567893(3103)001500(17)251231");
ДвоичныеДанныеКартинки = МенеджерОборудованияВызовСервераПереопределяемый.СформироватьИзображениеШтрихкода(ПараметрыШтрихкода);
Если ДвоичныеДанныеКартинки <> Неопределено Тогда
КартинкаШтрихкода = Новый Картинка(ДвоичныеДанныеКартинки);
РисунокТаблицы.Картинка = КартинкаШтрихкода;
КонецЕсли;
Главное преимущество этого способа — полная кроссплатформенность: генерация выполняется на стороне сервера как под ОС Windows, так и под Linux без вызова внешних исполняемых файлов.
Если в используемой конфигурации 1С отсутствует подходящая версия компоненты печати штрихкодов, эффективным решением является вызов специализированной открытой утилиты Zint Barcode Generator через метод ЗапуститьПриложение().
Утилита Zint поддерживает стандарт GS1 DataBar Expanded (внутренний тип символики --barcode=79 для Expanded или --barcode=81 для Expanded Stacked). Рассмотрим по шагам алгоритм взаимодействия 1С с утилитой:
ЗапуститьПриложение() с флагом ожидания завершения.Картинка и удаляем временный файл с диска.Разберем пример кода на платформе 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. Код ошибки: " + Строка(КодВозврата);
КонецЕсли;
При интенсивной печати на специализированных принтерах этикеток (Godex, Zebra, TSC) наиболее производительным решением является прямая отправка команд на языке управления принтером без генерации растровых картинок.
Проанализируем преимущества прямого формирования команд:
Для отправки командного кода (ZPL, TSPL, EZPL) сформированный текст передается напрямую через TCP-сокет принтера или отправляется в спулер печати операционной системы в режиме RAW-печати. В командных языках принтеров (например, команда ^BR в ZPL) достаточно передать тип символики 6 (Expanded) и саму строку с идентификаторами применения, после чего принтер выполнит расчет и печать штрихкода автоматически.