Как правильно сформировать штрихкод в формате GS1-128 в 1С:Комплексная автоматизация 2.5?

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

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

В этой статье мы подробно разберем, как правильно подготовить данные для печати штрихкода GS1-128, используя штатные механизмы 1С и современные библиотеки печати штрихкодов.

Разбираем отличия GS1-128 от обычного Code 128

Прежде чем переходить к коду, давайте выясним причину, по которой стандартные методы генерации часто выдают «неправильный» результат. Основное отличие GS1-128 от стандартного Code 128 заключается в наличии специального непечатного управляющего символа — FNC1.

Символ FNC1 выполняет две важные функции:

  1. Признак стандарта: Он ставится в самом начале штрихкода и сообщает сканеру, что данные далее закодированы по правилам GS1 (с использованием идентификаторов применения AI).
  2. Разделитель полей: Он используется для отделения полей переменной длины внутри штрихкода.

Если вы просто передаете строку типа (01)0291138... в компоненту печати, она воспринимает скобки как часть данных, что является ошибкой. В самом коде скобок быть не должно — они предназначены только для текстовой подписи под штрихкодом. Эти правила важно соблюдать и при выполнении таких задач, как создание технических карт для Национального каталога, где данные должны строго соответствовать формату.

Шаг 1: Подготовка строки данных

Проанализируем типичную ошибку при формировании строки. Рассмотрим пример из практики. Нам нужно закодировать GTIN, вес и дату. В визуальном представлении это выглядит так: (01)02911380002050(3102)000150(11)240529.

Для корректной генерации в 1С нам необходимо:

  1. Убрать все скобки.
  2. В начало строки добавить символ FNC1. В компоненте 1С NativeBarcode (которая используется в большинстве современных конфигураций) этот символ соответствует Символ(232).
  3. Если в середине штрихкода встречаются поля переменной длины (например, номер партии AI 10 или серийный номер AI 21), после них также нужно вставить Символ(232), если за ними следуют другие данные.

Давайте посмотрим на пример формирования «правильной» строки кода:


// Определяем спецсимвол FNC1
СимволFNC1 = Символ(232);

// Формируем чистые данные без скобок
// AI(01) - GTIN (14 цифр)
// AI(3100) - Вес нетто в кг (6 цифр)
// AI(11) - Дата производства (6 цифр ГГММДД)
ДанныеШК = "0102911380002050310000105011240529";

// Итоговая строка для компоненты:
СтрокаДляПечати = СимволFNC1 + ДанныеШК;

Шаг 2: Вызов программного интерфейса в КА 2.5

В конфигурации 1С:Комплексная автоматизация 2.5 (и аналогичных на базе БСП, таких как ERP или УТ 11) для генерации изображения используется общий модуль ГенерацияШтрихкода. Этот же механизм задействован, когда реализуется расходная накладная с выводом штрихкодов для товаров или формируется универсальный передаточный документ 2026 с QR-Code и штрихкодами.

Обратите внимание на параметр ТипКода. Для GS1-128 часто используется значение 2 (соответствует Code 128), но при этом мы обязаны сами добавить Символ(232) в начало строки. В некоторых версиях БПО есть отдельный тип для GS1-128 (индекс 16), который может добавлять префикс автоматически, но ручное добавление через Символ(232) является наиболее универсальным и надежным методом.


ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина",          1500);
ПараметрыШтрихкода.Вставить("Высота",          100);
ПараметрыШтрихкода.Вставить("ТипКода",         2); // Code 128
ПараметрыШтрихкода.Вставить("ОтображатьТекст", Истина);
ПараметрыШтрихкода.Вставить("РазмерШрифта",    10);

// Используем функцию для формирования текста со скобками для визуального отображения
// и чистую строку с FNC1 для самой "зебры"
ТекстДляЧеловека = "(01)02911380002050(3100)001050(11)240529";
СтрокаДляРобота  = Символ(232) + "0102911380002050310000105011240529";

ПараметрыШтрихкода.Вставить("Штрихкод", СтрокаДляРобота);

// Если компонента поддерживает отдельное свойство для текста под кодом:
ПараметрыШтрихкода.Вставить("Текст", ТекстДляЧеловека);

РезультатГенерации = ГенерацияШтрихкода.ИзображениеШтрихкода(ПараметрыШтрихкода);

Если РезультатГенерации.Свойство("Картинка") Тогда
    ОбластьДокумент.Рисунки.КартинкаШтрихкода.Картинка = РезультатГенерации.Картинка;
КонецЕсли;

Шаг 3: Работа с идентификаторами переменной длины

Разберем ситуацию, когда порядок полей в штрихкоде имеет значение. Идентификаторы применения (Application Identifiers) бывают фиксированной длины (например, 01 — всегда 14 символов, 11 — всегда 6 символов) и переменной (например, 10 — номер партии до 20 символов). Правильная работа с ними критична при печати кодов маркировки Честного знака, где могут использоваться порядковые номера.

Важное правило: если поле переменной длины находится НЕ в самом конце штрихкода, после него обязательно должен стоять разделитель FNC1. Это позволяет сканеру понять, где заканчивается партия и начинаются следующие данные.

Рассмотрим пример: Идентификатор 10 (Партия) и Идентификатор 17 (Срок годности).


Партия = "LOT12345"; // Длина может меняться
СрокГодности = "251231"; // ГГММДД

// Правильная сборка: FNC1 + 01(GTIN) + 10(Партия) + FNC1 + 17(Срок)
СтрокаШК = Символ(232) + "0102911380002050" + "10" + Партия + Символ(232) + "17" + СрокГодности;

Если вам требуется печать кодов маркировки из заказа на эмиссию (с криптохвостом), помните, что структура таких кодов также подчиняется строгим правилам GS1, и некорректная обработка разделителей сделает код нечитаемым для систем проверки.

Проверка результата

Выясним, как проверить, что сформированный штрихкод соответствует эталону. Не стоит полагаться только на визуальное сравнение полосок. Используйте следующие методы:

  1. Профессиональные онлайн-генераторы: Сравните результат с генераторами, которые поддерживают ввод управляющих символов (например, через ~1 или \232).
  2. Специализированное ПО для смартфона: Используйте приложения типа «GS1 Barcode Scanner», которые показывают структуру кода (AI, данные и наличие символа FNC1).
  3. Тестирование в 1С: В конфигурациях 1С есть встроенные обработки для тестирования торгового оборудования. Попробуйте отсканировать напечатанный код там. Правильно сформированный GS1-128 должен возвращать строку, начинающуюся со спецсимвола, а не просто набор цифр со скобками.

Подведем итог: для успешного формирования штрихкода GS1-128 в КА 2.5 необходимо отказаться от ручного написания скобок в строке данных, обязательно использовать префикс Символ(232) и внимательно следить за разделителями в полях переменной длины. Это гарантирует, что ваши этикетки будут без проблем приниматься любыми логистическими узлами и торговыми сетями.

← На главную