Как реализовать разрешительный режим Честного Знака в драйвере АТОЛ 10 при прямой работе из 1С

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

С внедрением разрешительного режима (РР) для маркированных товаров перед розничными продавцами встала задача не просто сканировать код маркировки (КМ), но и запрашивать разрешение на его продажу в системе «Честный Знак» в режиме реального времени. Если вы используете самописную конфигурацию или прямое подключение к драйверу ККТ АТОЛ через COM-объект (без использования БПО 1С), вам необходимо самостоятельно сформировать структуру отраслевых реквизитов в чеке. В этой статье мы подробно разберем, как передать результаты проверки КМ в драйвер ККТ АТОЛ 10 — для интеграции без БПО есть готовая обработка АТОЛ с поддержкой ФФД 1.2 и разрешительного режима.

Суть задачи и необходимые данные

Для соблюдения законодательства (Постановление Правительства РФ №1944) при продаже маркированного товара в кассовый чек должны попасть данные о проверке этого товара в ГИС МТ — для автоматизации этого процесса подойдёт готовое решение для печати чеков с поддержкой разрешительного режима. Эти данные записываются в тег 1260 (отраслевой реквизит предмета расчета), который является составным. Чтобы сформировать его правильно, нам потребуются данные, полученные от сервиса «Честный Знак» через TrueAPI.

Разберем, какие именно данные возвращает «Честный Знак» после успешной проверки кода маркировки (запрос api/v4/true-api/codes/check):

  1. reqId (UUID) — уникальный идентификатор запроса на проверку статуса кода.
  2. reqTimestamp — время обработки запроса сервером «Честного Знака» (Unix Timestamp в миллисекундах).

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

Структура отраслевых реквизитов (Теги 1262–1265)

Согласно формату фискальных документов (ФФД 1.2), тег 1260 включает в себя следующие вложенные теги:

Программная реализация в 1С

Рассмотрим пошагово, как реализовать передачу этих данных в драйвер АТОЛ версии 10.x. Для формирования составного тега 1260 мы воспользуемся методом драйвера utilFormTlv, который упаковывает параметры в байтовый массив.

Проанализируем пример кода для рабочего места кассира при регистрации позиции с разрешительным режимом:


// Предполагаем, что объект драйвера уже создан и ККТ подключена
// ECR = Новый COMОбъект("AddIn.Fptr10");

// 1. Указываем данные документа-основания (Постановление 1944)
ECR.setParam(1262, "030");
ECR.setParam(1263, "21.11.2023");
ECR.setParam(1264, "1944");

// 2. Формируем строку значения отраслевого реквизита (тег 1265)
// Данные UUID и Time берем из JSON-ответа Честного Знака
Строка1265 = "UUID=" + ОтветЧЗ_reqId + "&Time=" + ОтветЧЗ_reqTimestamp;
ECR.setParam(1265, Строка1265);

// 3. Упаковываем вложенные теги в структуру отраслевого реквизита (тег 1260)
ECR.utilFormTlv();
IndustryInfo = ECR.getParamByteArray(ECR.LIBFPTR_PARAM_TAG_VALUE);

// 4. Подготавливаем регистрацию позиции товара
ECR.setParam(ECR.LIBFPTR_PARAM_COMMODITY_NAME, "Наименование маркированного товара");
ECR.setParam(ECR.LIBFPTR_PARAM_PRICE, 100.00);
ECR.setParam(ECR.LIBFPTR_PARAM_QUANTITY, 1);
ECR.setParam(ECR.LIBFPTR_PARAM_TAX_TYPE, ECR.LIBFPTR_TAX_VAT20);
ECR.setParam(ECR.LIBFPTR_PARAM_MEASUREMENT_UNIT, ECR.LIBFPTR_IU_PIECE);

// Указываем признак предмета расчета (тег 1212)
// 31 - товар, подлежащий маркировке (без акциза), 33 - подакцизный маркированный товар
ECR.setParam(1212, 31); 

// 5. Передаем код маркировки (тег 1163)
ECR.setParam(ECR.LIBFPTR_PARAM_MARKING_CODE, ПолныйКодМаркировки);

// 6. Передаем сформированный ранее отраслевой реквизит (тег 1260)
ECR.setParam(1260, IndustryInfo);

// 7. Регистрируем позицию
ECR.registration();

Алгоритм работы кассового ПО

Выясним правильную последовательность действий при оформлении продажи в разрешительном режиме:

  1. Сканирование кода маркировки (для контроля можно использовать приложение проверки маркировки для Android).
  2. Запрос к CDN-площадке «Честного Знака» (метод codes/check).
  3. Получение ответа с reqId и reqTimestamp.
  4. Открытие чека в ККТ (openCheck).
  5. Формирование TLV-структуры для тега 1260.
  6. Регистрация позиции с передачей КМ и тега 1260.
  7. Закрытие чека (closeCheck).

Если в одном чеке продается несколько маркированных товаров, процедуру проверки и формирования индивидуального тега 1260 необходимо повторять для каждой позиции отдельно перед вызовом метода registration.

Технические требования к оборудованию

Посмотрим на требования к версиям ПО, так как на старых версиях разрешительный режим работать не будет:

Что делать при отсутствии связи?

Разберем ситуацию технического сбоя. Согласно Постановлению №1944, если ответ от информационной системы «Честный Знак» не получен в течение установленного времени (рекомендуемый таймаут 1.5 секунды), продажа может быть разрешена в офлайн-режиме. В этом случае тег 1265 заполняется по особым правилам (без UUID и Time), но теги 1262-1264 всё равно должны присутствовать в структуре отраслевого реквизита, чтобы подтвердить, на основании какого нормативного акта осуществляется оборот товара.

Помните: игнорирование записи отраслевого реквизита при продаже товаров, подпадающих под действие разрешительного режима, является нарушением правил маркировки и может привести к штрафным санкциям со стороны контролирующих органов.

← На главную