shtrih-m / fr_drv_ng_examples

Примеры использования https://github.com/shtrih-m/fr_drv_ng
10 stars 2 forks source link

Смартпос. Как узнать какой формат фискальных документов используется на ккт? #4

Closed try2bajed1 closed 5 years ago

try2bajed1 commented 5 years ago

можно ли вытащить информацию из принтера по поводу формата фискльных документов?

swex commented 5 years ago

конечно можно. Получить можно из таблицы, номер таблицы, поля получается из свойства.

    ci->Set_ModelParamNumber(classic_interface::DPE_FFDVersionTableNumber);
    checkResult(ci->ReadModelParamValue());
    auto ffdVersionTable = ci->Get_ModelParamValue();
    ci->Set_ModelParamNumber(classic_interface::DPE_FFDVersionFieldNumber);
    checkResult(ci->ReadModelParamValue());
    auto ffdVersionField = ci->Get_ModelParamValue();

0 - Формат ФД 1.0 2 - Формат ФД 1.05

Почитайте общее руководство, там есть втч об этом.

try2bajed1 commented 5 years ago

Set_ModelParamNumber(classic_interface.DevicePropertiesEnumeration.DPE_FFDVersionTableNumber.swigValue()) checkResult(ReadModelParamValue()) Get_ModelParamValue() Set_ModelParamNumber(classic_interface.DevicePropertiesEnumeration.DPE_FFDVersionFieldNumber.swigValue()) checkResult(ReadModelParamValue()) Log.w("value ${Get_ModelParamValue()}") Вот мой джава код у меня получается в логе значение 29. Я что то не так делаю?

swex commented 5 years ago

Всё правильно. Вы получате номер таблицы, и поле таблицы(его выводите на печать). Теперь вам нужно прочитать содержимое этой таблицы методом. ReadTable.

try2bajed1 commented 5 years ago

т.е вызов ReadTable() после всех манипуляций мне должен вернуть нужное значение? сейчас он мне отдает 93. А вроде как 0 или 2 должно быть...

swex commented 5 years ago

если ошибок нет - ReadTable вернёт 0. А содержимое таблицы будет помещено в свойство ValueOfFieldString или ValueOfFieldInteger в зависимости от типа поля.

try2bajed1 commented 5 years ago

Не получаю я ноль для ффд. Не подскажете в чем ошибка?

PrintStringWithFont() ok Set_ModelParamNumber(82) Set_ModelParamNumber() ok ReadModelParamValue() ReadModelParamValue() ok Get_ModelParamValue() Get_ModelParamValue() -> 10 Set_ModelParamNumber(83) Set_ModelParamNumber() ok ReadModelParamValue() ReadModelParamValue() ok Get_ModelParamValue() Get_ModelParamValue() -> 29 ReadTable() -> 8F 08 00 12 00 2D 1E 00 00 00 00 D9 A9 <- 8F <- 04 00 12 00 2D 5D 9C 05 command 2D return code: 93 execution took 7ms Table is undefined commands total: 18, succeed: 17, failed: 1, avg. exec time: 15ms ReadTable() fail Table is undefined

swex commented 5 years ago

Вы запросили номер поля и номер таблицы. Но вы не поместили их в соответствующие свойства. TableNumber и FieldNumber. Перед вызовом ReadTable нужно назначить все свойства которые этот метод использует. См. документацию.

try2bajed1 commented 5 years ago

Не думал, что такая тривиальная задача растянется на 2 недели. Вот мой джава код: Set_ModelParamNumber(classic_interface.DevicePropertiesEnumeration.DPE_FFDVersionTableNumber.swigValue()) ReadModelParamValue() val tableNum = Get_ModelParamValue() Set_TableNumber(tableNum) Set_ModelParamNumber(classic_interface.DevicePropertiesEnumeration.DPE_FFDVersionFieldNumber.swigValue()) ReadModelParamValue() val fieldNum = Get_ModelParamValue() Set_FieldNumber(fieldNum) Get_ValueOfFieldInteger() Set_Password(30) w("value ${ReadTable()}")//вывожу в консоль результат

вот то что я получаю в логах. ошибка 51(неверные параметры для команды, видимо этот readTable требует других команд)

[T] Set_ModelParamNumber(82) [T] Set_ModelParamNumber() ok [T] ReadModelParamValue() [T] ReadModelParamValue() ok [T] Get_ModelParamValue() [T] Get_ModelParamValue() -> 10 [T] Set_TableNumber(10) [T] Set_TableNumber() ok [T] Set_ModelParamNumber(83) [T] Set_ModelParamNumber() ok [T] ReadModelParamValue() [T] ReadModelParamValue() ok [T] Get_ModelParamValue() [T] Get_ModelParamValue() -> 29 [T] Set_FieldNumber(29) [T] Set_FieldNumber() ok [T] Get_ValueOfFieldInteger() [T] Get_ValueOfFieldInteger() -> 0 [T] Set_Password(30) [T] Set_Password() ok [T] ReadTable() [D] -> 8F 08 00 12 00 2D 1E 00 00 00 0A 93 08 [D] <- 8F [D] <- 2F 00 12 00 2D 00 D1 CB D3 C6 C5 C1 CD C0 DF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 28 00 CB [D] command 2D return code: 0 execution took 1ms [D] commands total: 18, succeed: 18, failed: 0, avg. exec time: 14ms [D] -> 8F 09 00 13 00 2E 1E 00 00 00 0A 1D 7C 3A [D] <- 8F [D] <- 30 00 13 00 2E 00 D4 CE D0 CC C0 D2 20 D4 C4 2C 20 30 20 2D 20 31 2E 30 2C 20 32 20 2D 20 31 2E 30 35 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 02 24 9F 83 [D] command 2E return code: 0 execution took 1ms [D] commands total: 19, succeed: 19, failed: 0, avg. exec time: 13ms [D] -> 8F 0B 00 14 00 1F 1E 00 00 00 0A 00 00 1D B1 2B [D] <- 8F [D] <- 04 00 14 00 1F 33 9A CC [D] command 1F return code: 51 execution took 9ms [E] Incorrect command parameters [D] commands total: 20, succeed: 19, failed: 1, avg. exec time: 13ms [D] ReadTable() fail [E] Incorrect command parameters [T] Disconnect() [I] disconnect() [I] close() [T] Disconnect() ok

Вот я смотрю фак. Там только как в таблицу записать. https://github.com/shtrih-m/fr_drv_ng/wiki/%D0%A7%D0%B0%D1%81%D1%82%D0%BE-%D0%B7%D0%B0%D0%B4%D0%B0%D0%B2%D0%B0%D0%B5%D0%BC%D1%8B%D0%B5-%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D1%8B-%D0%BF%D1%80%D0%BE-classic_fr_drv_ng#EditTable

Вот я смотрю метод ReadTable https://github.com/shtrih-m/fr_drv_ng/wiki/Methods#group___base_methods_1ga892e4751efdb0742f50ffa2482f60729

Там пишут что нужны Password - пароль системного администратора (задаю перед извлечение), TableNumber - номер таблицы (видимо мы его получаем), RowNumber - номер ряда (в драйвере нет метода Get_RawNumber), FieldNumber - номер поля (видимо мы его получаем).

Так как правильно обратиться к таблице? Дайте пожалуйста пример, на данный момент лишь происходят отсылки непонятно куда.

swex commented 5 years ago

Всё хорошо, кроме того что не назначено свойство RowNumber - Ряд. Для таблиц, которые используются как ключ/значение(10 таблица это такой случай) оно должно равняться 1.

try2bajed1 commented 5 years ago

О алилуя, я получил ноль. Большое спасибо! Т.е ффд 1.0 используется. А есть значение для ффд 1.1 ? Или еще нет поддежки этой версии?

swex commented 5 years ago

Странно. Там не должен быть 0. Само значение должно быть в свойстве ValueOfFieldInteger. После ReadTable нужно запросить содержимое ValueOfFieldInteger. 1.1 еще неподдерживается, какое значение будет в поле с 1.1 пока сказать не могу.

try2bajed1 commented 5 years ago

а, вот как нужно. я просто думал что формат считываемого значения надо задавать до readTable() сейчас да, я получаю двойку. Тобишь на актуальной 1.05 сидим.Еще раз спасибо за помощь.