Покупатель стоит у кассы, товар пробивают — и чек не проходит. Товар тот самый, коробка целая, на ней ровный DataMatrix. Не проходит код маркировки: касса отправила его на проверку в Честный Знак и получила отказ.
Разбираться приходится задним числом, а разбирать нечего: физически всё правильно, ломается передача кода. Расскажу, где именно она ломается, что проверять до отгрузки и какие три вещи закрывают проблему целиком. Это опыт с боевого проекта, где маркированный товар уезжает через склад-подрядчика, и часть кодов приезжала оттуда битой.
Как код доходит до кассы
Код маркировки живёт дольше и путешествует дальше, чем кажется. Путь такой:
- Эмиссия. Производитель или импортёр получает коды в Честном Знаке и наносит DataMatrix на упаковку.
- Приёмка на складе. Товар приходит на склад — свой или подрядчика, — и коды числятся за конкретными единицами.
- Отгрузка. Склад собирает заказ и передаёт вам коды тех единиц, что реально уехали.
- Чек. Касса отправляет код в ОФД, тот проверяет его в системе Честного Знака.
- Погашение. Код выводится из оборота: эта единица продана.

Пять шагов, но проблема почти всегда на третьем: код едет от склада к вам.
Ошибиться можно на любом стыке, но на практике всё ломается в одном месте — на третьем шаге, когда код едет от склада к вам. Дальше касса просто честно сообщает, что получила.
Почему код приезжает неполным
Главная причина обидная: код переписывают глазами с подписи под DataMatrix.
Под квадратом обычно напечатана человекочитаемая строка — код товара и серийный номер. Выглядит она как полный код, но полным не является: в неё не входит криптографическая часть, тот самый «криптохвост». Сканер её читает, глаз — нет. Если кладовщик переписал код с подписи или сфотографировал этикетку и продиктовал, до вас доедет обрубок.
На кассе такой код выглядит как «код маркировки не распознан», в статистике ОФД — как некорректный. У нас так пришло несколько сотен позиций, и нашлось это не в момент отгрузки, а когда чеки начали отбиваться.
Реже, но встречается ещё три причины:
- Разделители GS. В коде есть служебные символы-разделители. Часть систем их сохраняет, часть теряет, а некоторые вставляют лишние. Касса и Честный Знак принимают код без них — приводить к одному виду надо у себя, а не надеяться на склад.
- Excel. Коды выгружают таблицей, таблица обрезает длинные строки и «улучшает» их автоформатом. Если обмен со складом идёт файлами, это вопрос времени.
- Ручной ввод. Любая точка, где код набирают руками, рано или поздно даёт ошибку в один символ. Символ этот не виден.
Три эшелона защиты
Одной проверки мало: каждая ловит свой класс ошибок и пропускает чужие. Работающий набор — три.

Порядок срабатывания обратный порядку внедрения: валидатор ловит раньше всех, касса — последней.
1. Разрешительный режим на кассе. Касса перед пробитием спрашивает Честный Знак, можно ли продавать именно эту единицу, и не даёт пробить битый или уже погашенный код. Это последний рубеж, и он обязателен: он ловит даже то, о чём вы не знали.
Здесь же проверьте настройки самой кассы. У нас чеки сначала отбивались не из-за кодов: в настройках не был включён признак торговли маркированными товарами. Лечится перерегистрацией кассы, но найти это без подсказки трудно — сообщение об ошибке о признаке не говорит.
2. Свой валидатор до отгрузки. Простая проверка полноты кода на вашей стороне: пришёл код без криптографической части — не принимаем и запрашиваем повторно. Проверка стоит один вечер работы, а ловит ровно ту ошибку, которая случается чаще всех. Важно, чтобы она стояла до отгрузки, а не в момент чека: пока товар не уехал, код можно перечитать сканером.
3. Правильное поле в чеке. Код маркировки уходит в чек отдельным реквизитом, а не строкой в наименовании товара. Мы на этом потеряли время: система слала код не тем полем, чек уходил, касса не ругалась, а Честный Знак его не видел. Внешне всё работает, по факту — продажи без маркировки.
Проверить просто: в личном кабинете ОФД есть статистика по маркировке. Если коды доходят правильно, там «корректные коды — 100%». Любая цифра меньше означает, что часть чеков уже ушла с проблемой.
Возврат битым кодом делает хуже
Отдельная ловушка. Товар с проблемным кодом возвращают, кассир пробивает чек возврата — и в Честный Знак уходит второй некорректный документ с тем же кодом.
То есть одна ошибка удваивается: сначала продажа с битым кодом, потом возврат с ним же. Если код уже известен как проблемный, возврат надо оформлять по исправленному коду, а не по тому, что лежит в заказе. Мы это правило записали прямо в инструкцию кассиру — на память тут полагаться нельзя, чек возврата пробивают в спешке.
Если товар возвращается не вам, а на склад подрядчика, добавляется вторая половина задачи: пока единица не оприходована обратно, продавать её нельзя, а код всё это время числится за вами. Как устроен обмен возвратами со складом — в статье про фулфилмент для интернет-магазина.
Если склад чужой
Когда отгружает подрядчик, ответственность не делится: перед Честным Знаком отвечаете вы. Склад может передать неполный код, перепутать единицы или отгрузить не тот экземпляр — а вопросы будут к вам, потому что продажа ваша.
Из этого следует три вещи, которые надо обсудить с оператором до договора:
- как он передаёт коды — файлом, через интерфейс обмена или руками в письме;
- читает ли он коды сканером при сборке или переписывает;
- что происходит при пересорте: заменил единицу — прислал ли новый код.
Как выбирать оператора и что ещё должно ходить между вами автоматически, разбираю в статье про фулфилмент для интернет-магазина. Там же про остатки и статусы — маркировка лишь часть обмена.
Что автоматизировать
Ручная сверка кодов не работает: их сотни, и глазами полный код от неполного не отличить.
Автоматизировать стоит три вещи:
Проверку при приёмке кодов от склада. Каждый код проходит валидатор, неполные отбраковываются сразу, отгрузка по ним не уходит.
Журнал «код — заказ — единица». Когда возникнет спор, нужно уметь ответить, какой именно код уехал в каком заказе и когда. Без журнала это восстанавливается по переписке, то есть никак.
Сигнал живому человеку. Отбраковка должна не просто писаться в лог, а доходить до того, кто может позвонить на склад. У нас такие сообщения падают туда же, куда обращения клиентов — в общую очередь, где их видно сразу; как это устроено, писал в статье про обработку обращений клиентов.
Чек-лист перед первой отгрузкой
- В настройках кассы включён признак торговли маркированными товарами.
- Включён разрешительный режим — касса проверяет код перед пробитием.
- Код уходит в чек отдельным реквизитом; в ЛК ОФД по маркировке 100% корректных.
- Коды от склада проходят проверку полноты до отгрузки.
- Разделители приводятся к единому виду у вас, а не «как пришло».
- Есть журнал соответствия кодов заказам.
- У кассира есть письменное правило на случай возврата товара с проблемным кодом.
Маркировка не прощает «потом разберёмся»: ошибка всплывает у покупателя на кассе, когда исправлять поздно. Зато весь этот список проверок закрывается за несколько дней, а дальше работает само.
Код выбывает из оборота чеком — и про эту, вторую половину пути: два чека на один заказ, коды в финальном чеке и сверка с ОФД — в статье про чеки по 54-ФЗ.
Коротко: частые вопросы
- Почему код маркировки не проходит на кассе?
- Чаще всего потому, что код пришёл неполным: без криптографической части. Внешне он выглядит правильным, а касса отправляет его на проверку и получает отказ. Проверять полноту нужно до отгрузки, а не на кассе у покупателя.
- Куда уходит код маркировки при продаже?
- В чек отдельным реквизитом, оттуда через оператора фискальных данных — в Честный Знак. Именно этим чеком единица товара выбывает из оборота.
- Что делать, если товар с проблемным кодом вернули?
- Оформлять возврат по исправленному коду, а не по тому, что был в чеке продажи. Иначе одна ошибка удваивается: сначала продажа с битым кодом, потом возврат с ним же.