shtrih-m / sailfish2

0 stars 0 forks source link

Не работает fsWriteOperationTag #2

Open Tango600 opened 1 year ago

Tango600 commented 1 year ago

Не работает команда ff4d fsWriteOperationTag, даёт ошибку 5e. image

VitalyKravtsov2016 commented 1 year ago

Добрый день. Можно увидеть полный лог? Какая модель и версия ПО ФР?

Tango600 commented 1 year ago

Добрый день. Можно увидеть полный лог? Какая модель и версия ПО ФР?

shtrih_console.txt

VitalyKravtsov2016 commented 1 year ago

Добрый день. Привязка операции к позиции чека на этом ФР выполняется после формирования позиции. Разные модели ФР имеют разную реализацию. Это связано с тем, что над ФР работают 2 разработчика. Команда формирования позиции чека 0x80 не работает потому, что старые команды выкинули. Нужно использовать новую команду, 0xFF46.

Tango600 commented 1 year ago

Там много старых команд.

VitalyKravtsov2016 commented 1 year ago

Старые команды формирования чека работать не будут. 80h Продажа 81h Покупка 82h Возврат продажи 83h Возврат покупки 85h Закрытие чека Нужно использовать вместо них новые.

Tango600 commented 1 year ago

В этом драйвере есть и другие методы, которые сейчас работают не так как в нём сделано?

VitalyKravtsov2016 commented 1 year ago

Не совсем понял ваш вопрос. Можно подробнее?

Tango600 commented 1 year ago

Много ли методов которые не работают потому что сейчас нужно делать по-другому? Другие коды команд, например. Или совсем не так делать теперь нужно.

VitalyKravtsov2016 commented 1 year ago

Также мне кажется что передается в команду 80h неправильное значение налога: 80 1E 00 00 00 - пароль E8 03 00 00 00 - количес тво 10 27 00 00 00 - цена EA - налог 1, допустимые дначения от 0 до 4

D::0| "-> 80 1E 00 00 00 E8 03 00 00 00 10 27 00 00 00 EA 00 00 00 00" D::0| "-> CF F0 E8 E5 EC 20 EF EB E0 F2 E5 E6 E0 00 00 00 00 00 00 00" D::0| "-> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00" W::0| "Incorrect command parameters for this settings" D::0| "<- 80 35" D::0| "ERROR: 0x35, Incorrect command parameters for this settings" D:ShtrihKkmManager.cpp:478| "FAILED: 0x35, Incorrect command parameters for this settings"

Tango600 commented 1 year ago

Старые команды формирования чека работать не будут. 80h Продажа 81h Покупка 82h Возврат продажи 83h Возврат покупки 85h Закрытие чека Нужно использовать вместо них новые.

На какие? В JPos драйвере тоже PrintSale имеет код 80h.

Tango600 commented 1 year ago

Также мне кажется что передается в команду 80h неправильное значение налога: 80 1E 00 00 00 - пароль E8 03 00 00 00 - количес тво 10 27 00 00 00 - цена EA - налог 1, допустимые дначения от 0 до 4

D::0| "-> 80 1E 00 00 00 E8 03 00 00 00 10 27 00 00 00 EA 00 00 00 00" D::0| "-> CF F0 E8 E5 EC 20 EF EB E0 F2 E5 E6 E0 00 00 00 00 00 00 00" D::0| "-> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00" W::0| "Incorrect command parameters for this settings" D::0| "<- 80 35" D::0| "ERROR: 0x35, Incorrect command parameters for this settings" D:ShtrihKkmManager.cpp:478| "FAILED: 0x35, Incorrect command parameters for this settings"

Странно, но ничего подобного в поля taxX не пишется. Там везде 0 с 1 по 4. Коды поменял, но ошибка в области налога. Так что проверить пока не удаётся.

Tango600 commented 1 year ago

Для чего в методе int ShtrihFiscalPrinter::execute(uint16_t code, ReceiptItemCommand& data), сделано принудительное заполнение полей.

int ShtrihFiscalPrinter::execute(uint16_t code, ReceiptItemCommand& data)
{
    data.resultCode = printTextSplit(data.text);
    if (failed(data.resultCode)) {
        return data.resultCode;
    }

    data.text = data.text.left(40);

    PrinterCommand command(code);
    command.write(usrPassword, 4);
    command.write(data.quantity, 5);
    command.write(data.price, 5);
    command.write(data.department, 1);
    command.write(data.tax1, 1);
    command.write(data.tax2, 1);
    command.write(data.tax3, 1);
    command.write(data.tax4, 1);
    command.write(data.text, 40);
    data.resultCode = send(command);
    if (succeeded(data.resultCode)) {
        data.operatorNumber = command.readChar();
    }
    return data.resultCode;
}
VitalyKravtsov2016 commented 1 year ago

Добрый день. Это не принудительное заполнение, а запись в буфер значений. Для каждого поля указана длина: пароль - 4 байта, количество - 5 байт.

Tango600 commented 1 year ago

"4 байта, количество - 5 байт", это как?

VitalyKravtsov2016 commented 1 year ago

Описание команды:

Продажа Код команды: 80h. Длина сообщения: 60 или 20+Y1,2 байт. Пароль оператора (4 байта) Количество (5 байт) 0000000000…9999999999 Цена (5 байт) 0000000000…9999999999 Номер отдела (1 байт) 0…16 – режим свободной продажи, 255 – режим продажи по коду товара1,3 Налог 1 (1 байт) «0» – нет, «1»…«4» – налоговая группа Налог 2 (1 байт) «0» – нет, «1»…«4» – налоговая группа Налог 3 (1 байт) «0» – нет, «1»…«4» – налоговая группа Налог 4 (1 байт) «0» – нет, «1»…«4» – налоговая группа Текст4,5,6,7 (40 или до Y1,2 байт) строка названия товара или строка "XXXX" кода товара1,3, где XXXX = 0001…9999 Ответ: 80h. Длина сообщения: 3 байта. Код ошибки (1 байт) Порядковый номер оператора (1 байт) 1…30

VitalyKravtsov2016 commented 1 year ago

Тут видно, что: Пароль оператора (4 байта) Количество (5 байт) 0000000000…9999999999