:: Visual Foxpro, Foxpro for DOS
Маркировочные коды с ДТО 10 Атола
Victoriacom

Сообщений: 111
Дата регистрации: 08.12.2010
Всем привет!
Кто-нибудь работал с обязательными маркировочными кодами на ДТО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
Дата регистрации: 12.07.2007
Важно: работы с методами разбора данных массива от сканера ШК (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 Атола
Евгений Банщиков
Автор

Сообщений: 218
Откуда: Kurgan
Дата регистрации: 09.04.2004
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
Re: Маркировочные коды с ДТО 10 Атола
Victoriacom

Сообщений: 111
Дата регистрации: 08.12.2010
Здравствуйте!
Вариант распарсивания без .parseMarkingCode() я сделал давно. Сейчас, под конец года, все засуетились, - вынь да полож им кассовое ПО с маркировкой одежды, лекарств и т.д.
Предвидя кучу геморроя с ручным распарсиванием, решил попробовать еще раз .parseMarkingCode().
Благодаря Вам всё получилось легко и просто!
Спасибо и с наступающим!


------------------
Алло, это прачечная? Да, это прачечная. Здравствуйте.
Ratings: 0 negative/0 positive
Re: Маркировочные коды с ДТО 10 Атола
Victoriacom

Сообщений: 111
Дата регистрации: 08.12.2010
Евгений Банщиков
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))

Здравствуйте!
Вариант распарсивания без .parseMarkingCode() я сделал давно. Сейчас, под конец года, все засуетились, - вынь да полож им кассовое ПО с маркировкой одежды, лекарств и т.д.
Предвидя кучу геморроя с ручным распарсиванием, решил попробовать еще раз .parseMarkingCode().
Благодаря Вам всё получилось легко и просто!
Спасибо и с наступающим!


------------------
Алло, это прачечная? Да, это прачечная. Здравствуйте.
Ratings: 0 negative/0 positive
Re: Маркировочные коды с ДТО 10 Атола
Victoriacom

Сообщений: 111
Дата регистрации: 08.12.2010
Похоже я поторопился с успехом. Формирование тэга 1162 с помощью parseMarkingCode как будто бы отработало правильно. В логе fptr10.log ошибок не появилось. Но когда позвонили в ОФД, оказалось что к ним пришла какая-то фигня вместо тэга.
Попробовал вариант без parseMarkingCode. В ОФД пришел тэг, но без вида номенклатуры.
Вот мой код:
FP.setParam(LIBFPTR_PARAM_COMMODITY_NAME, {наименование товара})
FP.setParam(LIBFPTR_PARAM_PRICE, [цена})
FP.setParam(LIBFPTR_PARAM_QUANTITY, {количество})
IF INT({количество}) <> {количество}
FP.setParam(LIBFPTR_PARAM_COMMODITY_PIECE, 0) && весовой товар
ELSE
FP.setParam(LIBFPTR_PARAM_COMMODITY_PIECE, 1) && штучный
ENDIF
cFullKod = ALLT({отсканированный маркировочный код})
cHexCode = STRCONV(cFullKod, 15)
cRes = ''
DO WHILE LEN(cHexCode) > 0
cRes = cRes + LEFT(cHexCode,2) + ' '
cHexCode = SUBSTR(cHexCode, 3)
ENDDO
cHexCode = ALLT(cRes)
FP.setParam(LIBFPTR_PARAM_MARKING_CODE_TYPE, LIBFPTR_NT_CLOTHES)
FP.setParamStrHex(LIBFPTR_PARAM_MARKING_CODE, cHexCode)
...
FP.registration()

Как передавать вид номенклатуры? Я полагал, что в команде "FP.setParam(LIBFPTR_PARAM_MARKING_CODE_TYPE, LIBFPTR_NT_CLOTHES)"


------------------
Алло, это прачечная? Да, это прачечная. Здравствуйте.
Ratings: 0 negative/0 positive


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

On-line: 31 PaulWist  (Гостей: 30)

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