ДТО 8.16

1. jh77 25.09.20 01:14 Сейчас в теме
Добрый день.

ККТ Атол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)+" " + Рез
КонецЕсли;
КонецЦикла;

Возврат Рез
КонецФункции //Вбайты()
//********************************************************************************
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. RocKeR_13 1325 25.09.20 09:50 Сейчас в теме
(1) Платформу 2.5 с 31 марта уже особо не развивают, а с 2021 году вообще прекращают поддерживать. ДТО 8 и 9 уже прекратили поддерживать, так что, как ранее писали, вам стоит задуматься над переходом на платформу 5.0 и ДТО 10
2. dvk09 2 25.09.20 08:25 Сейчас в теме
ДТО 8.16 давно сняли с поддержки.
Копать в сторону "Драйвер АТОЛ 10, платформа 5.0"
http://integration.atol.ru/api/
Я бы думал о JSON-заданиях через web-сервер...
3. dvk09 2 25.09.20 08:29 Сейчас в теме
Правда 1С++ бы использовал, тип значения "Структура" с этой библиотечкой появляется.
5. jh77 25.09.20 09:57 Сейчас в теме
Зачем писать не по делу?
Я не спрашивал какие есть варианты...
Я спросил, почему у меня не получается сформировать чек (после смены прошивки)?
6. dron-s 58 25.09.20 18:20 Сейчас в теме
(5)
Я спросил, почему у меня не получается сформировать чек (после смены прошивки)?

потому что наверное
отменено автоматическое формирование реквизита "Код товара" (тег 1162) со значением "00 00" при значении реквизита "Признак предмета расчета" (тег 1212) равным 1 (товар) или 2 (подакцизный товар);
7. jh77 27.09.20 12:47 Сейчас в теме
У меня код товара начинался на "00 05", еще пробывал на "44 4D".
Если отключили автоматическое форматирование реквизита, может кто знает как запускать это форматирование?
8. dvk09 2 28.09.20 03:09 Сейчас в теме
(7)
форматирование
, а Выше написано: (6)
формирование
...

Можно попробовать посмотреть тут:
http://forum.atol.ru/index.php?showtopic=39810&hl=12-8541

И тут:
http://bit.ly/2vCFZco

Далее лог драйвера ККМ почитать...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот