С введением обязательной маркировки обуви, табака и других групп товаров перед разработчиками встала задача корректной передачи кода идентификации в фискальный накопитель. В ККТ «Штрих-М» этот процесс имеет свои особенности, связанные с версиями прошивок, драйверов и используемыми методами API. Рассмотрим подробно, как реализовать передачу тега 1162 (код товара) в различных ситуациях.
Этот метод является наиболее предпочтительным для новых версий драйверов (начиная с 4.14.792 и выше). Он позволяет передать составные части кода маркировки, а драйвер самостоятельно сформирует структуру тега 1162. Проанализируем основные параметры, которые необходимо заполнить перед вызовом метода:
17485 (в десятичном формате), что соответствует 444D в шестнадцатеричном (hex).Посмотрим на пример реализации кода для вызова этого метода:
// Настройка параметров перед продажей позиции
Драйвер.MarkingType = 17485; // Единый тип маркировки 444D
Драйвер.GTIN = "00000046199737"; // Пример GTIN
Драйвер.SerialNumber = "ic8kvjr"; // Пример серийного номера
Драйвер.FNSendItemCodeData(); // Передача данных в ККТ
// Далее следует стандартная операция регистрации позиции
Драйвер.Quantity = 1;
Драйвер.Price = 100;
Драйвер.Department = 1;
Драйвер.Tax1 = 0;
Драйвер.StringForPrinting = "Ботинки мужские";
Драйвер.FNOperation();
Важный нюанс: Метод FNSendItemCodeData необходимо вызывать до или после метода FNOperation в зависимости от логики формирования чека в вашей конфигурации, но строго до закрытия чека. В современных реализациях на прошивках от 2020 года метод корректно отрабатывает сразу после регистрации позиции.
В некоторых случаях (например, на старых прошивках или при необходимости передать специфические данные) метод 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 тег 1162 заменяется более сложной процедурой проверки кода маркировки через ФН (запросы MROperation). Однако для тех, кто продолжает работать на ФФД 1.05 или 1.1, важно помнить о едином типе маркировки. Ранее для обуви использовался код 1520 (hex), для табака — 0005. Теперь Честный Знак и ФНС требуют использования 444D для всех новых групп товаров.
Важный совет: Проверьте наличие платной лицензии на маркировку в вашей ККТ. В последних прошивках «Штрих-М» блокирует передачу тега 1162, если в кассе не активирована соответствующая подписка (лицензия «Маркировка»). В этом случае методы будут возвращать ResultCode = 0, но в ОФД данные не уйдут, и буква [M] на чеке не появится.
Если вы работаете в типовых конфигурациях (Розница, УТ 10.3, КА), выясним причину возможных ошибок при печати чека. Часто проблема кроется в устаревшей интеграционной компоненте, которая зашита в макет обработки обслуживания.
Рассмотрим порядок действий для обновления:
C:\Program Files (x86)\SHTRIH-M\) архив с интеграционной компонентой shtrih-m_32.zip.SMDrvFR1C22 (стандарт 2.2) перейдите на SMDrvFR1C3 (стандарт 3.0 и выше).Это позволит платформе 1С передавать полный код маркировки в виде атрибута MarkingCode, который касса сможет обработать самостоятельно, не требуя от программиста ручного парсинга GTIN и серийного номера.
Таким образом, мы рассмотрели основные способы реализации передачи тега 1162. Для современных систем рекомендуем использовать метод 1 с актуальным драйвером и лицензией. Для поддержки устаревшего оборудования или специфических задач — метод 2 с ручным формированием TLV-пакета.