|
Передача и печать тегов при пробитии чека | ☑ | ||
---|---|---|---|---|
0
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(); Но тоже никакой реакции. Может кто сталкивался и может подсказать как напечатать эти теги в чеке? |
|||
1
Ivan Bezdomnyi
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: Сообщить("Не удалось установить наименование поставщика"); Возврат Ложь; КонецЕсли; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |