Closed ConsperSerj closed 2 years ago
нужен лог
@swex Завтра утром ранним пришлю
Доброе утро, Алексей.
Лог по ссылке - https://drive.google.com/file/d/1qkyKGbNz_mxmsd224HO5NW6Ya-qzrb5T/view?usp=sharing
Устройство Pax A930
@swex
@swex Подскажите пожалуйста. Удалось ли понять хоть что-то с логи? Может быть я где то делаю что-то не так, но вроде бы все по документации.
необходимо поменять местами методы FNOperation
и FNSendItemBarcode
, для ККТ на базе КЯ порядок отправки тегов такой:
сначала операция(FNOperation
) потом теги в т.ч. FNSendItemBarcode
,
для остальных ККТ обратный:
сначала теги в т.ч. FNSendItemBarcode
, потом операция(FNOperation
)
@swex Спасибо этот момент заработал.
Сейчас столкнулся со следующим. При попытке передать Set_MeasureUnit для маркированной позиции получаю ошибку что нельзя передавать тег 2108 для штучного товара.
1) Подскажите пожалуйста каким образом тогда передавать например литры или килограммы?
2)Так же При попытке передавать дробное количество получил ошибку
Некорректные параметры в команде или ошибка при работе с КМ <0x00330054: до команды FF67h передается {тег 1293}>
Я правильно понимаю что дробное количество нужно передавать непосредственно перед вызовом метода FNSendItemBarcode() или наоборот после?
В документации не указано в каком порядке нужно вызывать методы которые связаны с маркировкой. Если вас не затруднит то расскажите пожалуйста в каком порядке нужно передавать дробное количество это числитесь и знаменатель, как передавать меру исчисления. Может быть их нужно вызывать между вызовами FNSendItemBarcode и FNOperation. И перед FNSendItemBarcode. @swex
MeasureUnit
перед вызовом FNOperation
FNSendItemBarcode
, а дробное количество передается внутри самой FNOperation
. Значит опять где-то не тот порядок... покажите лог1) MeasureUnit - указываю перед FNOperation и перед добавлением маркировки. Получаю ошибку что нельзя указывать для штучного маркированного товара 2) утром пришлю тоги и попробую в разных порядках передавать
@swex
в changelog.txt см. "Рекомендации по использованию КЯ в режиме ФФД 1.2" п.2. "Работа с чеком прихода/расхода/возвратов"
чтобы товар был мерным нужно передать либо 1023, либо 1291, иначе он штучный
@asem-m в тег 1023 ложу количество 1. Потом указываю что это литры. После этого указываю код маркировки. Выполняю функцию FNOperation и получаю ошибку что литры нельзя указывать для штучного товара. А если судить по вашему ответу то должно быть всё хорошо. Если нужно могу прислать логи
пришлите лог с HEX командами
Команда ККТ FF61h "Проверка маркированного товара" позволяет принимать в параметрах Список TLV, куда передавать теги 2108, 1023, 1291. Это ускоряет обработку данных, чтобы эти теги не загружать отдельной командой ККТ FF4Dh "Передать произвольную TLV структуру привязанную к операции".
Посмотрите лог драйвера ФР под Windows как это делается.
@asem-m к сожалению у меня нет оборудования. Я сниму логи с андроид устройства м завтра с утра пришлю + попробую по-разному передавать параметры.
И тут речь уже не про проверку маркировки. А привязывание маркировки к позиции и указание у этой позиции меры измерения например литров
А у вас нет расшифровки как называютчя методы в документации например вы пишите команда ККТ FF61h - а как этот метод называется а документации например это FNOperation или ещё как то. Это можно как то быстро понять?
@swex @asem-m Доброе утро
Провел два эксперимента Первый пример:
после FNOperation Получаю ошибку: Код ошибки 33h (51) от ККТ: Некорректные параметры в команде или ошибка при работе с КМ <0x00330054: до команды FF67h передается {тег 2108}> Ссылка на лог - https://drive.google.com/file/d/1XPrnl8CjwWDdUT4r_MwWHw5Mt7t1eTV3/view?usp=sharing
Так как FF67h - это функция FNSendItemBarcode следовательно если судить по ошибке то нужно чтобы Set_MeasureUnit заполнялся после вызова методы FNSendItemBarcode. Хорошо меняю местами:
FNOperation Получаю такую же ошибку Ссылка на лог: https://drive.google.com/file/d/1t2RN7alNNrtBPCYSA-tEEpzlxZ5jaPpS/view?usp=sharing
Такая же ситуация и с дробным значением. Что если я хочу передавать дробное значение то отругивает так же только пишет тег числителя
@asem-m Подскажите пожалуйста. Вы писали: в changelog.txt см. "Рекомендации по использованию КЯ в режиме ФФД 1.2" п.2. "Работа с чеком прихода/расхода/возвратов"
А где можно найти данный файл? Что-то я в github его не могу найти
changelog.txt идет в архиве в поставке КЯ
@swex @asem-m подскажите пожалуйста а удалось что-то по логам понять?
Получаю ошибку: Код ошибки 33h (51) от ККТ: Некорректные параметры в команде или ошибка при работе с КМ <0x00330054: до команды FF67h передается {тег 2108}>
Последовательность (если не передавать TLV List (1023) в FF61h, тогда передавать 1023 отдельной командой FF4Dh): Открытие чека 8Dh -> Проверить код маркировки FF61h (без TLV List) -> Принять КМ FF69h -> Отправить тег привязанный к операции FF4Dh (тег 1023, например) -> Передать и распознать КТ FF67h -> Добавить позицию V2 FF46h -> Закрытие чека расширенное V3 FF45h
Команда ККТ FF61h "Проверка маркированного товара" позволяет принимать в параметрах Список TLV, куда передавать теги 2108, 1023, 1291. Это ускоряет обработку данных, чтобы эти теги не загружать отдельной командой ККТ FF4Dh "Передать произвольную TLV структуру привязанную к операции".
Посмотрите лог драйвера ФР под Windows как это делается.
Добрый день. Подскажите пожалуйста
Set_BarCode executeCommand { FNSendItemBarcode() }
В Set_BarCode - нужно передавать код товара или все же код маркировки?
@swex @asem-m
для лучшего понимания о чем речь, уточняйте код команды ККТ по логу драйвера
@asem-m FF67
Я завел чтобы у меня печатался [M+], чтобы можно было указать дробно значение и так же значение измерения позиции. Но столкнулся со следующим
Пример: Есть например позиция у которой не удалось считать код маркировки. Но мы знаем что Признаки предмета расчета. = * Обязательный к маркировке подакцизный товар без КМ и Коды товара - тоже нам известен.
И получается ситуация: 1)проверить маркировку нет возможности - по причине того что кода маркировки нет 2)Принять маркировку нет возможности то же не можем 3) Вызвать команду FF67 то же не имеет смысла
НООО. Данная позиция по закону должна фискализироваться и на чеке она должна отобразиться как [M] при этом если это например в литрах измерялось то напечататься литры
Подскажите пожалуйста каким образом поступать если маркировка не считалась и позиция измеряется не в штуках а например в литрах, каким образом в позицию передать это все? @swex @asem-m
если КМ может быть поврежден, но непустой, то нужно предварительно установить Т1П57=1 "ПРИНИМАТЬ ВСЕ КОДЫ ТОВАРА", тогда в позицию чека будет добавлен тег 1300 с поврежденным КМ
если КМ пустая строка, то при любом значении Т1П57 в позицию чека будет добавлен пустой тег 1300
@asem-m FF67
эта команда и формирует тег 1300, если КМ поврежден или пустая строка
@asem-m что такое Т1П57 и как это поле или метод называется в вашем сдк для андроид? Я что-то даже не понимаю р чем речь сейчас.
И я могу для команды ff67 передать пустую строку. Но при попытке передать меру исчисления я получаю ошибку что до метода ff67 был передан параметр 1208 @asem-m
таблица 1, поле 57, ряд 1 (по умолчанию)
тест драйвера ФР: 09.Параметры устройства -> Редактирование таблиц -> №1 Настройки ККТ -> Открыть
@asem-m если указать в 57 поле значение 1 это будет означать что можно передавать код маркировки пустым или нет?
Т1П57=1 чтобы передавать поврежденные КМ
@asem-m и ещё вопрос. Если код маркировки пуст, то нужно ли проводить проверку маркировки и добавление кода маркировки или достаточно просто вызывать команду ff67?
Тогда как поступать когда 1) код маркировки отсутствует 2) позиция является маркированной имеет право быть без км 3) при этом измеряется в литрах 4) на чеке она должна распечататься с пометкой [М]
Как поступать в таком случае?
У меня получается или чтобы печаталось [М] или печатается литры. Но вот все вместе не выходит заставить провести такую позицию
@asem-m
И я могу для команды ff67 передать пустую строку. Но при попытке передать меру исчисления я получаю ошибку что до метода ff67 был передан параметр 1208 @asem-m
если вы передаете отдельными тегами, а не TLV List'ом в FF61h, и товар мерный, то нужно сначала передать 1023 и следом 2108, далее FF67h
последовательность:
@asem-m буду пробовать. Спасибо
@asem-m и ещё вопрос. Если код маркировки пуст, то нужно ли проводить проверку маркировки и добавление кода маркировки или достаточно просто вызывать команду ff67?
если пуст, то Проверка (FF61h) выдаст ошибку <0x00D30015: передана пустая строка в качестве КМ>, а значит далее подавать Передать (FF67h), но можно сразу Передать
Тогда как поступать когда
1. код маркировки отсутствует 2. позиция является маркированной имеет право быть без км 3. при этом измеряется в литрах 4. на чеке она должна распечататься с пометкой [М]
Как поступать в таком случае?
У меня получается или чтобы печаталось [М] или печатается литры. Но вот все вместе не выходит заставить провести такую позицию
@asem-m
@asem-m спасибо огромное. Буду завтра с утра пробовать
@asem-m @swex Добрый день. С обычным чеком все работает прекрасно. Спасибо за помощь.
Но есть проблемы с чеком коррекции при работе с маркировкой. По сути тот же код отличается только открытие документа - FNOpenCheckCorrection (в обычном OpenCheck()) Но выдается ошибка от ядра : Код ошибки 5Eh (94) от ККТ: Неверная операция <0x005E0013: команда ККТ FF67h не поддерживается в текущем открытом документе КЯ>
Подскажите пожалуйста каким образом тогда проводить коррекцию с маркировкой чтобы печаталась буква [M]?
Без маркировки чек коррекции отрабатывает нормально.
Потому что вы открываете чек на расход. При работе с КМ поддерживаются типы чеков - приход и возврат прихода. Это связано с тегом 2110.
Спасибо со всем разобрался.
Добрый день. У меня возникла проблема с маркированной позицией
Провожу проверку маркировки. Получаю ответ от ядра что все прекрасно маркировка распознана и все с ней хорошо.
Открываю чек, добавляю позицию, после этого передаю маркировку и закрываю чек. Происходит фискализация но вот как будто маркировка игнорируется.
Подскажите пожалуйста в чем может быть причина?
Мои действия:
OpenCheck() - открылся без ошибок указываю тип как обычно
Заполняю поля для проверки маркировки
Set_Password(USER_PASSWORD) Set_BarCode(param.markingCode.decodeToString()) Set_ItemStatus(param.plannedGoodStatus.code) Set_CheckItemMode(0) var tlvData = byteArrayOf() Set_TLVDataHex("") param.measureOfQuantity?.let { tlvData += getTLVDataHexForByte(2108, it.code.toLong()) } param.quantity?.let { tlvData += getTLVDataHexForFVLN(1023, it) } param.fractionalCountOfMarkedPosition?.let { fractional -> Set_TagNumber(1291) Set_TagType(8) FNBeginSTLVTag() val parentId = Get_TagID() addTagVlnType(parentId, 1293, fractional.numerator.toString()) addTagVlnType(parentId, 1294, fractional.denominator.toString()) Set_TagNumber(parentId) Set_TagType(8) GetTagAsTLV() tlvData += Get_TLVData() } Set_TLVData(tlvData) val result = executeCommand { FNCheckItemBarcode() } - Получаю ответ что все хорошо
После этого выполняю заполнение полей для регистрации позиции и регистрирую ее:
FNOperation() тут тоже ответ что все хорошо
После этого выполняю Set_BarCode(position.markingCode?.decodeToString()) val result = executeCommand { FNSendItemBarcode() }
И потом заполнение оставшихся полей для команды FNCloseCheckEx
Происходит фискализация но вот пометки на чеке что данная позиция маркированная нет.
Подскажите пожалуйста что не так?
П.С. вычитал в вашем примере увидел следующее: Требуется актуальная версия прошивки ККТ и функциональная лицензия. Может ли это быть причиной?
@swex