Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Передача и печать тегов при пробитии чека

Передача и печать тегов при пробитии чека
Я
   Ivan Bezdomnyi
 
03.07.20 - 12:02
Доброго времени суток.
Имеется самописная конфигурация (обычные формы). Упрощенное пробитие чека выглядит так:

    ЗагрузитьВнешнююКомпоненту("DrvFR.dll");
    FR = Новый COMОбъект("AddIn.DrvFR");
    FR.Password = 30;
    FR.ComNumber = НомерКомПорта;
    FR.Connect();
    FR.CheckType = 0;
    FR.OpenCheck();
    FR.TaxType = 8;
    FR.Tax1 = 0;
    FR.PaymentItemSign = 4; //Услуга
    FR.Quantity = 1;
    FR.Price = Наличными;
    FR.Department = 1;
    FR.StringForPrinting = "Страхование";
    FR.Password = 30;
    FR.FNOperation();
    FR.Summ1 = Наличными;
    FR.Summ2 = 0;
    FR.Summ4 = 0;
    FR.Summ5 = 0;
    FR.FNCloseCheckEx();

Например с тегами 1227 (Наименование клиента) и 1228 (ИНН клиента) проблем нет. Они передаются и печатаются в чеке если перед FR.FNCloseCheckEx() вставить:
    FR.TagNumber = 1227;
    FR.TagType = 7;
    FR.TagValueStr = Клиент;
    FR.FNSendTag();
    FR.StringForPrinting = "";
    FR.TagNumber = 1228;
    FR.TagType = 7;
    FR.TagValueStr = ИННКлиента;
    FR.FNSendTag();
    FR.StringForPrinting = "";

Но вот с остальными тегами проблема, никак не передаются и не печатаются.
Нужны:
- Признак агента по предмету расчета
- Наименование поставщика
- ИНН поставщика
- Телефон поставщика

Пробовал аналогично:
    FR.TagNumber = 1222;
    FR.TagType = 1; // ttByte
    FR.TagValueInt = 64;
    FR.FNSendTagOperation();        
    FR.StringForPrinting = "";
    FR.TagNumber = 1057;
    FR.TagType = 1; // ttByte
    FR.TagValueInt = 64;
    FR.FNSendTag();        
    FR.StringForPrinting = "";
    FR.TagNumber = 1225;
    FR.TagType = 7;
    FR.TagValueStr = Страховая;
    FR.FNSendTag();
    FR.StringForPrinting = "";
    FR.TagNumber = 1226;
    FR.TagType = 7;
    FR.TagValueStr = ИННСтраховой;
    FR.FNSendTag();
    FR.StringForPrinting = "";
    FR.TagNumber = 1171;
    FR.TagType = 7;
    FR.TagValueStr = ТелефонСтраховой;
    FR.FNSendTag();
    FR.StringForPrinting = "";

Реакции никакой. Затем в документации «Штрих-М: Драйвер ККТ» нашел метод FNBeginSTLVTag - Начинает формирование тега STLV (Тег, включающий в себя другие вложенные теги).
И исходя из таблицы с итс https://its.1c.ru/db/kkt#content:159:hdoc пробовал вот так:
    //1059
    FR.TagNumber = 1059;
    FR.FNBeginSTLVTag();
    TagID_1059 = FR.TagID;
    //
    FR.TagID = TagID_1059;
    FR.TagNumber = 1222;
    FR.TagType = 1;
    FR.TagValueInt = 64;
    FR.FNAddTag();
    //
    FR.TagID = TagID_1059;
    FR.TagNumber = 1226;
    FR.TagType = 7;
    FR.TagValueStr = ИННСтраховой;
    FR.FNAddTag();        
    //
    //1224
    FR.TagID = TagID_1059;
    FR.TagNumber = 1224;
    FR.FNBeginSTLVTag();
    TagID_1224 = FR.TagID;
    //
    FR.TagID = TagID_1224;
    FR.TagNumber = 1171;
    FR.TagType = 7;
    FR.TagValueStr = ТелефонСтраховой;
    FR.FNAddTag();
    //
    FR.TagID = TagID_1224;
    FR.TagNumber = 1225;
    FR.TagType = 7;
    FR.TagValueStr = Страховая;
    FR.FNAddTag();
    //
    FR.FNSendSTLVTag();    

Но тоже никакой реакции. Может кто сталкивался и может подсказать как напечатать эти теги в чеке?
   Ivan Bezdomnyi
 
1 - 07.07.20 - 12:08
ап
   Чё
 
2 - 14.07.20 - 18:38
День добрый!
Попробуй вместо вызова:
FR.FNSendSTLVTag();  
использовать:
FR.FNSendSTLVTagOperation();  
т.к. составной тег 1224 относится к строковой части чека
   Сияющий в темноте
 
3 - 14.07.20 - 23:56
А кто будет ошибки выполнения команд анализировать?
   Чё
 
4 - 15.07.20 - 11:45
Вот пример работающего в моем случае кода:
//функция записи STLV тега

Функция ЗаписатьSTLVТег(глФР,Пароль,НомерСоставногоТега,ТЗЗначенийВнутреннихТегов,ЭтоОперация) Экспорт
    Если ТЗЗначенийВнутреннихТегов.Количество()=0 тогда//если таблица вложенных тегов пуста

        Возврат Ложь;
    КонецЕсли;
    глФР.Password = Пароль;
    глФР.TagNumber = НомерСоставногоТега;
    TagID = глФР.FNBeginSTLVTag();//начало ввода составного тега

    
    Для Каждого Стр Из ТЗЗначенийВнутреннихТегов Цикл
        НомерТега = Стр.НомерТега;
        ТипТега = Стр.ТипТега; 
        ЗначениеТега = Стр.ЗначениеТега;
        глФР.TagID = TagID;
        глФР.TagNumber = НомерТега;
        глФР.TagType = ТипТега;
        Если ТипТега = 0 Тогда// ttByte

            глФР.TagValueInt = ЗначениеТега;
        ИначеЕсли ТипТега = 1 Тогда// ttUint16

            глФР.TagValueInt = ЗначениеТега;
        ИначеЕсли ТипТега = 2 Тогда// ttUint32

            глФР.TagValueInt = ЗначениеТега;
        ИначеЕсли ТипТега = 3 Тогда// ttVLN

            глФР.TagValueBin = ЗначениеТега; 
        ИначеЕсли ТипТега = 4 Тогда// ttFVLN

            глФР.TagValueFVLN = ЗначениеТега;
        ИначеЕсли ТипТега = 5 Тогда// ttBitMask

            глФР.TagValueBin = ЗначениеТега;
        ИначеЕсли ТипТега = 6 Тогда// ttUnixTime 

            глФР.TagValueDateTime = ЗначениеТега;
        ИначеЕсли ТипТега = 7 Тогда// ttString

            глФР.TagValueStr = ЗначениеТега;
        КонецЕсли;
        глФР.FNAddTag();
    КонецЦикла;
    //если это составной тег строки чека то ЭтоОперация = Истина, если В общие реквизиты ЭтоОперация = Ложь 

    Если ЭтоОперация Тогда
        глФР.FNSendSTLVTagOperation();
    Иначе
        глФР.FNSendSTLVTag();
    КонецЕсли;    
    
    Если глФР.ResultCode <> 0 Тогда
        ОписаниеРезультата = ПолучитьОписаниеРезультата(глФР);
        Сообщить("Ошибка записи STLV тега: " + СокрЛП(НомерСоставногоТега) + " - " + ОписаниеРезультата);
        Сообщить(глФР.ResultCode);
        Возврат Ложь;    //неудача

    КонецЕсли;
    
    Возврат Истина;       
КонецФункции

//подготовка данных для STLV тега и вызов функции записи тега

                            ТЗЗначенийВнутреннихТегов  = Новый ТаблицаЗначений;
                            ТЗЗначенийВнутреннихТегов.Колонки.Добавить("НомерТега");
                            ТЗЗначенийВнутреннихТегов.Колонки.Добавить("ТипТега");
                            ТЗЗначенийВнутреннихТегов.Колонки.Добавить("ЗначениеТега");

                            Стр = ТЗЗначенийВнутреннихТегов.Добавить();
                            Стр.НомерТега = 1171;//телефон поставщика

                            Стр.ТипТега = 7;
                            Стр.ЗначениеТега = СокрЛП(ПараметрыЧека.ТелефонПоставщика1171);
                            
                            Стр = ТЗЗначенийВнутреннихТегов.Добавить();
                            Стр.НомерТега = 1225;//наименование поставщика

                            Стр.ТипТега = 7;
                            Стр.ЗначениеТега = текНаименованиеАгента;
                            
                            Если не ЗаписатьSTLVТег(фр, 30, 1224, ТЗЗначенийВнутреннихТегов, Истина) Тогда//передаем тэг 1224: 

                                Сообщить("Не удалось установить наименование поставщика");
                                Возврат Ложь;
                            КонецЕсли;

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.