Closed Tango600 closed 1 year ago
Судя по всему, Штрих-Нано-Ф не поддерживает очистку буфера кодов маркировки. В ФР Сергея Ляховича это работает. Попрошу разработчика ФР поправить.
А как быть с проверкой кода, точнее с получением результат проверки?
Судя по всему, Штрих-Нано-Ф не поддерживает очистку буфера кодов маркировки. В ФР Сергея Ляховича это работает. Попрошу разработчика ФР поправить.
Пока рабочим способом является только чтение документа из кассы и выявлением тега 2106.
Для проверки кода маркировки нужно использовать команду FF61. В драйвере это код команды directIO SMFPTR_DIO_CHECK_ITEM_CODE2. В ответе возвращается значение тега 2106.
Для проверки кода маркировки нужно использовать команду FF61. В драйвере это код команды directIO SMFPTR_DIO_CHECK_ITEM_CODE2. В ответе возвращается значение тега 2106.
А какой это метод драйвера?
Это метод directIO(SMFPTR_DIO_CHECK_ITEM_CODE2). Реализация метода: public void execute(int[] data, Object object) throws Exception {
Object[] params = (Object[])object;
DIOUtils.checkObjectMinLength(params, 10);
FSCheckMC command = new FSCheckMC();
command.itemStatus = (Integer)params[0];
command.checkMode = (Integer)params[1];
command.mcData = (byte[])params[2];
command.tlv = (byte[])params[3];
getPrinter().check(getPrinter().fsCheckMC(command));
params[4] = new Integer(command.localCheckStatus);
params[5] = new Integer(command.localErrorCode);
params[6] = new Integer(command.symbolicType);
params[7] = new Integer(command.serverErrorCode);
params[8] = new Integer(command.serverCheckStatus);
params[9] = command.serverTLVData;
}
Сейчас добавлю в класс ShtrihFiscalPrinter113
Кроме не ещё реализованного в версии 633, метода, другие аналогичные или какая то комбинация методов не работают? ККМ: Штрих-Нано-Ф.
Метод реализован давно. Просто здесь я проиллюстрировал реализацию.
Класс ShtrihFiscalPrinter113 упрощает вызов команд directIO
https://github.com/shtrih-m/javapos_shtrih/releases/tag/687
public class CheckItemCodeResponse
{
public int localCheckStatus;
public int localErrorCode;
public int symbolicType;
public int serverErrorCode;
public int serverCheckStatus;
public byte[] serverTLVData;
public CheckItemCodeResponse(){
}
}
public CheckItemCodeResponse checkItemCode2(int itemStatus,
int checkMode, byte[] data, byte[] tlv) throws Exception{
Object[] params = new Object[10];
params[0] = new Integer(itemStatus);
params[1] = new Integer(checkMode);
params[2] = data;
params[3] = tlv;
directIO(SmFptrConst.SMFPTR_DIO_CHECK_ITEM_CODE2, null, params);
CheckItemCodeResponse response = new CheckItemCodeResponse();
response.localCheckStatus = (Integer)params[4];
response.localErrorCode = (Integer)params[5];
response.symbolicType = (Integer)params[6];
response.serverErrorCode = (Integer)params[7];
response.serverCheckStatus = (Integer)params[8];
response.serverTLVData = (byte[])params[9];
return response;
}
Для проверки кода маркировки нужно использовать команду FF61. В драйвере это код команды directIO SMFPTR_DIO_CHECK_ITEM_CODE2. В ответе возвращается значение тега 2106.
Нет. public static final int SMFPTR_DIO_SEND_ITEM_CODE = 0x61;
Вызов checkItemCode2(1, 0, codeRawData, new byte[0]) приводит к невозможности закрыть чек. Вызов checkItemCode2(1, 0, codeRawData, null) к ошибке, разрыву соединения.
На Штрих Нано.
Провёл на драйвере 692, чеки закрываются, соединение не рвётся.
А что с повторным соединением?
У меня таких проблем не поступало, подхватывает сразу. Посмотрим через неделю, как разойдётся приложение по сети.
Имеется следующая последовательность вызова методов для регистрации позиции в чеке согласно примеру из FFD105Documents
:
fsWriteOperationTag(2108, 0)
setParameter(SmFptrConst.SMFPTR_DIO_PARAM_ITEM_PAYMENT_TYPE, 4)
setParameter(SmFptrConst.SMFPTR_DIO_PARAM_ITEM_SUBJECT_TYPE, 33)
setParameter(SmFptrConst.SMFPTR_DIO_PARAM_ITEM_TOTAL_AMOUNT, 100)
printRecItem(...)
В какой момент необходимо вызывать checkItemCode2
, setItemCode
, acceptItemCode(true)
и какая должна быть последовательность вызова, чтобы печаталось [M+/-]?
И еще вопрос, у атола есть таймаут на серверную проверку КМ, есть ли для штриха такая опция?
У меня лучше всего работала такая последовательность. Но, результат проверки я ловил уже разбирая сам чек, после проведения.
printer.setItemCode(goodCheckInfo.codeMarking);
printer.checkItemCode(goodCheckInfo.codeMarking);
У меня лучше всего работала такая последовательность. Но, результат проверки я ловил уже разбирая сам чек, после проведения.
printer.setItemCode(goodCheckInfo.codeMarking); printer.checkItemCode(goodCheckInfo.codeMarking);
Вызываете просто checkItemCode(code)
без передачи планируемого статуса и без меры и дробной части для весовой молочки?
И таймауты никак не ставятся?
Параметры передаю ранее. Про таймауты не знаю.
Добрый день. Таймауты проверки КМ задаются в таблице ФР 19, Параметры офд: 19,1,7,2,0,5,65535,'Таймаут чтения ответа км','33' 19,1,8,2,0,2,65535,'Таймаут чтения ответа км при проверке','5'
Что даёт команда checkItemCode2 на МГМ-ФН? У меня получается вот что: Что значит поле localErrorCode, оно не 0.
@Tango600 Вот в исходниках нашел:
Касса: Штрих-Нано-Ф, прошивка версии 355. Драйвер версии: 679. При вызове mcClearBuffer происходит исключение. errorCode=114, extended=461. сообщение=161, FS: Invalid 0xBx command sequence.