Форум OlegON > Программы и оборудование для автоматизации торговли > Другие вопросы

ККТ штрих-фр-к, как правильно сформировать посылку в фр чтобы было как просит чз? : Другие вопросы

02.05.2024 4:15


03.04.2024 16:50
dmig2006
 
Добрый день.
Помогите разобраться с проблемой. Пытаюсь реализовать частичное списание пива. Кассовое ПО написано на с++. Использую документацию протокол ККТ 1_17 скачанное с сайта штриха. Как в примере на делфи или с# сделать не получится, только через инструкции

Как реализуется продаже молочной продукции.

Используются следующее инструкции: 0x46 0x61 0x67

0x46(FNOperation):

02 2E FF 46 1E 00 00 00 01 40 42 0F 00 00 00 04 42 00 00 00 FF FF FF FF FF FF FF FF FF FF 01 00 04 21 CF E8 E2 EE 20 ED E0 20 F0 E0 E7 EB E8 E2 D7

Отправляется данная посылка

Код:
    DataN[0]=0xFF;
    *((int*)(DataN+1))=0x46;//0x46;
    *((int*)(DataN+2))=RegPassword;
    *((int*)(DataN+6))=oper; //0x01 - приход, 0x02 - возврат прихода
    *((int*)(DataN+7))=Double2Int(Quantity*1000000);
    *((int*)(DataN+13))=Double2Int(Price*MCU); //цена
    *((int*)(DataN+18))=0xFF; // Сумма 5байт расчитывается атоматически
    *((int*)(DataN+19))=0xFFFFFFFF; // Сумма 5байт расчитывается автоматически
    *((int*)(DataN+23))=0xFF; // Налог 5байт расчитывается атоматически
    *((int*)(DataN+24))=0xFFFFFFFF; // Налог 5байт расчитывается автоматически
    *((int*)(DataN+28))=NDS; //НДС
    *((int*)(DataN+29))=Department%16; //0-16 режим свободной продажи 255 - режим по коду товара
    *((int*)(DataN+30))=PaymentType; // 4 - Полный расчет, 3 - Аванс
    *((int*)(DataN+31))=PaymentItem; // 1 - Товар, 15 - Внереализац. доход (остаток по сертификату)
    strncpy((char*)(DataN+32),Name,128); //Наименование

   int ret = ProcessError(JustDoIt(len,50)); //Отправляем в фр
0х61(FNCheckItemBarCode)

02 2E FF 46 1E 00 00 00 01 40 42 0F 00 00 00 04 42 00 00 00 FF FF FF FF FF FF FF FF FF FF 01 00 04 21 CF E8 E2 EE 20 ED E0 20 F0 E0 E7 EB E8 E2 D7

Код:
    DataN[0]=0xFF;
    *((int*)(DataN+1))=instr;
    *((int*)(DataN+2))=RegPassword;
*((int*)(DataN+6))=1; // Новый статус товара (Реализация)
        *((int*)(DataN+7))=0; //
        *((int*)(DataN+8))=len; // Длина кода маркировки
        *((int*)(DataN+9))=0; // 0-полная проверка, 1-онлайн-проверка, 2-локальная
        strncpy((char*)(DataN+10),MarkingBarcode, len);  // Код маркировки
        ret = ProcessError(JustDoIt(10+len,50));

0x67(FNSendItemBarCode)
02 26 FF 67 1E 00 00 00 1F 30 31 30 34 36 30 30 36 35 33 31 30 35 39 39 30 32 31 35 32 43 55 6E 71 1D 39 33 47 6B 33 30 8D

Код:
         int len = Actsiz.length();
        *((int*)(DataN+6))=len; // Длина кода маркировки
        strncpy((char*)(DataN+7),MarkingBarcode, len);  // Код маркировки
        ret = ProcessError(JustDoIt(7+len,50));
Все хорошо отрабатывает. Но при продаже разливного пива фр начинает ругаться
0x46 отработала фр не ругался
02 2E FF 46 1E 00 00 00 01 60 E3 16 00 00 00 04 42 00 00 00 FF FF FF FF FF FF FF FF FF FF 01 00 04 21 CF E8 E2 EE 20 ED E0 20 F0 E0 E7 EB E8 E2 4F все тоже самое только за место 1 колличество 1,5, но не вижу что мера литр. В тест драйвере во вкладке операции фн указал колличество 1,5 и меру литр, получил посылку
02 0B FF 4D 1E 00 00 00 3C 08 01 00 29 BB здесь нету не цен не налога ничего кроме того что мера литр

Сделал проверку 0x61
Данная функция отправила 02 3A FF 61 1E 00 00 00 02 00 1F 11 30 31 30 34 36 30 30 36 35 33 31 30 35 39 39 30 32 31 35 32 43 55 6E 71 1D 39 33 47 6B 33 30 (3C 08 01 00 29 - мера литр ) (FF 03 08 00 01 0F 00 00 00 00 00 00 - колличество 1,5) 62 Проверка прошла фр не ругается

Нажимаю передать и распознать км 0x67 он не ругается в фр отправляется
02 26 FF 67 1E 00 00 00 1F 30 31 30 34 36 30 30 36 35 33 31 30 35 39 39 30 32 31 35 32 43 55 6E 71 1D 39 33 47 6B 33 30 8D но тут нету не меры не колличества.

Как правильно сформировать посылку в фр чтобы было как просит чз (Тег 2000 маркировка, Тег 1023 колличество, Тег 2108 мера) при помощи инструкций из протокола, или хотя бы в какой последовательности и что нажимать в тест драйвере которое правильно работает и отправит частичное списание?
Часовой пояс GMT +3, время: 04:15.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.