Как сформировать Тег 1162 (Код товарной номенклатуры) для передачи в ККТ из 1С

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

При работе с маркированными товарами (табак, обувь, одежда, лекарства) в форматах фискальных данных (ФФД) 1.05 и 1.1 одной из наиболее сложных задач для разработчика 1С является корректное формирование Тега 1162. Этот тег отвечает за передачу кода товарной номенклатуры в кассовый аппарат и далее в ОФД. Если тег сформирован неверно, товар не будет корректно учтен в системе «Честный ЗНАК».

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

Структура Тега 1162 и алгоритм ручного формирования

Прежде всего, проанализируем ситуацию: Тег 1162 представляет собой последовательность байтов, упакованную в формат Base64. Эта последовательность состоит из трех основных частей:

  1. Идентификатор типа маркировки: первые 2 байта. Например, для табака это 00 05, для обуви и других групп — 15 20, для меховых изделий — 00 02.
  2. Данные GTIN: 6 байт. Здесь кроется основная сложность — 14-значный цифровой код GTIN должен быть преобразован в 48-битное целое число и записан в шестнадцатеричном виде (HEX).
  3. Серийный номер: оставшаяся часть байтов, представляющая собой символы серийного номера в кодировке ASCII.

Рассмотрим подробнее пример для табачной продукции. Допустим, мы имеем собранную HEX-строку: 0005000002C11E5E4144676f705371. Наша задача — превратить эту строковую запись в честные двоичные данные и закодировать их в Base64.

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

Часто разработчики допускают ошибку, пытаясь напрямую использовать функцию 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-й версии является критически необходимым шагом для корректной работы с ОФД и системой «Честный ЗНАК».

Переход на ФФД 1.2 и Тег 1163

Проанализируем ситуацию с учетом изменения законодательства. Тег 1162 актуален для старых форматов фискальных данных. Если ваша организация перешла на ФФД 1.2, то вместо формирования Тега 1162 используется Тег 1163 (Код товара).

В ФФД 1.2 логика работы меняется принципиально:

Резюме и практические советы

Подведем итоги нашего разбора. Если перед вами стоит задача сформировать Тег 1162, придерживайтесь следующего плана:

  1. Проверьте версию драйвера: Если у вас АТОЛ 8.х или старый драйвер Штрих-М, обновите их до актуальных версий (АТОЛ 10.х). Это позволит использовать структуру GoodCodeData и избежать ручных манипуляций с HEX.
  2. Используйте штатные средства платформы: При необходимости ручного кодирования всегда используйте ПолучитьДвоичныеДанныеИзГексагональнойСтроки(), чтобы избежать проблем с кодировками текста.
  3. Контролируйте GTIN: Помните, что GTIN в Теге 1162 занимает ровно 6 байт. Если ваше число получается короче, оно должно быть дополнено лидирующими нулями.
  4. Проверяйте результат в ОФД: После пробития чека обязательно зайдите в личный кабинет ОФД. Если вместо названия товара или признака [М] вы видите длинную непонятную строку — значит, Base64 был сформирован неверно.

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

← На главную