При работе с маркированными товарами в устаревших конфигурациях, таких как 1С:Розница 1.0, основной сложностью становится адаптация механизмов взаимодействия с онлайн-кассами под требования законодательства. Одной из ключевых задач является корректная передача кода маркировки в фискальный чек. Рассмотрим подробно, как реализовать передачу тега 1162 (Код товара) в драйвер касс Атол (например, моделей 11Ф или 50Ф).
Для начала проанализируем, где именно происходит формирование данных для чека. В большинстве внешних обработок обслуживания ККТ (особенно тех, что адаптированы под требования 54-ФЗ) за регистрацию каждой позиции отвечает экспортная функция. Обычно она называется РегистрацияПозицииВККМ. Нам необходимо найти фрагмент кода, где устанавливаются параметры предмета расчета (теги 1212 и 1214) и вызывается метод регистрации.
Типичная структура кода в этой функции выглядит следующим образом:
// Установка признака предмета расчета (тег 1212)
Объект.Драйвер.setParam(1212, ?(ЗначениеЗаполнено(ПредметРасчета), ПредметРасчета, 1));
// Установка признака способа расчета (тег 1214)
Объект.Драйвер.setParam(1214, ?(ЗначениеЗаполнено(СпособРасчета), СпособРасчета, 4));
// Регистрация цены, количества и наименования
Объект.Драйвер.setParam(Объект.Драйвер.LIBFPTR_PARAM_COMMODITY_NAME, Наименование);
Объект.Драйвер.setParam(Объект.Драйвер.LIBFPTR_PARAM_PRICE, Цена);
Объект.Драйвер.setParam(Объект.Драйвер.LIBFPTR_PARAM_QUANTITY, Количество);
Если ваша касса работает в формате фискальных данных ФФД 1.05, код маркировки передается напрямую как атрибут. Рассмотрим пример кода, который необходимо вставить перед командой фиксации позиции в чеке:
// Указываем номер тега 1162
Объект.Драйвер.AttrNumber = 1162;
// Передаем значение считанного кода маркировки
Объект.Драйвер.AttrValue = "КодМаркировки";
// Записываем атрибут в текущую позицию
Объект.Драйвер.WriteAttribute();
Разберем по шагам: свойство AttrNumber сообщает драйверу, какой именно тег мы собираемся заполнить. Свойство AttrValue принимает строковое значение кода маркировки (DataMatrix). Метод WriteAttribute() фиксирует эти данные. Важно помнить, что этот блок кода должен выполняться для каждой строки чека, содержащей маркированный товар.
Современные драйверы Атол ДТО 10 чаще используют метод setParam для передачи всех реквизитов. Проанализируем ситуацию: если в вашей обработке уже используются константы типа LIBFPTR_PARAM_..., то логичнее использовать этот же синтаксис для маркировки. Код будет выглядеть так:
// Использование прямой нумерации тега в методе setParam
Объект.Драйвер.setParam(1162, "КодМаркировки");
Или, если вы используете программные константы драйвера для ФФД 1.2 (что более правильно для новых прошивок):
// Установка сырого кода маркировки для ФФД 1.2
Объект.Драйвер.setParam(Объект.Драйвер.LIBFPTR_PARAM_MARKING_CODE_RAW, "КодМаркировки");
Выясним важную техническую деталь: в некоторых случаях касса может не принимать обычную строку DataMatrix. Для ФФД 1.05 требования к тегу 1162 подразумевают передачу данных в байтовом виде, часто предваряемых кодом типа маркировки (например, для обуви это 44 4D). Если при передаче обычной строки касса выдает ошибку "Некорректный формат параметров", значит, код маркировки нужно предварительно преобразовать в HEX-последовательность.
В старых версиях драйверов Атол требовалось передавать именно шестнадцатеричное представление байтов. Однако в большинстве актуальных релизов 10-й версии драйвер берет на себя конвертацию, если вы используете правильные методы установки параметров.
Проанализируем ситуацию с переходом на ФФД 1.2. Если ваша касса и фискальный накопитель поддерживают этот формат, простой передачи тега 1162 недостаточно. Согласно новым правилам, перед печатью чека необходимо выполнить процедуру проверки кода маркировки через ФН (запрос в систему "Честный знак").
В коде это реализуется через блок методов:
beginMarkingCodeCheck — начало проверки.getMarkingCodeCheckStatus — получение результата.finishMarkingCodeCheck — завершение и фиксация статуса в чеке.Если вы пропустите этот этап в ФФД 1.2, в чеке вместо заветного признака [М+] вы получите ошибку или некорректный статус, что может привести к штрафам со стороны контролирующих органов.
Выясним причину, по которой код может не уходить в ОФД, даже если код в 1С написан верно. Для работы с маркировкой кассы Атол 50Ф и 11Ф должны быть переведены на современную платформу 5.0. Старые прошивки (платформа 2.5) имеют существенные ограничения в работе с тегами маркировки. Если ваша касса давно не обновлялась, выполнение программного кода WriteAttribute() может просто игнорироваться драйвером или ККТ.
Важный совет: При сканировании кода DataMatrix сканером в режиме эмуляции клавиатуры часто теряются управляющие символы (например, префикс GS). Для стабильной работы рекомендуется перевести сканер в режим COM-порта (Native API), чтобы 1С получала "чистый" код без искажений.
Подведем итог: для реализации маркировки в 1С:Розница 1.0 нам нужно внедрить блок передачи атрибута 1162 в функцию РегистрацияПозицииВККМ, убедиться в правильности формата передаваемой строки и проверить актуальность прошивки вашей кассовой техники.