Преобразование GTIN и серийного номера маркировки для отправки на фискальный регистратор

При реализации маркированных товаров через контрольно-кассовую технику (далее ККТ)
включать код идентификации товара в состав фискального документа «кассовый чек»,
согласно формату фискальных документов, определенному ФНС России, для этого
необходимо:
• Сканировать двумерный штриховой код DataMatrix, нанесенный на упаковку,
товарный ярлык или непосредственно на маркированный товар с помощью 2D
сканера, считывающего DataMatrix (при этом важно обратить внимание на настройки
считывания кода без изменения регистра), либо ввести код идентификации вручную.
Состав данных, включаемых в код идентификации товара:
[01+XXXXXXXXXXXXXX+21+XXXXXXXXXXXXX]
Код товара
Серийный номер товара

Первая группа данных — идентификационный номер товара (Код товара), которому
предшествует идентификатор применения (01). Количество цифровых символов
составляет 14.

Вторая группа данных — индивидуальный серийный номер товара, которому
предшествует идентификатор применения (21) и который генерируется Оператором
Системы или участником оборота товара. Количество символов в цифровой или
буквенно-цифровой последовательности (латинского алфавита) составляет 13
(тринадцать). Завершающим символом для данной группы данных необходимо
использовать разделитель, имеющий код 29 в таблице символов ASCII.

Кассовое программное обеспечение должно передать информацию для
формирования тега 1162 фискального документа согласно следующему алгоритму:
1. Тип идентификатора товара
Байты [1:2] (2 байта) — Код типа маркировки
Постоянное значение: 44h 4Dh
2. Идентификатор кода товара
Байты [3:8] (6 байт) – код товара (GTIN)

Используется 14 разрядный код товара. При записи в ККТ, код товара формируется по правилам
перевода числа из десятичной системы исчисления в шестнадцатеричную систему исчисления,
дополненной лидирующими нулями (нулями слева) до 6 байт.

Серийный номер
Байты [9:21] (13 байт) – Серийный номер (Serial)
Серийный номер содержит в себе цифры, заглавные и строчные буквы латинского алфавита,
символы разделители «!”%&’()*+-.,_/:;=<>?». Формируется по правилам интерпретации ASCII в hex.
Пример формирования тега 1162
Имеем следующие данные промаркированной продукции:
Код товара (GTIN): 04630037591316
Преобразуем код товара в бинарный формат: 04 36 03 BE F5 14

В случае, если код товара менее 14 символов, его необходимо дополнить ведущими
нулями. Пример онлайн калькулятора — https://www.binaryhexconverter.com/decimalto-hex-converter.
Серийный номер (Serial): sgEKKPPcS25y5
Преобразуем в строковое значение: 73 67 45 4b 4b 50 50 63 53 32 35 79 35
Пример онлайн калькулятора — https://www.rapidtables.com/convert/number/ascii-tohex.html.

Формируем тег 1162:
Добавляем код типа маркировки: 44 4d

Формируем TLV для передачи в ККТ. Так как тег 1162 не имеет фиксированное
значение, 11 байт резерва в ККТ не передаются:
8A 04 15 00 44 4d 04 36 03 BE F5 14 73 67 45 4b 4b 50 50 63 53 32 35 79 35

Значение 8A 04 – номер тега (1162) в HEX, где младший байт идет первым, формат
LE (чтобы перевести в DEC надо читать как 04 8А)
15 00 – длина данных в HEX, где младший байт идет первым, формат LE (21 байт в
DEC)

&НаКлиенте
Процедура Преобразовать(Команда)
	   Префикс = 17485;//
    Тело = Новый ПотокВПамяти();
    ЗаписьДанных = Новый ЗаписьДанных(Тело);
    ЗаписьДанных.ЗаписатьЦелое64(Число(GTIN), ПорядокБайтов.BigEndian);
    Если Не ПустаяСтрока(СерийныйНомер) Тогда
        ЗаписьДанных.ЗаписатьСимволы(СерийныйНомер); 
    КонецЕсли;
    ЗаписьДанных.Закрыть();
    Тело.Перейти(0, ПозицияВПотоке.Начало);
    ЗаписьДанных = Новый ЗаписьДанных(Тело);
    ЗаписьДанных.ЗаписатьЦелое16(Префикс, ПорядокБайтов.BigEndian);
	ЗаписьДанных.Закрыть();
    СтрокаМаркировкиHEXДД = Тело.ЗакрытьИПолучитьДвоичныеДанные();
	СтрокаМаркировкиHEX = СтрокаМаркировкиHEXДД;
    СтрокаМаркировкиBase = Base64Строка(СтрокаМаркировкиHEXДД);
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	GTIN = "04630037591316";
	СерийныйНомер = "sgEKKPPcS25y5";
КонецПроцедуры

СтрокаМаркировкиHEX — код маркировки в таком виде отображается в ОФД. В таком же виде код отправляется на ККТ в Рознице 2.2. В Рознице 2.3 алгоритм сменили иданные на ККТ уходят зашифрованные Base64, Фискальный регистратор сам их разбирает и отправляет оператору фискальных данных.

Розн_ПреобразованиеВКодМаркировки