Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Проблема с send_tlv_struct() #14

Closed
DenisArsenev opened this issue Jan 20, 2022 · 3 comments
Closed

Проблема с send_tlv_struct() #14

DenisArsenev opened this issue Jan 20, 2022 · 3 comments

Comments

@DenisArsenev
Copy link

send_tlv_struct() - в каком виде передаются TLV-данные в этот метод? Стандартные решения драйвера штрих-м и поиск в интернете не помогли - пишет pyshtrih.excepts.Error: 0xFF0C (Передать произвольную TLV структуру) - Некорректные параметры в команде (0x33) на разные варианты. В вашем драйвере нет никаких пояснений кроме "произвольная TLV структура" - приведите её пример, пожалуйста. Примеры "произвольной TLV структуры" из документации к протоколу и из интернета воспринимаются вашим методом send_tlv_struct() как некорректные.

@DenisArsenev
Copy link
Author

DenisArsenev commented Jan 21, 2022

Похоже, метод send_tlv_struct() всё-таки не работает. Пробовал разные форматы заполнения свойства "tlv_struct" (произвольная tlv-структура) - в лучшем случае получал ошибку:
pyshtrih.excepts.Error: 0xFF0C (Передать произвольную TLV структуру) - Некорректные параметры в команде (0x33)

В итоге на форуме штрих-м нашёл пример произвольной tlv-структуры от тех-поддержки штрих-м (https://forum.shtrih-m-partners.ru/index.php?topic=33885.0). Их пример произвольной tlv-структуры выглядит так:
FF 0C 1E 00 00 00 CB 04 0B 00 88 A2 A0 AD AE A2 20 88 2E 88 2E 37 (тег 1227 (Покупатель) со значением "Иванов И.И.")

Подставляю это значение в метод send_tlv_struct(), получается такой код:
device.send_tlv_struct(b'FF 0C 1E 00 00 00 CB 04 0B 00 88 A2 A0 AD AE A2 20 88 2E 88 2E 37')
и этот код выдаёт ту же ошибку:
pyshtrih.excepts.Error: 0xFF0C (Передать произвольную TLV структуру) - Некорректные параметры в команде (0x33)

Также такую ошибку выдаёт и такой вариант:
device.send_tlv_struct(b'FF0C1E000000CB040B0088A2A0ADAEA220882E882E37')

То есть в методе send_tlv_struct() в качестве свойства не воспринимается корректно пример произвольной TLV структуры от тех-поддержки штрих-м.
Может, ошибка в самом методе send_tlv_struct() и он просто работает некорректно? Если я не прав - прошу привести рабочий пример метода send_tlv_struct() с заполненным свойством tlv_struct

@UncleRus
Copy link

Денис, а вы уверены, что правильно используете литералы Python?
ЕМНИП, правильно будет все-таки так:

device.send_tlv_struct(b'\xFF\x0C\x1E\x00\x00\x00\xCB\x04\x0B\x00\x88\xA2\xA0\xAD\xAE\xA2\x20\x88\x2E\x88\x2E\x37')

@oleg-golovanov
Copy link
Owner

send_tlv_struct() принимает уже готовый набор байт (типы bytes или bytearray).

Для удобной работы с TLV структурами есть класс pyshtrih.FD. Но он поддерживает только тэг 1008 (другие мы просто не использовали). У этого класса есть атрибут TAGS. Попробуйте добавить в него нужные вам теги (там есть описание) и попробовать.

Пример использования:

fd = pyshtrih.FD(
    {
        1008: 'example@example.com',
    }
)

# При открытом чеке!
device.send_tlv_struct(fd.dump())

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants