|
v7: продажа сигарет ДТО 8.16 | ☑ | ||
---|---|---|---|---|
0
jh77
25.09.20
✎
01:19
|
Добрый день.
ККТ Атол55Ф, была прошивка 10-8346 чек продажи сигарет формируется (на чеке выводилось КТ: и т.д.) обновили прошивку на 12-8541 чек продажи сигарет не формируется, выдаеш ошибку, не верная длина реквизита 1162 Ниже код формирования позиции чека и вспомогательные функции Подскажите почему у меня не получается сформировать чек? Документ.ВыбратьСтроки(); Пока Документ.ПолучитьСтроку() = 1 Цикл Объект.НачатьПозицию(); Объект.Price=Документ.Цена; Объект.Quantity=Документ.Количество; Объект.Summ=Документ.Сумма; Объект.TaxTypeNumber=4; Объект.ItemType=2; Объект.Department=1; Объект.PaymentMode=4; Объект.Name=СокрЛП(Документ.Товар.НаименованиеКасса); ТипаМарка=СокрЛП(Документ.Марка); //ТипаМарка - код пачки сигарет, считанный сканером ТипаГТИН=сред(ТипаМарка,1,14); ТипаСериал=сред(ТипаМарка,15,7); ТипаЦена=Сред(ТипаМарка,22,4); МаркировкаГруппа=ТипаГТИН; МаркировкаЭкземпляр=ТипаСериал+ТипаЦена; Для й = 1 по 13-СтрДлина(МаркировкаЭкземпляр) Цикл МаркировкаЭкземпляр=МаркировкаЭкземпляр + " "; КонецЦикла; ТипМарки=5.1; ДлинаСериала=СтрДлина(МаркировкаЭкземпляр); Объект.StreamFormat=5; КТН = Вбайты(ТипМарки,0,1,2) + ?(ПустоеЗначение(МаркировкаГруппа)=1,"",Вбайты(сокрлп(МаркировкаГруппа),0,1,6)) + Вбайты(МаркировкаЭкземпляр,0,2,ДлинаСериала); Ответ=ОбратитьсяКАтрибутуФР(Объект, 1162, сокрлп(КТН), 1, 1); Если Ответ=0 Тогда Попытка Объект.CancelCheck(); Исключение КонецПопытки; ОтключитьсяОтФР(Объект, 0); Возврат 0; КонецЕсли; Объект.ЗакончитьПозицию(); КонецЦикла; //******************************************************************************** Функция ОбратитьсяКАтрибутуФР(Объект, AttrNumber, текЗначение, флПечать = 0, флЗапись = 0) //Функция ОбратитьсяКАтрибутуФР(Объект, AttrNumber, текЗначение, флПечать = 1, флЗапись = 0) Попытка Объект.AttrNumber = AttrNumber; Если флЗапись = 1 Тогда // проверять на "ПредЗначение <> текЗначение НЕЛЬЗЯ", т.к. записывать необходимо ВСЕГДА принудительно, иначе не будет результата при дальнейшем использовании Объект.AttrValue = ?(число(AttrNumber)=1229, окр(текЗначение*100,0), текЗначение); Объект.AttrPrint = флПечать; Объект.WriteAttribute(); Иначе Объект.ReadAttribute(); текЗначение = Объект.AttrValue; КонецЕсли; Исключение Сообщить("Ошибка "+?(флЗапись = 1, "записи атрибута ", "обращения к атрибуту ") + AttrNumber); Возврат 0; КонецПопытки; Если Объект.ResultCode <> 0 Тогда ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект); Сообщить("Ошибка "+?(флЗапись = 1, "записи атрибута ", "обращения к атрибуту ") + AttrNumber+": "+ОписаниеРезультата); Возврат 0 КонецЕсли; Возврат 1; // 0 - ошибка исполнения, 1 - успешная запись или чтение КонецФункции //****************************************************************************** Функция ДополнитьСтрокуЛ(Стр,Чем,Длина) Добавить=Длина-СтрДлина(Стр); Добавок=""; Для Сч = 1 По Добавить Цикл Добавок=Добавок+Чем; КонецЦикла; Возврат Добавок+Стр; КонецФункции //ДополнитьСтрокуЛ() //******************************************************************************** Функция Из_10_В_Любую(Знач Значение=0,Нотация=36) Экспорт Если Нотация<=0 Тогда Возврат("") КонецЕсли; Значение=Число(Значение); Если Значение<=0 Тогда Возврат("0") КонецЕсли; Значение=Цел(Значение); Результат=""; Пока Значение>0 Цикл Результат=Сред("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",Значение%Нотация+1,1)+Результат; Значение=Цел(Значение/Нотация) ; КонецЦикла; Возврат Результат; КонецФункции //****************************************************************************** //Вбайты(5,0,1,2) + ?(ПустоеЗначение(МаркировкаГруппа)=1,"",Вбайты(сокрлп(МаркировкаГруппа),0,1,6)) + Вбайты(МаркировкаЭкземпляр,0,2,ДлинаСериала) Функция Вбайты(Зн, Порядок=0, Способ=0, Длина=0) //Порядок = 0 (big endian), 1 (little endian) Если Способ = 0 Тогда //без преобразования Рез1 = зн ИначеЕсли Способ = 1 Тогда //число из 10-ой в 16-ую Рез1 = Из_10_В_Любую(Зн,16); ИначеЕсли Способ = 2 Тогда //строку в 16-ую Рез1 = ""; для й = 1 по СтрДлина(Зн) Цикл Рез1 = Рез1 + Из_10_В_Любую(КодСимв(Сред(зн,й,1)),16); КонецЦикла; КонецЕсли; Рез1 = ДополнитьСтрокуЛ(Рез1, "0", Длина*2); //добиваем нулями строку, если длина задана фиксированной //добавим пробелы для разделения байтов кк = СтрДлина(Рез1) / 2; Рез = ""; для й = 1 по кк Цикл Если Порядок = 0 Тогда //big endian - порядок следования байтов от старшего к младшему Рез = Рез + Сред(Рез1,й*2-1,2)+" " Иначе //little endian - порядок следования байтов от младшего к старшему Рез = Сред(Рез1,й*2-1,2)+" " + Рез КонецЕсли; КонецЦикла; Возврат Рез КонецФункции //Вбайты() //******************************************************************************** |
|||
1
victuan1
25.09.20
✎
05:51
|
(0) Рекомендую обратиться к разработчику, код которого вы заимствовали по адресу эл. почты victuan # маил ру
|
|||
2
HawkEye
25.09.20
✎
08:37
|
(0) вечером посмотрю, сейчас нет под рукой...
|
|||
3
victuan1
25.09.20
✎
08:53
|
(0) Вот здесь ошибка:
ТипМарки=5.1; Должно быть: ТипМарки=17485; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |