Как правильно передавать коды маркировки в онлайн-кассу при продаже через интернет-магазин?

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

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

Разница между кодами для опта и розницы

Для начала проанализируем ситуацию, с которой столкнулся автор темы. В оптовых продажах, где движение товара фиксируется через электронный документооборот (ЭДО) и универсальные передаточные документы (УПД), зачастую достаточно использовать так называемые «короткие» коды. Они включают в себя GTIN и серийный номер (первые две группы идентификаторов). Однако для розничной продажи через контрольно-кассовую технику этот формат не подходит.

Для передачи в ККТ требуется полная марка. Она включает в себя не только идентификационные данные, но и «криптохвост» — ключ проверки и электронную подпись. Если передать код длиной 31–32 символа, проверка в системе «Честный ЗНАК» через ОФД не пройдет, так как фискальный накопитель (ФН-М) не сможет подтвердить подлинность марки.

Формат передачи данных и ФФД 1.2

Рассмотрим технические требования актуального формата фискальных данных (ФФД) 1.2. В этом формате код маркировки передается в специальном теге 1163 («код товара»).

Когда мы сканируем DataMatrix, кассовое программное обеспечение должно распознать его структуру и передать в драйвер кассы. Проанализируем состав полного кода:

  1. GTIN (01): 14 цифр.
  2. Серийный номер (21): индивидуальный номер единицы товара.
  3. Ключ проверки (91): служебная информация.
  4. Код проверки (92/93): криптографическая часть.

Выясним причину, по которой обычный клавиатурный сканер может выдавать ошибки. Все дело в невидимых спецсимволах, предусмотренных стандартом GS1.

Проблема спецсимволов (GS1 Separator)

В коде DataMatrix используется управляющий символ GS (Group Separator), имеющий код ASCII 29. Он разделяет блоки данных внутри марки. Разберем, как с ним работать:

Если ваш сканер настроен в режиме эмуляции клавиатуры, он может просто игнорировать этот символ или заменять его пробелом. Для корректной передачи через API интернет-магазина (например, при работе с сервисами типа PayKeeper или при прямой отправке в ККТ) программный код должен явно передавать этот символ.

Пример программной подготовки строки кода маркировки (псевдокод):


// Формируем строку с разделителем ASCII 29
СимволGS = Символ(29);
ПолныйКодМаркировки = "01" + GTIN + "21" + СерийныйНомер + СимволGS + "91" + Ключ + СимволGS + "93" + Подпись;

Если вы передаете данные на сайт, убедитесь, что ваш софт не «обрезает» эти символы. В некоторых случаях требуется экранирование, которое затем снимается на стороне обработчика перед отправкой команды на пробитие чека.

Обработка возвратов маркированного товара

Проанализируем процесс возврата. В обсуждении было замечено, что при автоматическом формировании чека возврата на основании чека продажи касса может подставлять некорректные данные. Это связано с тем, что полные коды с криптохвостом запрещено хранить в открытом виде в базе данных (согласно Постановлению Правительства № 1955).

Рассмотрим правильный алгоритм возврата:

  1. Покупатель возвращает товар.
  2. Необходимо физически отсканировать марку с упаковки товара.
  3. Данные сканирования передаются в чек возврата (тип расчета «Возврат прихода»).
  4. Касса отправляет данные в ОФД, и марка автоматически возвращается в оборот в системе «Честный ЗНАК».

Если марка на товаре повреждена и не считывается, процедура упрощенного возврата через кассу невозможна. В этом случае необходимо выполнить перемаркировку через личный кабинет «Честного ЗНАКа», заказать новый код и только потом выставлять товар на продажу.

Особенности для интернет-торговли и курьерской доставки

Выясним, в какой момент должен пробиваться чек с кодом маркировки в e-commerce. Рассмотрим три ситуации:

1. Предоплата на сайте: При получении денег на сайте формируется чек на аванс/предоплату. В этом чеке код маркировки не указывается. Код должен быть передан во втором чеке (полный расчет), который формируется в момент передачи товара покупателю или отгрузки со склада.

2. Собственная служба доставки: Курьер должен иметь мобильную кассу или использовать решение для удаленного фискализации. В момент вручения заказа курьер сканирует марку, и она попадает в фискальный документ.

3. Сторонние службы доставки (агенты): Если товар доставляет Почта России или СДЭК, обязанность по выводу товара из оборота чаще всего ложится на них как на агентов, принимающих оплату. В этом случае интернет-магазин передает информацию о кодах в электронном виде (через API или сопроводительные документы), а курьерская служба сканирует их при выдаче.

Итоги и рекомендации

Подведем итог нашему анализу:

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

← На главную