При работе с маркированными товарами (табак, обувь, одежда, лекарства) в форматах фискальных данных (ФФД) 1.05 и 1.1 одной из наиболее сложных задач для разработчика 1С является корректное формирование Тега 1162. Этот тег отвечает за передачу кода товарной номенклатуры в кассовый аппарат и далее в ОФД. Если тег сформирован неверно, товар не будет корректно учтен в системе «Честный ЗНАК».
В этой статье мы подробно разберем, из чего состоит Тег 1162, как его сформировать вручную и почему обновление драйвера ККТ может избавить вас от лишнего написания кода.
Прежде всего, проанализируем ситуацию: Тег 1162 представляет собой последовательность байтов, упакованную в формат Base64. Эта последовательность состоит из трех основных частей:
00 05, для обуви и других групп — 15 20, для меховых изделий — 00 02.Рассмотрим подробнее пример для табачной продукции. Допустим, мы имеем собранную HEX-строку: 0005000002C11E5E4144676f705371. Наша задача — превратить эту строковую запись в честные двоичные данные и закодировать их в Base64.
Часто разработчики допускают ошибку, пытаясь напрямую использовать функцию Base64Строка() к обычной строке с HEX-символами. Однако эта функция ожидает на вход объект типа ДвоичныеДанные. Выясним причину, по которой простые методы записи текста могут не работать: они сохраняют строковое представление цифр и букв, а не сами значения байтов.
Для корректного преобразования HEX-строки в двоичные данные в современных версиях платформы 1С 8.3 рекомендуется использовать специализированный метод. Разберем по шагам правильный подход:
// Предположим, у нас есть готовая HEX-строка
СтрокаHEX = "0005000002C11E5E4144676f705371";
// Правильный способ получения двоичных данных из HEX
ДвоичныеДанные = ПолучитьДвоичныеДанныеИзГексагональнойСтроки(СтрокаHEX);
// Теперь кодируем в Base64 для передачи в драйвер или ФР
РезультатBase64 = Base64Строка(ДвоичныеДанные);
// Ожидаемый результат: "AAUAAALBHl5BRGdvcFNx"
Если же вы работаете на более старых версиях платформы, где метод ПолучитьДвоичныеДанныеИзГексагональнойСтроки() отсутствует, можно воспользоваться потоком в памяти, как предлагали участники обсуждения, но с важной оговоркой: нужно записывать именно байты, а не текст. Однако наиболее надежным способом в 1С остается использование COMОбъект("Adodb.Stream") или посимвольное преобразование пар HEX-символов в числа и последующая сборка массива байтов.
Как показывает практика и опыт участников форума, ручное формирование Тега 1162 — это путь, полный ошибок (ошибки в дополнении нулями, неверный порядок байтов GTIN и т.д.). Современные версии драйверов (например, АТОЛ 10.х) умеют делать это самостоятельно.
Посмотрим на пример заполнения структуры GoodCodeData, которую библиотека подключаемого оборудования (БПО) передает драйверу. Вместо того чтобы «мучиться» с байтами, мы просто передаем понятные строковые параметры:
ДанныеМаркировки = Новый Структура;
ДанныеМаркировки.Вставить("StampType", "05"); // Тип: табак
ДанныеМаркировки.Вставить("GTIN", "00000046210590"); // Пример GTIN
ДанныеМаркировки.Вставить("SerialNumber", "ADgopSq"); // Серийный номер
// Драйвер версии 10 сам соберет HEX-последовательность и упакует в Base64
Важный момент: если вы используете старый драйвер (например, АТОЛ 8.15), он может не поддерживать автоматическую сборку тега для новых товарных групп. В этом случае обновление драйвера до 10-й версии является критически необходимым шагом для корректной работы с ОФД и системой «Честный ЗНАК».
Проанализируем ситуацию с учетом изменения законодательства. Тег 1162 актуален для старых форматов фискальных данных. Если ваша организация перешла на ФФД 1.2, то вместо формирования Тега 1162 используется Тег 1163 (Код товара).
В ФФД 1.2 логика работы меняется принципиально:
Подведем итоги нашего разбора. Если перед вами стоит задача сформировать Тег 1162, придерживайтесь следующего плана:
GoodCodeData и избежать ручных манипуляций с HEX.ПолучитьДвоичныеДанныеИзГексагональнойСтроки(), чтобы избежать проблем с кодировками текста.Правильный подход к формированию фискальных данных не только гарантирует отсутствие штрафов, но и значительно упрощает дальнейшую поддержку системы учета маркированного товара в вашей конфигурации 1С.