Каталог решений - Маркировка табака. Формирование тега 1162 "код товара" для передачи в ККТ и ОФД

Маркировка табака. Формирование тега 1162 "код товара" для передачи в ККТ и ОФД

Маркировка табака. Формирование тега 1162 "код товара" для передачи в ККТ и ОФД

В наличии

С 01.07.2019 стартует новый этап маркировки сигарет. Теперь в кассе обязательно надо будет считывать марку с пачек табака, если она там есть. Считывать и передавать в ОФД через тег 1162 в онлайн-кассе. А как сформировать данные этого тега? Не все так просто…

Категория:

Описание

Марка на табак — это последовательность символов. Например "00000046186195Xp4k=xyAQDPtFEa". Это штрихкод марки.

А передать в тег 1162 нужно байтовый массив. Описано тут: https://xn--80ajghhoc2aj1c8b.xn--p1ai/upload/iblock/784/Algoritm_zapisi_tega_1162_tabachnoy_produktsii.pdf

Предлагаю свой вариант, как это сделать средствами 1С:

Функция ПолучитьКодДляПередачиТега1162(ШтрихкодМарки)

    //В штрихкоде марки нас интересуют первые 14 символов  - GTIN и вторые 7  - серия

    ГТИН   = Лев(ШтрихкодМарки,14);
    Серия  = Сред(ШтрихкодМарки,15,7);
    
    //GTIN преобразуем в число, получаем строку байтов (HEX на самом деле), добиваем до 6 байтов
    
    Попытка
        ГТИНЧислом  = Число(ГТИН);
        ГТИНБайтами = "";
        Пока ГТИНЧислом > 0 Цикл
              ГТИНБайтами = Сред("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", ГТИНЧислом%16 + 1, 1) + ГТИНБайтами;
              ГТИНЧислом = Цел(ГТИНЧислом/16) ;
           КонецЦикла;
    Исключение
        Возврат "";
    Конецпопытки;    
    
    Пока СтрДлина(ГТИНБайтами)<12 Цикл
        ГТИНБайтами = "0"+ГТИНБайтами;
    КонецЦикла;    
        
    //Серию преобразуем в байты посимвольно старым методом - через временный файл
    
    ИмяФ = ПолучитьИмяВременногоФайла("txt");
    Т = Новый ТекстовыйДокумент();
    Т.УстановитьТекст(Серия);
    Т.Записать(ИмяФ,КодировкаТекста.ANSI);
    ДД = Новый ДвоичныеДанные(ИмяФ);
    СерияБайтами = Строка(ДД);
    СерияБайтами = СтрЗаменить(СерияБайтами," ","");
    УдалитьФайлы(ИмяФ);
    
    //Формируем код товара для передачи. 0005 это код типа маркрировки - "табак".
    
    мбКодТовара    = "0005"+ГТИНБайтами+СерияБайтами;
    ВрКодТовара    = мбКодТовара;    


    МассивБайт  = "";
    
    Пока СтрДлина(мбКодТовара)>0 Цикл
        
        МассивБайт = МассивБайт+" "+Лев(мбКодТовара,2);
        мбКодТовара = Сред(мбКодТовара,3);
                
    КонецЦикла;    
    

    //Все!!! Вот эту строку с "массивом байт" можно передавать в тег 1162 в ККТ
    Возврат СокрЛП(МассивБайт);

    
 Но если интересно, покажу дальше, как сделать из строки двоичные данные, а из них BASE64

 Ведь именно это мы увидим в личном кабинете ОФД….   

мбКодТовара = ВрКодТовара;

     //Получаем из строки байтов двоичные данные
    
    Попытка
        ТипhexBinary    = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "hexBinary"); 
        ДвоичныеДанные      = ФабрикаXDTO.Создать(ТипhexBinary,мбКодТовара);
    Исключение
        Возврат "";
    КонецПопытки;    
    
    //Кодируем их в BASE64
    
    Попытка
        СтрКод = Base64Строка(ДвоичныеДанные.Значение);
    Исключение
        Возврат "";
    КонецПопытки;        
    
    Возврат СтрКод;
    
КонецФункции

 

has been added to your cart:
Оформление заказа