Как правильно передавать код маркировки в чек для системы «Честный ЗНАК»?

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

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

Понимание структуры кода и роли спецсимволов

Код маркировки в формате DataMatrix — это не просто строка символов, а сложная структура, разделенная идентификаторами применения (ИИ). Основную сложность для программного обеспечения представляет спецсимвол GS (Group Separator), который служит разделителем между полями. Если сканер штрихкодов настроен некорректно, он может игнорировать этот символ или заменять его на пробел, что делает невозможным правильный парсинг «криптохвоста».

Различие требований для ФФД 1.05 и ФФД 1.2

Ключевым фактором для успешной фискализации является понимание того, какой формат фискальных данных (ФФД) используется в вашей кассе:

  1. ФФД 1.05: В этом формате передача криптографической части (криптохвоста) не требуется. Более того, передача лишних данных может привести к ошибкам, так как касса на этом формате не должна проводить криптографическую проверку. Вам необходимо передавать только «код проверки» без спецсимволов и завершающих блоков.
  2. ФФД 1.2: Этот формат предназначен для работы с маркированным товаром. При его использовании в кассу необходимо передавать полный код маркировки, включая все спецсимволы GS и криптографическую часть. Касса сама взаимодействует с ОФД и системой маркировки для валидации кода.

Настройка сканера штрихкодов

Чтобы избежать ошибок парсинга, убедитесь, что ваш сканер настроен на передачу символа GS. Большинство современных сканеров требуют сканирования специальных управляющих штрихкодов из инструкции производителя, чтобы включить режим передачи ASCII кода 29 (который соответствует GS). Если вы не настроите сканер, программа получит «склеенную» строку, которую невозможно будет корректно разделить на GTIN, серийный номер и криптохвост.

Рекомендации по передаче данных в 1С

При передаче данных в ККТ для формата ФФД 1.2 рекомендуется использовать формат Base64. Это позволяет избежать потерь служебных символов при передаче пакета данных между компонентами системы. Рассмотрим пример структуры пакета, который ожидает оборудование:


<CheckPackage>
    <Parameters ... />
    <Positions>
        <FiscalString Name="Наименование товара" Quantity="1" PriceWithDiscount="200" 
        MarkingCode="HTAxMDQ2MjIyMjIyMjIyMjIyMjIyMjIyMjIy"/>
    </Positions>
    <Payments ... />
</CheckPackage>

Как не нужно делать: ошибки ручного парсинга

Многие разработчики пытаются реализовать поиск криптохвоста вручную через поиск вхождений «21» или «93». Это неправильный подход, так как:

Для разбора кодов маркировки настоятельно рекомендуем использовать Библиотеку подключаемого оборудования (БПО) от фирмы 1С. В ней уже реализованы все необходимые механизмы для корректного разбора DataMatrix, что освобождает вас от необходимости изобретать велосипед и гарантирует соответствие актуальным требованиям законодательства.

Итоговый алгоритм действий

  1. Проверьте текущую версию ФФД на кассе.
  2. Если ФФД 1.05 — обрезайте код до «кода проверки», удаляя криптохвост.
  3. Если ФФД 1.2 — передавайте полный код, предварительно убедившись в корректной настройке сканера.
  4. Используйте стандартные методы БПО для работы с маркировкой вместо написания собственных парсеров строк.
  5. Если чеки в личном кабинете «Честного ЗНАКа» имеют статус «Ошибка», проверьте, не передаете ли вы лишние данные для выбранного формата ФФД.
← На главную