for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Лисоводы   всех   стран,  объединяйтесь !!!  

Список Форумов  :: Visual Foxpro, Foxpro for DOS
  

Маркировочные коды с ДТО 10 Атола
Victoriacom
Автор

Сообщений: 74
Дата: 25.12.19 09:53:39
Всем привет!
Кто-нибудь работал с обязательными маркировочными кодами на ДТО10?
Собственно, ПО верхнего уровня для дто10 уже сделал давно.
И с маркировкой тоже работаю. Просто в последней версии драйвера появился новый способ передавать тэг 1162 на ОФД.
В старой версии у меня так:

*-* cFullKod - считанный маркировочный код  
 *-* cGtin - первые 14 байт кода, т.н. GTIN  
    
  cGtin = LEFT(cFullKod, 14)  
    
  cSerial = SUBSTR(cFullKod, 15, 13) - код товара (для лекарств - 13 байт)  
    
 *-* FP - это объект, полученный при инициализации драйвера:  
  FP = CREATEOBJECT("AddIn.Fptr10")  
    
 *-* Идет формирование тэга 1162 для последующей отправки на ОФД:  
    
  FP.setParam(LIBFPTR_PARAM_NOMENCLATURE_TYPE, LIBFPTR_NT_MEDICINES)  
  FP.setParam(LIBFPTR_PARAM_GTIN, cGtin)  
  FP.setParam(LIBFPTR_PARAM_SERIAL_NUMBER, cSerial)  
  FP.utilFormNomenclature()  
  cTag1162 = FP.getParamString(LIBFPTR_PARAM_TAG_VALUE)

При этом cTag1162 получает значение типа "03 02 01 ..."

.... далее регистрируется товарная позиция наименование, цена, количество...налоги, виды оплат...

*-* отправка на ОФД:  
  FP.setParamStrHex(1162, cTag1162)

Это работает.

В последней версии драйвера они придумали новую функцию parseMarkingCode(), которая должна сама распарсить отсканированный код.
Из документации это должно выглядеть так:

fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_CODE, new byte[]{0x52, 0x55, 0x2D, 0x34, 0x30,  
                                                                 0x31, 0x33, 0x30, 0x31, 0x2d,  
                                                                 0x41, 0x41, 0x41, 0x30, 0x32,  
                                                                 0x37, 0x37, 0x30, 0x33, 0x30,  
                                                                 0x31});  
  fptr.parseMarkingCode();  
  byte[] tag1162 = fptr.getParamByteArray(1162);

Там используется тип "bytearray". В документации написано так:

"При использовании COM-объекта ваш язык может не поддерживать получение из драйвера параметра типа bytearray. В этом случае можно использовать обходной вариант. Нужно запросить такой параметр через getParamString(), он вернет строку с последовательностью байтов вида "01 02 FF AA". Далее, эту строку можно записать во входной параметр любого метода через методы setParamStrHex() или setNonPrintableParamStrHex(), и она запишется в драйвер как bytearray."

Написал так:
FP.setParamStrHex(LIBFPTR_PARAM_MARKING_CODE, cFullKod)  
  FP.parseMarkingCode()  
  cTag1162 = FP.getParamString(1162)

И нифига не получается. Переменная cTag1162 остается пустой строкой.
Пробовал разные варианты:

setNonPrintableParamStrHex()

Пробовал передавать в качестве параметра STRCONV(cFullKod, 15) в сочетании с FP.setParam(). Создавал массив
aByteArray[] со сначениями ASC(байт 1) ...ASC(байт N).

Всё тщетно.

Может быть кто-нибудь уже пробовал parseMarkingCode()?
Ratings: 0 negative/0 positive

Re: Маркировочные коды с ДТО 10 Атола
MayDay

Сообщений: 2
Дата: 26.02.20 19:56:14
Важно: работы с методами разбора данных массива от сканера ШК (LIBFPTR_PARAM_MARKING_CODE/markingCode)
возможна только на прошивках ККТ, где данный метод поддержан и версии драйвера 10.6.1.0 и выше
Платформа 5.0 - прошивка 5.7.0 и выше (с лицензией Маркировка)
Платформа 2.5 - прошивка 12-8502 и выше

onedrive.live.com
Ratings: 0 negative/0 positive

Re: Маркировочные коды с ДТО 10 Атола
Евгений Банщиков

Сообщений: 213
Откуда: Kurgan
Дата: 27.02.20 10:11:50
Victoriacom
Всем привет!
Кто-нибудь работал с обязательными маркировочными кодами на ДТО10?


Написал так:
FP.setParamStrHex(LIBFPTR_PARAM_MARKING_CODE, cFullKod)  
  FP.parseMarkingCode()  
  cTag1162 = FP.getParamString(1162)

И нифига не получается. Переменная cTag1162 остается пустой строкой.
Может быть кто-нибудь уже пробовал parseMarkingCode()?


FP.setParamStrHex(LIBFPTR_PARAM_MARKING_CODE, cFullKod) - для данного метода cFullKod должен быть записан в виде последовательности байтов типа "03 02 01 ..."

Документация атола , мягко говоря, выдает неверную инфу . getParamString() вернет не строку вида "01 02 FF AA" , а исходную строку текста.


Я делаю так - преобразовываю текст марки к виду "03 02 01 ..." ( делаю через Strconv(marka,15) и добавление пробелов) и записать полученный результат в LIBFPTR_PARAM_MARKING_CODE через метод setParamStrHex. Более ничего делать не надо , parseMarkingCode не нужен , но только устанавливать LIBFPTR_PARAM_MARKING_CODE нужно после задания LIBFPTR_PARAM_COMMODITY_NAME. Считать тег 1162 в фоксе для проверки можно так Transform(.getParamByteArray(1162))
Ratings: 0 negative/0 positive



Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 5 (Гостей: 5)

22.09.2020 04:02:53 exec: 0.09
Mem: 1.122 Mb

© 2000-2020 Fox Club 
Яндекс.Метрика