Как напечатать штрихкод GS1 DataBar Expanded Stacked из 1С на принтере этикеток Zebra?

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

При работе с крупными торговыми сетями и распределительными центрами поставщики часто сталкиваются с требованием маркировать продукцию и групповую тару штрихкодами формата GS1 DataBar Expanded Stacked. Попытка напечатать такую этикетку из типовой конфигурации 1С с помощью стандартной компоненты 1С:Печать штрихкодов наталкивается на ограничение: компонента либо воспринимает код как линейный Code 128 / GS1-128, либо пытается уложить его в базовый RSS-14 фиксированной длины, что приводит к ошибке формирования.

Разберем причины этой проблемы, проанализируем различия стандартов и рассмотрим практические способы печати таких этикеток из 1С на принтерах Zebra.

Различие между RSS-14 и GS1 DataBar Expanded Stacked

Для правильной реализации печати выясним, чем отличаются эти символики:

  1. RSS-14 (GS1 DataBar Omnidirectional / Stacked): предназначен исключительно для кодирования 14-значного номера GTIN фиксированной длины. В него нельзя поместить дополнительную информацию переменной длины (вес, дату, номер партии).
  2. GS1 DataBar Expanded Stacked: расширенная многострочная символика переменной длины. Она позволяет закодировать до 74 цифровых или 41 буквенно-цифрового символа. За счет применения идентификаторов применения AI (Application Identifiers) штрихкод может содержать одновременно GTIN (01), срок годности (17), точный вес (310x), номер партии (10) и количество (37). Приставка Stacked означает, что код разбивается по вертикали на несколько строк (уровней), что позволяет уместить длинную последовательность данных на компактной этикетке.

Поскольку встроенные старые компоненты 1С не умеют выполнять алгоритм математической упаковки и отрисовки Expanded Stacked, задачу печати решают альтернативными путями.

Способ 1. Прямая печать через язык управления Zebra (ZPL II)

Принтеры Zebra (например, популярные модели GK420t, ZD420) нативно поддерживают генерацию GS1 DataBar Expanded Stacked на уровне встроенного командного языка ZPL II. Обратите внимание, что язык EPL2 данный тип штрихкода не поддерживает, поэтому принтер необходимо перевести в режим ZPL.

Для вывода расширенного многострочного штрихкода в ZPL II используется команда ^BR. Рассмотрим синтаксис команды:

^BRo,e,m,s,h,w

Параметры команды:

  1. o — ориентация (N — обычная, R — поворот на 90°, I — на 180°, B — на 270°).
  2. e — тип символики (значение 6 задает GS1 DataBar Expanded).
  3. m — коэффициент увеличения/масштаб модуля (от 1 до 10 точек на элемент).
  4. s — высота разделителя строк (значение 8 активирует многострочный режим Stacked).
  5. h — общая высота штрихкода в точках.
  6. w — количество сегментов в одной строке (четное число от 2 до 22, определяющее ширину блока и количество строк в стеке).

Посмотрим на пример формирования готового ZPL-шаблона из 1С, содержащего текстовые реквизиты (наименование, вес, срок) и штрихкод:


Функция СформироватьКомандуZPL(ДанныеЭтикетки)
    
    ТекстZPL = "^XA" + Символы.ПС;
    // Установка кодовой страницы UTF-8
    ТекстZPL = ТекстZPL + "^CI28" + Символы.ПС;
    
    // Вывод текстовой информации: Наименование товара
    ТекстZPL = ТекстZPL + "^FO50,30^A0N,28,28^FD" + ДанныеЭтикетки.Номенклатура + "^FS" + Символы.ПС;
    
    // Вывод срока годности и веса
    ТекстZPL = ТекстZPL + "^FO50,65^A0N,24,24^FDГоден до: " + ДанныеЭтикетки.СрокГодности + "^FS" + Символы.ПС;
    ТекстZPL = ТекстZPL + "^FO50,95^A0N,24,24^FDВес нетто: " + ДанныеЭтикетки.Вес + " кг^FS" + Символы.ПС;
    
    // Формирование штрихкода GS1 DataBar Expanded Stacked
    // Параметры: e=6 (Expanded), s=8 (Stacked), w=4 (сегментов в строке)
    ТекстZPL = ТекстZPL + "^FO50,130^BRN,6,3,8,120,4^FD" + ДанныеЭтикетки.СтрокаШтрихкода + "^FS" + Символы.ПС;
    
    // Вывод текста штрихкода в читаемом виде (HRI)
    ТекстZPL = ТекстZPL + "^FO50,260^A0N,20,20^FD" + ДанныеЭтикетки.СтрокаШтрихкода + "^FS" + Символы.ПС;
    
    ТекстZPL = ТекстZPL + "^XZ";
    
    Возврат ТекстZPL;
    
КонецФункции

Сформированный ZPL-текст отправляется напрямую в порт принтера (через сетевой сокет, COM-порт или спулер Windows посредством компоненты прямой печати).

Способ 2. Генерация картинки через утилиту Zint и вставка в табличный документ 1С

Если в системе используется сложный макет этикетки в виде объекта ТабличныйДокумент и нет возможности переписывать всю печатную форму на чистый ZPL, можно сформировать штрихкод в виде графического файла (PNG/BMP) с помощью свободной библиотеки или консольной утилиты Zint.

Разберем по шагам, как настроить этот процесс:

  1. Консольная утилита zint.exe вызывается из 1С с передачей параметров: --barcode=81 (тип GS1 DataBar Expanded Stacked) и флагом --cols (количество столбцов/сегментов).
  2. Сформированный графический файл считывается в объект Картинка.
  3. Картинка помещается в объект РисунокТабличногоДокумента и выводится на печать штатными средствами платформы.

Рассмотрим пример кода на встроенном языке 1С:


Процедура ВставитьШтрихкодВМакет(ТабДок, ОбластьМакета, ИмяРисунка, СтрокаДанных, ПутьКZint)
    
    ИмяВременногоФайла = КаталогВременныхФайлов() + "barcode_temp.png";
    
    // Параметр --barcode=81 соответствует типу GS1 DataBar Expanded Stacked
    // --cols=4 задает 4 сегмента на строку
    КомандаЗапуска = СтрШаблон("%1 -b 81 --cols=4 -d ""%2"" -o ""%3""", 
        ПутьКZint, 
        СтрокаДанных, 
        ИмяВременногоФайла);
        
    ЗапуститьПриложение(КомандаЗапуска, , Истина);
    
    Если ФайлСуществует(ИмяВременногоФайла) Тогда
        РисунокШК = ОбластьМакета.Рисунки.Найти(ИмяРисунка);
        Если РисунокШК <> Неопределено Тогда
            РисунокШК.Картинка = Новый Картинка(ИмяВременногоФайла);
        КонецЕсли;
        УдалитьФайлы(ИмяВременногоФайла);
    КонецЕсли;
    
КонецПроцедуры

Способ 3. Использование сторонних систем маркировки (ZebraDesigner, BarTender)

Если на предприятии развернуты специализированные программы создания этикеток (ZebraDesigner Pro, BarTender, NiceLabel), в них создается готовый шаблон этикетки, где элемент GS1 DataBar Expanded Stacked настраивается визуально.

Интеграция с 1С в таком случае строится через передачу параметров:

  1. 1С формирует текстовый файл обмена (CSV, XML или TXT) со значениями полей (GTIN, вес, срок, наименование).
  2. Через COM-объект или вызов командной строки запускается фоновая печать шаблона с подстановкой переданных данных.

Рекомендация: После реализации любого из способов сформируйте контрольный образец этикетки и передайте его на верификацию в торговую сеть или протестируйте 2D-сканером с включенной поддержкой расширенных кодов GS1, чтобы убедиться в корректности распознавания всех групп идентификаторов применения (AI).

← На главную