Как сформировать и напечатать DataMatrix GS1 для маркировки молочной продукции в 1С 7.7?

Программист 1С v7.7 Промышленность, строительство и АПК
← На главную

Внедрение системы маркировки «Честный Знак» (ЧЗ) ставит перед разработчиками на платформе 1С 7.7 ряд сложных технических задач. Одной из самых острых проблем является формирование и печать кода DataMatrix в формате GS1, который требует специфической структуры и наличия непечатных управляющих символов. Разберем подробно, из чего состоит код для молочной продукции, как обеспечить его считываемость и какие программные инструменты использовать для реализации этой задачи.

Структура кода маркировки для молочной продукции

Для начала проанализируем состав самого кода. В отличие от обувной промышленности, где коды могут быть очень длинными, для молочной продукции используется компактный формат. Согласно актуальным требованиям, код маркировки состоит из трех основных групп данных (идентификаторов применения AI):

  1. AI (01): GTIN товара, состоящий из 14 цифр.
  2. AI (21): Индивидуальный серийный номер упаковки — 6 символов.
  3. AI (93): Код проверки (криптохвост) — 4 символа.

Важно помнить, что обязательным требованием стандарта GS1 является наличие спецсимвола FNC1 в самом начале кода. Этот символ не является обычной буквой или цифрой; он служит признаком того, что сканер должен интерпретировать штрихкод именно как GS1 DataMatrix. Кроме того, группы данных переменной длины должны разделяться символом-разделителем GS (ASCII 29).

Важное уточнение: В ранних редакциях правил для молочной продукции предполагалось использование идентификаторов срока годности (AI 17 или AI 73), однако в текущем рабочем формате для молочки они в состав самого печатного кода DataMatrix обычно не включаются (информация о сроках передается в систему при вводе в оборот).

Выбор компоненты для печати в 1С 7.7

Платформа 1С 7.7 не имеет штатных средств для генерации DataMatrix, поэтому программисты вынуждены использовать внешние компоненты. Рассмотрим наиболее популярные варианты, упомянутые в практике:

Техническая реализация через Formex и Zint

Рассмотрим подробнее, как программно сформировать правильную строку для печати. Основная сложность заключается в том, что сканеры и проверочные приложения (например, мобильное приложение «Честный Знак») жестко требуют наличия FNC1. Если просто передать строку «01...21...», код будет считаться некорректным.

При использовании Formex и метода НарисоватьШтрихкод существует два способа решения проблемы:

Способ 1. Использование квадратных скобок для идентификаторов

Некоторые версии библиотек позволяют передавать идентификаторы применения в квадратных скобках. В этом случае компонента сама понимает, что нужно сформировать код в стандарте GS1. Пример формирования строки:


ТекстМарки = "[01]" + Гтин + "[21]" + Серия + "[93]" + Криптохвост;
Сервис.НарисоватьШтрихкод(Объект, 71, СокрЛП(ТекстМарки), 0);

Способ 2. Использование флага 512 для GS1 DM Rus

В более свежих сборках Formex, поддерживающих спецификацию GS1 DM Rus, для корректной вставки FNC1 в начало кода рекомендуется использовать специальный параметр (флаг). Выясним причину: стандартный Zint может использовать GS вместо FNC1, что иногда приводит к ошибкам валидации в приложении ЧЗ. Использование флага 512 принудительно устанавливает нужный префикс.

Посмотрим на пример кода с использованием расширенных параметров:


// 71 - тип штрихкода DataMatrix
// Параметр 512 сообщает компоненте о необходимости формата GS1 DM Rus
Сервис.НарисоватьШтрихкод(Объект, 71, ТекстМарки, 0, , 2, , 512);

Работа с разделителями (Символ GS)

Проанализируем ситуацию с разделителями внутри кода. Символ GS (ASCII 29) необходим для отделения серийного номера от кода проверки. В 1С 7.7 этот символ вставляется функцией Симв(29). Однако важно понимать, как ваша компонента его обрабатывает. Многие библиотеки при выборе типа штрихкода "GS1 DataMatrix" автоматически преобразуют вставленный вами Симв(29) в необходимую управляющую последовательность внутри графического кода.

Пример подготовки строки с разделителем:


// Формируем полную строку для ЧЗ: 01 + GTIN + 21 + SN + GS + 93 + CODE
ПолныйКод = "01" + СокрЛП(GTIN) + "21" + СокрЛП(Серия) + Симв(29) + "93" + СокрЛП(Крипто);

Проверка корректности печати

После формирования кода крайне важно проверить его не только обычным складским сканером (который может просто выдать строку текста), но и официальным приложением «Честный Знак». Если приложение выдает ошибку "Код сформирован некорректно. Отсутствует признак GS1 DataMatrix", значит, префикс FNC1 не был закодирован в первом байте штрихкода.

Основные причины проблем с валидацией:

  1. Использование старой версии formex.dll, где библиотека Zint еще не поддерживала специфические российские требования к GS1.
  2. Передача управляющих символов в виде текста (например, попытка написать "FNC1" буквами вместо использования спецсимволов или настроек компоненты).
  3. Низкое качество печати принтера. Для DataMatrix размером 22х22 модуля на маленьких этикетках (например, для сырков) требуется разрешение принтера не менее 300 DPI. При 203 DPI модули могут «слипаться», и код будет нечитаемым.

Альтернативный вариант: печать через ZPL

Если вы используете принтеры Zebra, Honeywell или TSC, поддерживающие языки управления (например, ZPL), можно рассмотреть вариант прямой отправки команд на принтер, минуя генерацию картинки в 1С. В командах ZPL можно явно указать тип штрихкода и способ вставки управляющих символов. Это значительно повышает четкость печати и скорость работы системы, так как принтер сам генерирует графику кода.

В завершение отметим, что для стабильной работы на 1С 7.7 лучше всего использовать связку из актуальной версии Formex и предварительно подготовленной строки кода, полученной напрямую из личного кабинета «Честного Знака» или через API СУЗ. Это гарантирует, что вы передаете на печать именно те данные, которые система ожидает увидеть при проверке.

← На главную