Как получить КИЗ с криптохвостом для отладки интеграции с ГИС МТ без сканера

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

При разработке и отладке систем интеграции с ГИС МТ (Честный Знак) программисты часто сталкиваются с проблемой отсутствия физического сканера штрихкодов. Основная сложность заключается в том, что для корректного формирования чека или передачи данных в систему требуется полный код маркировки, включающий так называемый «криптохвост» (коды проверки). Обычные средства просмотра, такие как приложение «Честный Знак» для потребителей или данные из УПД в ЭДО, часто скрывают эту техническую информацию. В данной статье мы разберем, как получить полноценный код для тестирования и как правильно работать с ним в коде 1С.

Структура кода DataMatrix GS1 и роль криптохвоста

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

Критически важным моментом является наличие непечатного символа-разделителя групп — GS (Group Separator), имеющего ASCII-код 29. Этот символ служит маркером окончания поля переменной длины для драйвера кассового аппарата и программного обеспечения. Без этого символа код считается невалидным, и проверка в системе ОФД выдаст ошибку или пометку [M-] в чеке.

Способ 1: Получение кода через мобильный телефон

Разберем ситуацию, когда у нас есть товар с маркой, но нет специализированного сканера. Стандартное мобильное приложение «Честный Знак» не подходит для наших целей, так как оно отображает только информацию о товаре и его легальности, отсекая технические данные. Однако мы можем воспользоваться альтернативными инструментами.

Рассмотрим порядок действий:

  1. Установим на смартфон любое приложение для разработчиков, предназначенное для чтения штрихкодов, которое поддерживает вывод спецсимволов (например, Barcode Scanners или Zebra Barcode Scanner).
  2. Отсканируем марку камерой телефона. Приложение может выдать предупреждение о наличии непечатных символов — это именно то, что нам нужно.
  3. Перешлем полученную строку (например, через почту или мессенджер) на рабочий компьютер.
  4. Откроем полученный текст в продвинутом редакторе, таком как Notepad++. В нем символ разделителя будет отображаться как инвертированная надпись GS.

Проанализируем ситуацию: если мы просто скопируем эту строку в текстовое поле 1С, символ GS может потеряться или превратиться в пробел. Это приведет к тому, что при формировании XML-файла для ККТ код будет искажен. Для решения этой проблемы можно использовать обработку для добавления невидимых символов GS к коду маркировки.

Способ 2: Программная эмуляция кода в 1С

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


Функция СформироватьПолныйКодМаркировки(GTIN, Серия, Ключ, Криптохвост)
    // Символ(29) — это и есть разделитель GS
    Разделитель = Символ(29);
    
    // Формируем строку в формате GS1
    // Обратите внимание: перед 91 и 92 должен стоять разделитель, 
    // если предыдущее поле имеет переменную длину
    ПолныйКод = "01" + GTIN + "21" + Серия + Разделитель + "91" + Ключ + Разделитель + "92" + Криптохвост;
    
    Возврат ПолныйКод;
КонецФункции

При отладке парсинга входящей строки со сканера (если сканер работает в режиме эмуляции клавиатуры), полезно знать, как программно отделить КИЗ от криптохвоста. Посмотрим на пример реализации такой задачи:


Функция ПолучитьКИЗ(СтрМарка)
    // Ищем позицию первого разделителя групп
    ПозРазд = Найти(СтрМарка, Символ(29));
    
    Если ПозРазд > 0 Тогда
        // Извлекаем часть до разделителя
        КИЗ = Лев(СтрМарка, ПозРазд - 1);
    Иначе
        // Если разделитель не найден, возможно, это упрощенный код или ошибка
        КИЗ = СтрМарка;
    КонецЕсли;
    
    Возврат КИЗ;
КонецФункции

Способ 3: Использование тестового контура «Честного Знака»

Для полноценной разработки рекомендуется зарегистрироваться в «Песочнице» (тестовом контуре) ГИС МТ. Это позволяет абсолютно легально и бесплатно получить тестовые коды маркировки в электронном виде.

Выясним преимущества этого метода:

  1. Вы можете заказать коды через личный кабинет тестового контура.
  2. Система выдаст вам файл в формате CSV или PDF.
  3. В CSV-файле коды представлены в чистом текстовом виде со всеми необходимыми символами. Это идеальный источник данных для вставки в модули тестирования ОбменСГИСМТ.

Особенности работы с ФФД 1.2

Проанализируем требования формата фискальных данных 1.2. При передаче маркированного товара в ККТ система выполняет проверку кода. Если вы передадите строку без криптохвоста (только GTIN и серию), касса не сможет выполнить запрос к серверам ГИС МТ для проверки статуса кода. В результате в чеке будет напечатан признак [M-], что для реальной продажи является нарушением.

При формировании XML-структуры чека в 1С (объект ТаблицаТоваров), убедитесь, что в поле, отвечающее за код маркировки, попадает полная строка, включая Символ(29). Использование специализированных библиотек интеграции от 1С (БПО — Библиотека подключаемого оборудования) обычно автоматизирует этот процесс, но при прямой интеграции через драйвер ККТ контроль спецсимволов ложится на плечи программиста.

Важный момент: некоторые сканеры при настройке «из коробки» могут отсекать символ GS или заменять его на другой символ. При отладке всегда проверяйте, что именно «прилетает» в обработчик ВнешнееСобытие. Если вы видите, что код «слипся» (например, 21 переходит в 91 без разделителя), необходимо настроить драйвер сканера или программно восстанавливать структуру строки перед отправкой в ККТ.

← На главную