0 Пользователей и 1 Гость просматривают эту тему.
В описании FNCloseCheckEx всё написано.
RoundingSumm CуммаОкругления Тип: Integer / Целое Сумма округления. Используется методом: FNCloseCheckEx
Ну тогда , что мешает посмотреть лог драйвера и тупо повторить.
Задайте вопрос напрямую прогеру Штриха на github, я думаю он точно решит этот вопрос.
Решил пойду-ка я на компромисс.А и не надо пользователям пробивать копейки, запретил категорически в цене копейки и что вы думаете.Начали вылезать автоматом какие-то округления в итоговой сумме чека . Облом полный. Спасибо прогерам Штриха, что не работает у меня ни шиша.Но у них-то из драйвера работает и даже очень прекрасно.Мораль такая, надо реализовывать протокол на байтовом уровне. К счастью он известен, правда не документирован и возможны вариации от модели к модели ккт, но другого пути я не вижу.ОЧЕНЬ БОЛЬШАЯ ПРОСЬБА ПРОГЕРАМ - У КОГО РАБОТАЮТ ДЕНЕЖНЫЕ СУММЫ С КОПЕЙКАМИ ?НУЖНА ИНФОРМАЦИЯ - НА КАКОМ ЯЗЫКЕ ПРОГРАММИРОВАНИЯ И В КАКОЙ СРЕДЕ РАЗРАБОТКИ ЭТО ВСЕ ТАКИ РАБОТАЕТ?
IDispatch *disphres = disp->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYPUT, ¶ms, 0, &excepinfo, &argerr);
С гитхаба Штрих подтвердил (спасибо им за оперативный ответ), что надо на С++ передавать цену как целое (8 байт), в копейках значение.Устанавливаю цену 12345. Дошел отладчиком уже до диспатч интерфейса. В памяти все 8 байт как надо (39 30 00 00 00 00 00 00)Код: [Выделить]IDispatch *disphres = disp->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYPUT, ¶ms, 0, &excepinfo, &argerr);Пробивает блин все-равно 12345.00. Причем похоже это со всеми ценами,суммами такая фигня. Посмотрел в программе TVD Online - там нормально все 123.45 пробивает.В общем доже интересно становится...
всё не так, есть же описание протокола в заголовке раздела, там всё расписано понятным языком и формат посылки и все команды по байтикам расписаны Формат сообщения: Байт 0: признак начала сообщения STX; Байт 1: длина сообщения (N) – ДВОИЧНОЕ число. В длину сообщения не включаются байты 0, LRC и этот байт; Байт 2: код команды или ответа – ДВОИЧНОЕ число; Байты 3...(N+1): параметры, зависящие от команды (могут отсутствовать); Байт N+2 – контрольная сумма сообщения – байт LRC – вычисляется поразрядным сложением (XOR) всех байтов сообщения (кроме байта 0).
поразрядным сложением (XOR) всех байтов сообщения (кроме байта 0).
Я тип Currency использую и проблем нет.
Это в Паскале похоже?
При обмене хост и ККТ оперируют сообщениями. Сообщение может содержатькоманду (от хоста) или ответ на команду (от ККТ).Формат сообщения:Байт 0: признак начала сообщения STX;Байт 1: длина сообщения (N) – ДВОИЧНОЕ число. В длину сообщения невключаются байты 0, LRC и этот байт;Байт 2: код команды или ответа – ДВОИЧНОЕ число;Байты 3...(N+1): параметры, зависящие от команды (могут отсутствовать);Байт N+2 – контрольная сумма сообщения – байт LRC – вычисляетсяпоразрядным сложением (XOR) всех байтов сообщения (кроме байта 0).
[0] {STX} – стартовый символ, обозначает начало пакета. Значение 0x8F.[1][2] {LEN16} – общая длина полей {NUM16, DATA[]} в байтах. Диапазон значенийLEN16 = 0, 2…65535.Если LEN16 = 0 (тип I) – пустой пакет без номера; поля: {STX, LEN16, CRC16}; длина пакета 5байт.[LEN+3] [LEN+4] {CRC16} – контрольная сумма, которая включает в себя байты полей {LEN16,NUM16, DATA[]} (если имеются).Если LEN16 = 2 (тип II) – пустой пакет с номером; поля: {STX, LEN16, NUM16, CRC16}; длинапакета 7 байт.[3][4] {NUM16} – номер пакета. Диапазон значений NUM = 0…65535. Начальное значение 1.Если LEN16 = 3…65535 (тип III) – информационный пакет; поля: {STX, LEN16, NUM16, DATA[],CRC16}; длина пакета 8…65540 байт.[5] {DATA[]} – информационное поле (блок) данных пакета. Длина блока данных LEN16 -2 = 1...65533 байтов
ну или переходить на кросплатформенный драйвер.
Это о чем?
Регистрация операции (добавляем предмет расчета).Похоже начинаю догадываться. Посмотрел в чем отличие моих передаваемых байтов (через USB протокол Device monitoring Studio) .У меня:02 22 46 1E 00 00 00 01 40 42 0F 00 00 00 C7 00 00 00 00 FF FF FF FF FF FF FF FF FF FF 08 01 04 01 33 33 33 8EИз драйвера (при нормальном результате):02 23 FF 46 1E 00 00 00 01 40 42 0F 00 00 00 C7 00 00 00 00 FF FF FF FF FF FF FF FF FF FF 08 01 04 01 33 33 33 70У меня в поле длина однобайтовая 22, а у драйвера штрих 23 FF (2 байта).