Как правильно передавать тег 1162 (маркировка товара) в ККТ Штрих-М

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

С введением обязательной маркировки обуви, табака и других групп товаров перед разработчиками встала задача корректной передачи кода идентификации в фискальный накопитель. В ККТ «Штрих-М» этот процесс имеет свои особенности, связанные с версиями прошивок, драйверов и используемыми методами API. Рассмотрим подробно, как реализовать передачу тега 1162 (код товара) в различных ситуациях.

Метод 1: Использование высокоуровневой функции FNSendItemCodeData

Этот метод является наиболее предпочтительным для новых версий драйверов (начиная с 4.14.792 и выше). Он позволяет передать составные части кода маркировки, а драйвер самостоятельно сформирует структуру тега 1162. Проанализируем основные параметры, которые необходимо заполнить перед вызовом метода:

Посмотрим на пример реализации кода для вызова этого метода:


// Настройка параметров перед продажей позиции
Драйвер.MarkingType = 17485; // Единый тип маркировки 444D
Драйвер.GTIN = "00000046199737"; // Пример GTIN
Драйвер.SerialNumber = "ic8kvjr"; // Пример серийного номера
Драйвер.FNSendItemCodeData(); // Передача данных в ККТ

// Далее следует стандартная операция регистрации позиции
Драйвер.Quantity = 1;
Драйвер.Price = 100;
Драйвер.Department = 1;
Драйвер.Tax1 = 0;
Драйвер.StringForPrinting = "Ботинки мужские";
Драйвер.FNOperation();

Важный нюанс: Метод FNSendItemCodeData необходимо вызывать до или после метода FNOperation в зависимости от логики формирования чека в вашей конфигурации, но строго до закрытия чека. В современных реализациях на прошивках от 2020 года метод корректно отрабатывает сразу после регистрации позиции.

Метод 2: Ручное формирование TLV-структуры через FNSendTLVOperation

В некоторых случаях (например, на старых прошивках или при необходимости передать специфические данные) метод FNSendItemCodeData может не срабатывать. Тогда мы можем использовать низкоуровневую команду FNSendTLVOperation, передав в нее полностью сформированный байтовый массив тега 1162 в формате HEX. Разберем по шагам, как сформировать значение для свойства TLVDataHex.

Структура тега 1162 для маркированного товара выглядит так: [Номер тега (8A 04)] + [Длина данных] + [Тип маркировки] + [GTIN] + [Серийный номер].

Ниже приведены вспомогательные функции для формирования этой строки на языке 1С:


Функция ПолучитьЗначениеТэга1162(Знач КодМаркировки)
    // Извлекаем GTIN (обычно с 3 по 16 символ в DataMatrix)
    ГТИН = Сред(КодМаркировки, 3, 14);
    // Извлекаем серийный номер (обычно после 18 символа)
    СерийныйНомер = Сред(КодМаркировки, 19, 13);
    
    СерийныйНомерХекс = "";
    Для сч = 1 По СтрДлина(СерийныйНомер) Цикл
        СерийныйНомерХекс = СерийныйНомерХекс + DecToHex(КодСимвола(СерийныйНомер, сч), 2);
    КонецЦикла;
    
    // 444D - префикс для единого типа маркировки
    Возврат "444D" + DecToHex(ГТИН, 12) + СерийныйНомерХекс;
КонецФункции

Процедура ЗаписатьТэг1162НаПозицию(ФР, ЗначениеТэга_hex)
    НомерТэга_hex = "8A04"; // Тег 1162 в обратном порядке байт для TLV
    ДлинаТэга_hex = ПолучитьБайтыВОбратномПорядке(DecToHex(Окр(СтрДлина(ЗначениеТэга_hex)/2), 4));
    
    ФР.TLVDataHex = НомерТэга_hex + ДлинаТэга_hex + ЗначениеТэга_hex;
    ФР.FNSendTLVOperation();
КонецПроцедуры

Разберем алгоритм: мы переводим GTIN и серийный номер в HEX-строку, добавляем единый префикс 444D и отправляем в драйвер. Это позволяет кассе «понимать» код маркировки даже в тех случаях, когда автоматические методы драйвера дают сбой.

Особенности перехода на ФФД 1.2 и новые типы маркировки

Проанализируем ситуацию с изменением законодательства. С переходом на ФФД 1.2 тег 1162 заменяется более сложной процедурой проверки кода маркировки через ФН (запросы MROperation). Однако для тех, кто продолжает работать на ФФД 1.05 или 1.1, важно помнить о едином типе маркировки. Ранее для обуви использовался код 1520 (hex), для табака — 0005. Теперь Честный Знак и ФНС требуют использования 444D для всех новых групп товаров.

Важный совет: Проверьте наличие платной лицензии на маркировку в вашей ККТ. В последних прошивках «Штрих-М» блокирует передачу тега 1162, если в кассе не активирована соответствующая подписка (лицензия «Маркировка»). В этом случае методы будут возвращать ResultCode = 0, но в ОФД данные не уйдут, и буква [M] на чеке не появится.

Обновление интеграционной компоненты в 1С

Если вы работаете в типовых конфигурациях (Розница, УТ 10.3, КА), выясним причину возможных ошибок при печати чека. Часто проблема кроется в устаревшей интеграционной компоненте, которая зашита в макет обработки обслуживания.

Рассмотрим порядок действий для обновления:

  1. Установите последнюю версию драйвера «Штрих-М» (например, 4.15 или 5.16).
  2. Найдите в папке установки драйвера (обычно C:\Program Files (x86)\SHTRIH-M\) архив с интеграционной компонентой shtrih-m_32.zip.
  3. Загрузите этот архив в макет вашей обработки обслуживания в 1С.
  4. В коде инициализации драйвера замените использование старого стандарта на новый. Вместо SMDrvFR1C22 (стандарт 2.2) перейдите на SMDrvFR1C3 (стандарт 3.0 и выше).

Это позволит платформе 1С передавать полный код маркировки в виде атрибута MarkingCode, который касса сможет обработать самостоятельно, не требуя от программиста ручного парсинга GTIN и серийного номера.

Таким образом, мы рассмотрели основные способы реализации передачи тега 1162. Для современных систем рекомендуем использовать метод 1 с актуальным драйвером и лицензией. Для поддержки устаревшего оборудования или специфических задач — метод 2 с ручным формированием TLV-пакета.

← На главную