При работе с торговыми сетями и системами маркировки, такими как «Честный знак», программисты 1С часто сталкиваются с необходимостью формирования штрихкодов формата GS1-128 (ранее известного как EAN-128). Особенно это актуально, когда требуется формирование транспортной упаковки (SSCC) маркируемого товара, где точность кодирования данных критически важна. Основная сложность заключается в том, что обычного визуального сходства с эталоном недостаточно — штрихкод должен иметь строго определенную внутреннюю структуру, которую распознает сканер.
В этой статье мы подробно разберем, как правильно подготовить данные для печати штрихкода GS1-128, используя штатные механизмы 1С и современные библиотеки печати штрихкодов.
Прежде чем переходить к коду, давайте выясним причину, по которой стандартные методы генерации часто выдают «неправильный» результат. Основное отличие GS1-128 от стандартного Code 128 заключается в наличии специального непечатного управляющего символа — FNC1.
Символ FNC1 выполняет две важные функции:
Если вы просто передаете строку типа (01)0291138... в компоненту печати, она воспринимает скобки как часть данных, что является ошибкой. В самом коде скобок быть не должно — они предназначены только для текстовой подписи под штрихкодом. Эти правила важно соблюдать и при выполнении таких задач, как создание технических карт для Национального каталога, где данные должны строго соответствовать формату.
Проанализируем типичную ошибку при формировании строки. Рассмотрим пример из практики. Нам нужно закодировать GTIN, вес и дату. В визуальном представлении это выглядит так: (01)02911380002050(3102)000150(11)240529.
Для корректной генерации в 1С нам необходимо:
NativeBarcode (которая используется в большинстве современных конфигураций) этот символ соответствует Символ(232).AI 10 или серийный номер AI 21), после них также нужно вставить Символ(232), если за ними следуют другие данные.Давайте посмотрим на пример формирования «правильной» строки кода:
// Определяем спецсимвол FNC1
СимволFNC1 = Символ(232);
// Формируем чистые данные без скобок
// AI(01) - GTIN (14 цифр)
// AI(3100) - Вес нетто в кг (6 цифр)
// AI(11) - Дата производства (6 цифр ГГММДД)
ДанныеШК = "0102911380002050310000105011240529";
// Итоговая строка для компоненты:
СтрокаДляПечати = СимволFNC1 + ДанныеШК;
В конфигурации 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";
ПараметрыШтрихкода.Вставить("Штрихкод", СтрокаДляРобота);
// Если компонента поддерживает отдельное свойство для текста под кодом:
ПараметрыШтрихкода.Вставить("Текст", ТекстДляЧеловека);
РезультатГенерации = ГенерацияШтрихкода.ИзображениеШтрихкода(ПараметрыШтрихкода);
Если РезультатГенерации.Свойство("Картинка") Тогда
ОбластьДокумент.Рисунки.КартинкаШтрихкода.Картинка = РезультатГенерации.Картинка;
КонецЕсли;
Разберем ситуацию, когда порядок полей в штрихкоде имеет значение. Идентификаторы применения (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 или \232).Подведем итог: для успешного формирования штрихкода GS1-128 в КА 2.5 необходимо отказаться от ручного написания скобок в строке данных, обязательно использовать префикс Символ(232) и внимательно следить за разделителями в полях переменной длины. Это гарантирует, что ваши этикетки будут без проблем приниматься любыми логистическими узлами и торговыми сетями.