Главная категория > Посцентр (ШТРИХ-М)
Штрих онлайн ( ФФД 1.05) округляет цену до рубля - как убрать?
kkmspb:
>На .net никаких проблем с копейками не возникает
На .net и суда нет.
Посмотрел на гитхабе у Штриха примеры и похоже облом у них там для С++:
Посмотрел объявление использования параметра Price в Qt
Q_PROPERTY(qint64 Price READ Get_Price WRITE Set_Price NOTIFY PriceChanged)
Как тут можно передавать дробное число , точнее копейки, примерно так 123.45.
Написал им там в гитхаб, жду ответки...
С другой стороны для количества имеем такое объявление:
Q_PROPERTY(double Quantity READ Get_Quantity WRITE Set_Quantity NOTIFY QuantityChanged)
Количество можно передавать дробное, все работает корректно.
Но как быть с Price?
У сумм тоже копейки не проходят:
Q_PROPERTY(qint64 Summ11 READ Get_Summ11 WRITE Set_Summ11 NOTIFY Summ11Changed)
kkmspb:
Хотел спросить про байтовый протокол.
Все вроде понятно
1,99*1шт
"333"
приход
товар
полный расчет
шт. - 1.05 (только 1 вариант) другие не проходят,
без НДС
1 отдел
02
23 FF длина (со след байта и до конца, сключая CRC)
46 код команды
1E 00 длина пакета
00 00 номер пакета
01 приход
40 42 0F 00 00 00 количество
C7 00 00 00 00 цена 199
FF FF FF FF FF
FF FF FF FF FF сумма налога
08 ставка налога 1 - 20%, 2 - 10%, 4 - 0%, 8 - без НДС, 10 - 120% , 20 - 110%
01 отдел
04 полный расчет, аванс
01 товар, услуга
33 33 33 наименоваание предмета расчета
70
Только CRC не догоняю как создавать, может кто знает?
DanShi:
всё не так, есть же описание протокола в заголовке раздела, там всё расписано понятным языком и формат посылки и все команды по байтикам расписаны
Формат сообщения:
Байт 0: признак начала сообщения STX;
Байт 1: длина сообщения (N) – ДВОИЧНОЕ число. В длину сообщения не
включаются байты 0, LRC и этот байт;
Байт 2: код команды или ответа – ДВОИЧНОЕ число;
Байты 3...(N+1): параметры, зависящие от команды (могут отсутствовать);
Байт N+2 – контрольная сумма сообщения – байт LRC – вычисляется
поразрядным сложением (XOR) всех байтов сообщения (кроме байта 0).
kkmspb:
С гитхаба Штрих подтвердил (спасибо им за оперативный ответ), что надо на С++ передавать цену как целое (8 байт), в копейках значение.
Устанавливаю цену 12345. Дошел отладчиком уже до диспатч интерфейса. В памяти все 8 байт как надо (39 30 00 00 00 00 00 00)
--- Код: ---
IDispatch *disp
hres = disp->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYPUT, ¶ms, 0, &excepinfo, &argerr);
--- Конец кода ---
Пробивает блин все-равно 12345.00. Причем похоже это со всеми ценами,суммами такая фигня.
Посмотрел в программе TVD Online - там нормально все 123.45 пробивает.
В общем доже интересно становится...
kkmspb:
--- Цитата: kkmspb от 23/03/2025 18:29:50 ---С гитхаба Штрих подтвердил (спасибо им за оперативный ответ), что надо на С++ передавать цену как целое (8 байт), в копейках значение.
Устанавливаю цену 12345. Дошел отладчиком уже до диспатч интерфейса. В памяти все 8 байт как надо (39 30 00 00 00 00 00 00)
--- Код: ---
IDispatch *disp
hres = disp->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYPUT, ¶ms, 0, &excepinfo, &argerr);
--- Конец кода ---
Пробивает блин все-равно 12345.00. Причем похоже это со всеми ценами,суммами такая фигня.
Посмотрел в программе TVD Online - там нормально все 123.45 пробивает.
В общем доже интересно становится...
--- Конец цитаты ---
--- Цитата: DanShi от 23/03/2025 17:46:11 ---всё не так, есть же описание протокола в заголовке раздела, там всё расписано понятным языком и формат посылки и все команды по байтикам расписаны
Формат сообщения:
Байт 0: признак начала сообщения STX;
Байт 1: длина сообщения (N) – ДВОИЧНОЕ число. В длину сообщения не
включаются байты 0, LRC и этот байт;
Байт 2: код команды или ответа – ДВОИЧНОЕ число;
Байты 3...(N+1): параметры, зависящие от команды (могут отсутствовать);
Байт N+2 – контрольная сумма сообщения – байт LRC – вычисляется
поразрядным сложением (XOR) всех байтов сообщения (кроме байта 0).
--- Конец цитаты ---
Навигация
Перейти к полной версии