При интеграции интернет-магазина с облачными или физическими онлайн-кассами (ККТ) разработчики часто сталкиваются с проблемой отклонения чеков оператором фискальных данных (ОФД). Основная причина — некорректная передача кодов маркировки (DataMatrix). В данной статье мы подробно разберем, в каком формате необходимо передавать данные, как обрабатывать служебные символы и что делать в случае возврата товара покупателем.
Для начала проанализируем ситуацию, с которой столкнулся автор темы. В оптовых продажах, где движение товара фиксируется через электронный документооборот (ЭДО) и универсальные передаточные документы (УПД), зачастую достаточно использовать так называемые «короткие» коды. Они включают в себя GTIN и серийный номер (первые две группы идентификаторов). Однако для розничной продажи через контрольно-кассовую технику этот формат не подходит.
Для передачи в ККТ требуется полная марка. Она включает в себя не только идентификационные данные, но и «криптохвост» — ключ проверки и электронную подпись. Если передать код длиной 31–32 символа, проверка в системе «Честный ЗНАК» через ОФД не пройдет, так как фискальный накопитель (ФН-М) не сможет подтвердить подлинность марки.
Рассмотрим технические требования актуального формата фискальных данных (ФФД) 1.2. В этом формате код маркировки передается в специальном теге 1163 («код товара»).
Когда мы сканируем DataMatrix, кассовое программное обеспечение должно распознать его структуру и передать в драйвер кассы. Проанализируем состав полного кода:
Выясним причину, по которой обычный клавиатурный сканер может выдавать ошибки. Все дело в невидимых спецсимволах, предусмотренных стандартом GS1.
В коде DataMatrix используется управляющий символ GS (Group Separator), имеющий код ASCII 29. Он разделяет блоки данных внутри марки. Разберем, как с ним работать:
Если ваш сканер настроен в режиме эмуляции клавиатуры, он может просто игнорировать этот символ или заменять его пробелом. Для корректной передачи через API интернет-магазина (например, при работе с сервисами типа PayKeeper или при прямой отправке в ККТ) программный код должен явно передавать этот символ.
Пример программной подготовки строки кода маркировки (псевдокод):
// Формируем строку с разделителем ASCII 29
СимволGS = Символ(29);
ПолныйКодМаркировки = "01" + GTIN + "21" + СерийныйНомер + СимволGS + "91" + Ключ + СимволGS + "93" + Подпись;
Если вы передаете данные на сайт, убедитесь, что ваш софт не «обрезает» эти символы. В некоторых случаях требуется экранирование, которое затем снимается на стороне обработчика перед отправкой команды на пробитие чека.
Проанализируем процесс возврата. В обсуждении было замечено, что при автоматическом формировании чека возврата на основании чека продажи касса может подставлять некорректные данные. Это связано с тем, что полные коды с криптохвостом запрещено хранить в открытом виде в базе данных (согласно Постановлению Правительства № 1955).
Рассмотрим правильный алгоритм возврата:
Если марка на товаре повреждена и не считывается, процедура упрощенного возврата через кассу невозможна. В этом случае необходимо выполнить перемаркировку через личный кабинет «Честного ЗНАКа», заказать новый код и только потом выставлять товар на продажу.
Выясним, в какой момент должен пробиваться чек с кодом маркировки в e-commerce. Рассмотрим три ситуации:
1. Предоплата на сайте: При получении денег на сайте формируется чек на аванс/предоплату. В этом чеке код маркировки не указывается. Код должен быть передан во втором чеке (полный расчет), который формируется в момент передачи товара покупателю или отгрузки со склада.
2. Собственная служба доставки: Курьер должен иметь мобильную кассу или использовать решение для удаленного фискализации. В момент вручения заказа курьер сканирует марку, и она попадает в фискальный документ.
3. Сторонние службы доставки (агенты): Если товар доставляет Почта России или СДЭК, обязанность по выводу товара из оборота чаще всего ложится на них как на агентов, принимающих оплату. В этом случае интернет-магазин передает информацию о кодах в электронном виде (через API или сопроводительные документы), а курьерская служба сканирует их при выдаче.
Подведем итог нашему анализу:
COM-портов или NativeAPI в 1С).Соблюдение этих правил позволит избежать штрафов и обеспечит корректную работу с системой «Честный ЗНАК» в соответствии с требованиями законодательства.