При работе с маркированным товарами, особенно с табачной продукцией, пользователи часто сталкиваются с ситуацией, когда предварительная проверка марки в интерфейсе 1С проходит успешно (горят зеленые индикаторы), но в момент пробития чека кассовый аппарат выдает ошибку «Отсутствует полный код маркировки». Эта проблема стала массовой после перехода на формат фискальных данных ФФД 1.2 и введения разрешительного режима (решается через настройка онлайн-касс под разрешительный режим), который предусматривает проверку QR марок Честного знака. Рассмотрим детально, почему это происходит и как настроить систему для корректной работы.
Прежде всего, проанализируем ситуацию: почему молочная продукция или вода могут пробиваться без проблем, а сигареты вызывают ошибку? Разберем основные технические факторы:
Первым делом проанализируем версию программы. Работа с маркировкой в 2024 году требует актуальных релизов. Выясним, какая версия установлена у вас. Если это релиз ниже 2.3.19, полноценная работа с разрешительным режимом и корректная передача кодов в ККТ не гарантируется. Обновите 1С:Розница до актуального состояния.
Параллельно с обновлением программы необходимо обновить драйвер ККТ. Для касс АТОЛ рекомендуемая версия драйвера — 10.10.0.0 и выше — для этого подойдёт обслуживание ККТ АТОЛ и ШТРИХ-М для маркировки. Проверим также прошивку самой кассы: для ФФД 1.2 на платформе 5.0 версия прошивки должна поддерживать последние изменения законодательства по маркировке.
Одной из скрытых причин ошибки является отсутствие связи между штрихкодом (GTIN) и категорией маркируемой продукции в системных регистрах. Рассмотрим, как это исправить. Нам необходимо убедиться, что для каждого GTIN сигарет в базе создана запись, определяющая его как табачную продукцию, что важно для сопоставления марок табачной продукции с позицией номенклатуры. Для получения карточек товаров по GTIN и информации по кодам марок из Честного знака можно использовать специализированные обработки.
Перейдем в функции для технического специалиста и найдем регистр сведений ОписаниеGTINИС (в некоторых редакциях он может называться «Параметры штрихкодов упаковок»). Выполним следующие действия:
Это позволит 1С правильно сформировать структуру данных для передачи в драйвер ККТ, включая корректное заполнение тега 2108 (мера количества предмета расчета).
Посмотрим на пример из практики: иногда в справочнике Штрихкоды упаковок и товаров сохраняются усеченные коды. Если в базе записан только короткий код вида (01)GTIN(21)Serial, то при пробитии чека касса не получит криптохвост и выдаст ошибку отсутствия полного кода.
Проанализируем структуру кода. Полный код табачной марки выглядит примерно так:
(01)04680161068208(21)5n-C-XXh_OpDg91EE0992OxM1ukgrv0FvRMALP8geBSYtn3OST39FpRshcUlG++I=
Если в вашей базе хранятся только первые 21-31 символ, это и есть причина проблемы. Выясним, почему код сохраняется не полностью. Чаще всего это связано с настройками сканера штрихкода.
Разберем важный технический нюанс: сканер должен быть настроен в режиме COM-порта (эмуляция USB-COM), а не в режиме клавиатуры. При работе в режиме клавиатуры спецсимволы-разделители (GS1), которые отделяют блоки данных в марке, могут игнорироваться или заменяться пробелами.
Проанализируем ситуацию в «Тесте драйвера ККТ» или в блокноте: если при сканировании марки вы видите только часть символов или отсутствие спецсимволов в начале блоков (91, 92), сканер настроен неверно. Настройте сканер так, чтобы он передавал полный префикс и все скрытые символы. Примеры реализации работы сканера штрихкода через БПО могут помочь в этом, обеспечивая корректную передачу данных. Это критично для табака, так как ККТ при ФФД 1.2 выполняет жесткую валидацию структуры DataMatrix.
В настройках интеграции с маркировкой (раздел Администрирование — Настройки ИС МП) найдем пункт «Проверять коды маркировки средствами ККТ». Посмотрим, как ведет себя система при разных положениях этого флага:
Если вы обладаете навыками программирования, проанализируем, какой XML-пакет формирует 1С для драйвера ККТ. В модулях интеграции с оборудованием можно найти место формирования структуры GoodCodeData. Посмотрим на упрощенный пример того, как должны передаваться данные:
// Пример структуры для передачи в драйвер ККТ (упрощенно)
ДанныеКода = Новый Структура;
ДанныеКода.Вставить("MarkingCode", ПолныйКодИзСканера); // Здесь должен быть весь код с хвостом
ДанныеКода.Вставить("RealizationAttribute", 1); // Признак реализации
// Если в MarkingCode попадает обрезанная строка, ККТ выдаст "Отсутствует полный код"
Результат = ОбъектДрайвера.СформироватьЧек(ПараметрыЧека, ДанныеКода);
Убедитесь через отладку, что переменная, содержащая код маркировки, на этапе передачи в драйвер содержит все символы, включая криптографическую часть после тегов 91 и 92.
Подведем итог нашим действиям. Если вы столкнулись с ошибкой «Отсутствует полный код маркировки» на табаке:
Соблюдение этих шагов позволит восстановить нормальную торговлю табачными изделиями в соответствии с требованиями законодательства 2024 года.