shtrih-m/fr_drv_ng

Ошибка при добавлении маркированной позиции с поврежденной маркой

ConsperSerj opened this issue · 32 comments

Добрый день.

Разработка: Android. Pax A930.

Имеем две позиции:
1)молоко - у этой позиции Признаки предмета расчета = 32 (Обязательный к маркировке товар без КМ) + код маркировку пуст
2)молоко2 - у этой позиции Признаки предмета расчета = 32 (Обязательный к маркировке товар без КМ) + код маркировку пуст

Так как код маркировки пуст, следовательно выполнение команд FNCheckItemBarcode() и так же FNAcceptMarkingCode/FNDeclineMarkingCode не выполняется

Произвожу комбинацию команд для заполнения параметров для позиции:

        if (position.markingCode != null && position.plannedGoodStatus != null) {
            Set_BarCode(position.markingCode?.decodeToString() ?: "")
            Set_ItemStatus(position.plannedGoodStatus?.code ?: 0)
            Set_CheckItemMode(0)
            val resultCode = executeCommand { FNCheckItemBarcode() }
            if (resultCode == 0)
                executeCommand { FNAcceptMarkingCode() } //
            else executeCommand { FNDeclineMarkingCode() }
        }
        
        Set_CheckType(parameters.operationType.code)
        Set_StringForPrinting(position.name) // название товара
        Set_Quantity(position.quantity) // передаем количество
        Set_Price(position.pricePerUnit)
        Set_TaxValueEnabled(false) // налоги высчитываться буду на стороне ККТ
        Set_Tax1(position.vatRate.toCodeByFEValueAddedTaxCodes())
        Set_Department(1) // номер отдела
        Set_PaymentTypeSign(position.method.code) //способ расчета
        Set_PaymentItemSign(position.subject.code)// предмет расчета
        Set_Summ1(position.totalPrice ?: -1)
        Set_Summ1Enabled(position.totalPrice != -1L) //рассчитывает касса
        position.totalVat?.let { Set_TaxValue(it) }
        sendTagOperation(1023, position.quantity) // передаем количество
        position.measureOfQuantity?.let { sendTagOperation(2108, it.code) }

        val isMarkingPosition = position.subject.isMarkingCode() // subject.code == 30..33
        if (isMarkingPosition) {     
            Set_BarCode(position.markingCode?.decodeToString() ?: "")
            position.fractionalCountOfMarkedPosition?.let {
                sendTagOperation(1293, it.numerator)
                sendTagOperation(1294, it.denominator)
            }


            executeCommand { FNSendItemBarcode() }
        }
        
        FNOperation() 

После этого вижу что на чеке для первой позиции печатается [M], а вот для второй не печатается. Скорее всего это происходит по причине ошибки при регистрации 2 позиции, но вот как ее обойти я не могу понять.

Shtrig_Log.txt

При этом если код маркировки указан у позиций то все штатно работает даже если позиции 10 и таких ошибок не падает как в логе.

Подскажите пожалуйста как пробивать позиции у которых маркировка отсутствует и чтобы на чеке у всех позиций проставлялось [M]?

P.S. У ядра в таблице 1 поле 57 стоит значение 1 - принимать любые коды маркировки

Если КМ не может быть считан, то не нужно проверять <пустую строку> командой ККТ FF61h, нужно привязать (передать) пустую строку КМ командой FF67h (по Варианту 2), провести позицию в чек командой FF46h этого товара, далее закрыть чек. В чеке позиция будет с [М].

А вы бы не могли подсказать что за команды это?
FF61h -
FF67h -
FF46h -

Я расшифровки команд не могу найти для андроид

@asem-m или может подскажете где найти расшифровку какой это метод по коду?

@asem-m И еще вопрос. Если код маркировки все же пришел(то есть не пустая строка) - то набор команд который я выше скинул правильный? Или все же нет?

по Протоколу работы ККТ с ФН (Штрих v.1.17):
FF45h - Закрытие чека расширенное вариант №2
FF46h - Операция V2
FF61h - Проверка маркированного товара
FF67h - Привязка маркированного товара к позиции
FF69h - Принять или отвергнуть введенный код маркировки

Если КМ непустая строка, то проверять его как обычно, но с настройкой Т1П57=1.

Что-то я не могу понять одного или у меня документация какая то неверная

http://doc.shtrih-m.ru/Files/Programmer.pdf

Команды
FF46h - Операция V2 - я не виду ни в документации ни в попытках найти его через код.
FF45h - FNCloseCheckEx - тут так и есть
FF61h - я правильно понимаю что это - FNSendItemBarcode ?

FF67h - я правильно ли пония что это FNCheckItemBarcode2?
FF69h - FNAcceptMarkingCode / FNDeclineMarkingCode

@asem-m Можете дать пояснения пожалуйста?

Базовый документ http://doc.shtrih-m.ru/Files/fnprotocol.pdf с описанием команд ККТ:
117

Этот документ у меня тоже есть. Только я взаимодействую с кя через СДК от вас.(либы). По документации которую я вам выше скинул не понятно какая команда к какому коду относиться. У вас нету расшифровки именно для вашей СДК? Если обратите внимание на код который я скидывал выше я просто вызываю методы из вашей СДК. Документация которая вы скинули не расшифровывает команды из сдк

@asem-m у меня ощущение что я вам задаю вопросы про СДК а вы меня не понимаете

могу подсказать по алгоритму, по командам ККТ и их параметрам

@asem-m тогда я в понедельник через консоль посмотрю какая команда с вашего СДК к какому коду относиться. Попробую передать пустые марки и если будут вопросы буду писать сюда же.

Хорошо?

swex commented

в логе драйвера после каждой команды есть строка вида: command FF67 return code: 51 execution took 35ms соотв. можно понять что делает драйвер на уровне протокола

в логе драйвера есть hex-посылка команд ККТ и ответов на них и в крайней случае это возможность проанализировать поведение (алгоритм) кассы и ПО на нижнем уровне, но это неудобно

@asem-m да я уже понял. Составлю список расшифровок и попробую сделать алгоритм который вы описали выше для пустых км.

Спасибо за ответы. Думаю ещё напишу вам в понедельник

@asem-m, по логу получается так:

  • позиция 1

    • FF4D тег 1023
    • FF4D тег 2108
    • FF67 с пустой строкой
    • FF46

    все проходит без ошибок

  • позиция 2

    • FF4D тег 1023
    • FF4D тег 2108
    • FF67 с пустым строкой

    выдает ошибку 51, расширенное описание: Код ошибки 33h (51) от ККТ: Некорректные параметры в команде или ошибка при работе с КМ <0x0033002F: не допускается повтор тега в операции (в теге 1059 "Предмет расчета") {тег 1023}>

Почему-то на первой позиции FF67 выполняется без ошибок, а на второй с ошибкой.
ККТ: POSCENTER BANK-01Ф, дата прошивки 2022-07-10 12:03:29

@ConsperSerj, алгоритм у вас правильный. Единственное, зря передаете тег 1023. КЯ его сам формирует.

@olefard @asem-m я вам про это и говорю. Что для первой позиции все хорошо ничего не падает и на чеке печатается [М]. Но вот для второй позиции ошибка что передается повторно 1023. При этом все фискалитсч но для второй позиции нет [м]

По поводу того что зря передаю 1023. Если его не передавать ругается что не передал.

Если вы говорите что по алгоритму все впорядке, то где искать ошибку и в чем ещё может быть дело?

КЯ 1.14.42154:

Команда: 8Dh, Открыть чек
Команда: FF67h, Привязка маркированного товара к позиции: КМ пустая строка
Команда: FF46h, Операция V2
Команда: FF67h, Привязка маркированного товара к позиции: КМ пустая строка
Код ошибки 5Eh (94) от ККТ: Неверная операция <0x005E001E: данный код маркировки товара уже принят и находится в позиции чека>

Ошибка будет исправлена в 1.15 сборке КЯ

@asem-m подскажите пожалуйста а когда выйдет эта сборка?

там переработаны алгоритмы работы с КМ, еще не протестировано; к концу месяца

@asem-m подскажите пожалуйста с новой версией которая выйдет моя ошибка тоже уйдет или не факт? Я так понимаю что мой алгоритм правильный (если судить по ответу @olefard ) и это проблема в кя?

По вашему логу Shtrig_Log.txt будет работать:

8D 1E000000 00 // Открытие чека
Ошибок нет

FF4D 1E000000 FF03 0400 06 40420F // 1023="1,000000"
Ошибок нет

FF4D 1E000000 3C08 0100 0A // 2108=10
Ошибок нет

FF67 1E000000 00 // Привязка маркированного товара к позиции
Ошибок нет

ЗоКМ> Запрос о КМ "<пустая строка>" от 26.12.2022 04:16. Теги формируемые ККТ (2003, 2102, 1023, 2108, 1291) длиной 23: D3 07 01 00 02 36 08 01 00 00 FF 03 04 00 06 40 42 0F 3C 08 01 00 0A.
ЗоКМ>> Тег 2003 "Планируемый статус товара": 2 (мерный товар, подлежащий обязательной маркировке средством идентификации, в стадии реализации);
ЗоКМ>> Тег 2102 "Режим обработки кода маркировки": 0;
ЗоКМ>> Тег 1023 "Количество предмета расчета": "1,000000";
ЗоКМ>> Тег 2108 "Мера количества предмета расчета": 10 (г);

Результат проверки маркировки: ЖЕЛТЫЙ
Ответ команды ККТ FF67h "Привязка маркированного товара к позиции" на КМ "<пустая строка>":
Код товара 0x0000 (0);
Тип Data Matrix 0x00 (0);
+0: Тег 2004 "Результат проверки КМ": 0x00 (0);
Номер бита 0: "0" - код маркировки не может быть проверен фискальным накопителем с использованием ключа проверки КП;
Номер бита 1: "0" - код маркировки не может быть проверен фискальным накопителем с использованием ключа проверки КП (т.к. бит 0 сброшен в "0");
+1: Причина, по которой не была проведена локальная проверка: 1 (КМ данного типа не подлежит проверки в фискальном накопителе);
+2: Тег 2100 "Тип кода маркировки": 0 (тип КМ не идентифицирован: КМ отсутствует, не может быть прочитан или может быть прочитан, но не может быть распознан);
+3: Длина дополнительных данных (ниже): 15 байт;
+4: Код ответа ФН на команду B6h онлайн-проверки: 0x00 (0) - ошибок нет;
+5: Тег 2106 "Результат проверки сведений о товаре": 0x00 (0):
Номер бита 0: "0" - код маркировки не был проверен ФН и (или) ОИСМ;
Номер бита 1: "0" - результат проверки КП КМ отрицательный или код маркировки не был проверен;
Номер бита 2: "0" - сведения о статусе товара от ОИСМ не получены;
Номер бита 3: "0" - от ОИСМ получены сведения, что планируемый статус товара некорректен или сведения о статусе товара от ОИСМ не получены;
Номер бита 4: "0" - результат проверки КП КМ и статуса товара сформирован ККТ, работающей в режиме передачи данных;
+6: Список тегов ответа сервера (2114, 2105, 2005, 2109, 2101, 2100 и др.) длиной 13: 42 08 04 00 F0 F5 A8 63 39 08 01 00 01.
> Тег 2114 "Дата и время запроса": 26.12.2022 01:16 (UTC+0), 26.12.2022 04:16 (локальное время);
> Тег 2105 "Коды обработки запроса": 1 (Запрос имеет некорректный формат);

FF46 1E000000 01 40420F000000 B80B000000 B80B000000 FFFFFFFFFF 01 01 04 20 ECEEEBEEEAEE // [М] молоко
Ошибок нет

ДоМТ> Тег 2007 "Данные о маркированном товаре" (теги формируемые ККТ: 2000, 2100, 2101, 2110) длиной 22: D7 07 12 00 D0 07 00 00 34 08 01 00 00 35 08 00 00 3E 08 01 00 02.
ДоМТ>> Тег 2000 "Код маркировки": <пустая строка>;
ДоМТ>> Тег 2100 "Тип кода маркировки": 0 (тип КМ не идентифицирован: КМ отсутствует, не может быть прочитан или может быть прочитан, но не может быть распознан);
ДоМТ>> Тег 2101 "Идентификатор товара": <пустая строка>;
ДоМТ>> Тег 2110 "Присвоенный статус товара": 2 (мерный товар, подлежащий обязательной маркировке средством идентификации, в стадии реализации);

FF4D 1E000000 FF03 0400 06 40420F // 1023="1,000000"
Ошибок нет

FF4D 1E000000 3C08 0100 0A // 2108=10
Ошибок нет

FF67 1E000000 00
Ошибок нет

ЗоКМ> Запрос о КМ "<пустая строка>" от 26.12.2022 04:17. Теги формируемые ККТ (2003, 2102, 1023, 2108, 1291) длиной 23: D3 07 01 00 02 36 08 01 00 00 FF 03 04 00 06 40 42 0F 3C 08 01 00 0A.
ЗоКМ>> Тег 2003 "Планируемый статус товара": 2 (мерный товар, подлежащий обязательной маркировке средством идентификации, в стадии реализации);
ЗоКМ>> Тег 2102 "Режим обработки кода маркировки": 0;
ЗоКМ>> Тег 1023 "Количество предмета расчета": "1,000000";
ЗоКМ>> Тег 2108 "Мера количества предмета расчета": 10 (г);

Результат проверки маркировки: ЖЕЛТЫЙ
Ответ команды ККТ FF67h "Привязка маркированного товара к позиции" на КМ "<пустая строка>":
Код товара 0x0000 (0);
Тип Data Matrix 0x00 (0);
+0: Тег 2004 "Результат проверки КМ": 0x00 (0);
Номер бита 0: "0" - код маркировки не может быть проверен фискальным накопителем с использованием ключа проверки КП;
Номер бита 1: "0" - код маркировки не может быть проверен фискальным накопителем с использованием ключа проверки КП (т.к. бит 0 сброшен в "0");
+1: Причина, по которой не была проведена локальная проверка: 1 (КМ данного типа не подлежит проверки в фискальном накопителе);
+2: Тег 2100 "Тип кода маркировки": 0 (тип КМ не идентифицирован: КМ отсутствует, не может быть прочитан или может быть прочитан, но не может быть распознан);
+3: Длина дополнительных данных (ниже): 15 байт;
+4: Код ответа ФН на команду B6h онлайн-проверки: 0x00 (0) - ошибок нет;
+5: Тег 2106 "Результат проверки сведений о товаре": 0x00 (0):
Номер бита 0: "0" - код маркировки не был проверен ФН и (или) ОИСМ;
Номер бита 1: "0" - результат проверки КП КМ отрицательный или код маркировки не был проверен;
Номер бита 2: "0" - сведения о статусе товара от ОИСМ не получены;
Номер бита 3: "0" - от ОИСМ получены сведения, что планируемый статус товара некорректен или сведения о статусе товара от ОИСМ не получены;
Номер бита 4: "0" - результат проверки КП КМ и статуса товара сформирован ККТ, работающей в режиме передачи данных;
+6: Список тегов ответа сервера (2114, 2105, 2005, 2109, 2101, 2100 и др.) длиной 13: 42 08 04 00 11 F6 A8 63 39 08 01 00 01.
> Тег 2114 "Дата и время запроса": 26.12.2022 01:17 (UTC+0), 26.12.2022 04:17 (локальное время);
> Тег 2105 "Коды обработки запроса": 1 (Запрос имеет некорректный формат);

FF46 1E000000 01 40420F000000 B80B000000 B80B000000 FFFFFFFFFF 01 01 04 20 ECEEEBEEEAEE // [М] молоко
Ошибок нет

ДоМТ> Тег 2007 "Данные о маркированном товаре" (теги формируемые ККТ: 2000, 2100, 2101, 2110) длиной 22: D7 07 12 00 D0 07 00 00 34 08 01 00 00 35 08 00 00 3E 08 01 00 02.
ДоМТ>> Тег 2000 "Код маркировки": <пустая строка>;
ДоМТ>> Тег 2100 "Тип кода маркировки": 0 (тип КМ не идентифицирован: КМ отсутствует, не может быть прочитан или может быть прочитан, но не может быть распознан);
ДоМТ>> Тег 2101 "Идентификатор товара": <пустая строка>;
ДоМТ>> Тег 2110 "Присвоенный статус товара": 2 (мерный товар, подлежащий обязательной маркировке средством идентификации, в стадии реализации);

FF45 1E000000 50C3000000 9001000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 2C01000000 C800000000 6400000000 00 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 01D1F2F0EEEAE020E4EBFF20EFE5F7E0F2E8

УоРМТ> Уведомление о реализации маркированных товаров (теги формируемые ККТ: 1261, 1009, 1055, 1228) длиной 39: F1 03 1E 00 31 30 39 30 39 37 2C 20 8C AE E1 AA A2 A0 2C 20 E3 AB 2E 20 88 AB EC A8 AD AA A0 2C 20 39 1F 04 01 00 01.
УоРМТ>> Тег 1009 "Адрес расчетов": "109097, Москва, ул. Ильинка, 9";
УоРМТ>> Тег 1055 "Применяемая система налогообложения": 01h (1);

СТКнУ> Список тегов квитанции на уведомление (1012, 2006, 2111) длиной 18: F4 03 04 00 2D F6 A8 63 D6 07 01 00 01 3F 08 01 00 00.
СТКнУ>>> Тег 1012 "Дата, время": 26.12.2022 01:17 (UTC+0), 26.12.2022 04:17 (локальное время);
СТКнУ>>> Тег 2006 "Результаты обработки уведомления": 1 (При проверке хотя бы одного из кодов маркировки, включенных в уведомление, получен отрицательный результат (!));
СТКнУ>>> Тег 2111 "Коды обработки уведомления": 0 (Уведомление принято и обработано успешно);

КАССОВЫЙ ЧЕК
1209,ВЕРСИЯ ФФД:4 (1.2)
...
1054,ПРИЗН. РАСЧЕТА:1 (Приход)
1020,ИТОГ:60.00
...
1059,ПРЕДМ. РАСЧЕТА:
 2108,МЕРА КОЛ-ВА ПРЕДМ. РАСЧ.:10
 2102,РЕЖ. ОБРАБОТКИ КМ:0
 1163,КТ:
  1300,НЕРАСПОЗН. КОД ТОВАРА:
 1023,КОЛ-ВО ПРЕДМ. РАСЧЕТА:1.000000
 1030,НАИМЕН. ПРЕДМ. РАСЧЕТА:молоко
 1079,ЦЕНА ЗА ЕД. ПРЕДМ. РАСЧ.:30.00
 1043,СТОИМ. ПРЕДМ. РАСЧЕТА:30.00
 1199,СТАВКА НДС:1
 1200,СУММА НДС ЗА ПРЕДМ. РАСЧ.:5.00
 1214,ПРИЗН. СПОСОБА РАСЧ.:4
 1212,ПРИЗН. ПРЕДМЕТА РАСЧ.:32
 2106,РЕЗ-Т ПРОВ. СВЕД. О ТОВ.:0
1059,ПРЕДМ. РАСЧЕТА:
 2108,МЕРА КОЛ-ВА ПРЕДМ. РАСЧ.:10
 2102,РЕЖ. ОБРАБОТКИ КМ:0
 1163,КТ:
  1300,НЕРАСПОЗН. КОД ТОВАРА:
 1023,КОЛ-ВО ПРЕДМ. РАСЧЕТА:1.000000
 1030,НАИМЕН. ПРЕДМ. РАСЧЕТА:молоко
 1079,ЦЕНА ЗА ЕД. ПРЕДМ. РАСЧ.:30.00
 1043,СТОИМ. ПРЕДМ. РАСЧЕТА:30.00
 1199,СТАВКА НДС:1
 1200,СУММА НДС ЗА ПРЕДМ. РАСЧ.:5.00
 1214,ПРИЗН. СПОСОБА РАСЧ.:4
 1212,ПРИЗН. ПРЕДМЕТА РАСЧ.:32
 2106,РЕЗ-Т ПРОВ. СВЕД. О ТОВ.:0
1055,СНО:1 (ОБЩ.)
1102,СУММА НДС 20%:10.00
1031,НАЛИЧНЫМИ:50.00
1081,БЕЗНАЛИЧНЫМИ:4.00
1215,ПРЕДВАРИТЕЛЬНАЯ ОПЛАТА (АВАНС):3.00
1216,ПОСЛЕДУЮЩАЯ ОПЛАТА (КРЕДИТ):2.00
1217,ИНАЯ ФОРМА ОПЛАТЫ:1.00
1009,АДР.РАСЧЕТОВ:109097, Москва, ул. Ильинка, 9
1187,МЕСТО РАСЧЕТОВ:Торговый зал

@asem-m здравствуйте. Подскажите пожалуйста, то что вы описали выше - это то что должно работать на моей версии или это будет работать на новой версии только?

В сборке 1.15 не будет ошибок при передаче повторных пустых КМ.

Можете прислать еще лог на проверку.

У меня еще нет новой сборки. Если у вас появится релизная сборка и будет возможность ее передать то было бы хорошо. Я бы смог со своей стороны проверить

@asem-m

@asem-m Доброе утро. Подскажите пожалуйста. Вы ранее писали что до нового года должна была выйти новая версия 1.15. Но в сторе на pax я ее так и не вижу. Вы не могли бы подсказать когда будет выход новой версии 1.15?

@asem-m @swex Доброе утро. Подскажите пожалуйста появилось ли понимание когда выйдет новая версия 1.15?

тестируется, у вас кто поставщик ПО?

Maxstore Pax. оттуда обычно выкачиваем новые версии

@asem-m

@asem-m Доброе утро. Подскажите пожалуйста появилось ли понимание когда выйдет новая версия 1.15?

Тестовая сборка 1.15.42910 может быть загружена на Maxstore Pax. Уточните к какой группе относится ваше Pax устройство или сообщите S/N вашего аппарата.

@swex S/N: 1170256669

Проверьте доступность КЯ 1.15 в группе LIFE PAY TEST LIFEPOS