:: Visual Foxpro, Foxpro for DOS
И снова маркировка Атол
Victoriacom
Автор

Сообщений: 111
Дата регистрации: 08.12.2010
Здравствуйте, товарищи!
Вынужден кричать HELP!
Клиенты, как сговорились, под Новый Год решили переходить на обязательную маркировку. Раньше у них не было времени!

Есть ли у кого-нибудь рабочий код регистрации товара с кодом маркировки?

Установил драйвер 10.8.0.0.
Перепробовал много вариантов, но всё упирается в ОФД. Звоню им. Говорят что, то не приходит к ним тэг 1162 совсем. То приходит без типа номенклатуры.

Самый мой старый вариант, который почему-то работает с лекарствами в аптеке (уже года 2):

cFullCode = ALLT(cFullCode)
*-* убираем первые 2 байта - они не нужны
cFullCode = SUBSTR(cFullCode, 3)
*-* gtin всегда 14
cGtin = LEFT(cFullCode, 14)
cFullCode = SUBSTR(cFullCode, 15)
*-* следующие 2 байта "21" тоже не нужны
cFullCode = SUBSTR(cFullCode, 3)
DO CASE
CASE nTypeNom = LIBFPTR_NT_FURS
cSerial = LEFT(cFullCode,20)
CASE nTypeNom = LIBFPTR_NT_MEDICINES
cSerial = LEFT(cFullCode,13)
CASE nTypeNom = LIBFPTR_NT_TOBACCO
cSerial = LEFT(cFullCode,7)
CASE nTypeNom = LIBFPTR_NT_SHOES
cSerial = LEFT(cFullCode,13)
CASE nTypeNom = LIBFPTR_NT_CLOTHES
*!* INLIST(ipcnakl_fiskal.Tob_Type, '6201', '6202', '6106', '4203', '6302') && одежда
*-* 6201 - пальто, куртки, ветровки и т.д. для мальчиков
*-* 6202 - пальто, куртки, ветровки и т.д. для девочек
*-* 6106 - блузки, блузоны и всё однокоренное
*-* 4203 10 000 - одежда из натуральной кожи
*-* 6302 - послельное, столовое, кухонное бельё
cSerial = LEFT(cFullCode,21)
ENDCASE
FP.setParam(LIBFPTR_PARAM_NOMENCLATURE_TYPE, nTypeNom)
FP.setParam(LIBFPTR_PARAM_GTIN, cGtin)
FP.setParam(LIBFPTR_PARAM_SERIAL_NUMBER, cSerial)
FP.utilFormNomenclature()
cTag1162 = FP.getParamString(LIBFPTR_PARAM_TAG_VALUE)
...
FP.setParam(1212,1) && признак предмета расчета (товар)
FP.setParam(1214,4) && признак способа расчета (полный расчет)
FP.setParam(1162, cTag1162)
FP.registration()

Причем, работает это на старой прошивке атола.

С одеждой работать не хочет. На прошивке платформы 2.5

Второй вариант (платформа 2.5):

cFullCode = ALLT(cFullCode)
cHexCode = STRCONV(cFullCode, 15)
cResult = ''
DO WHILE LEN(cHexCode) > 0
cResult = cResult + LEFT(cHexCode, 2) + ' '
cHexCode = SUBSTR(cHexCode, 3)
ENDDO
cHexCode = ALLT(cResult)
*!* #DEFINE LIBFPTR_PARAM_MARKING_CODE_TYPE = 65826
FP.setParam(65826, LIBFPTR_MCT_OTHER)
FP.setParamStrHex(LIBFPTR_PARAM_MARKING_CODE, cHexCode)
FP.parseMarkingCode()
cTag1162 = FP.getParamByteArray(1162)

В ОФД приходит тэг1162 без типа номенклатуры!

ПОМОЖИТЕ, КТО ЧЕМ МОЖЕТЕ!


------------------
Алло, это прачечная? Да, это прачечная. Здравствуйте.




Исправлено 3 раз(а). Последнее : Victoriacom, 30.12.20 12:12
Ratings: 0 negative/0 positive
Re: И снова маркировка Атол
Равиль

Сообщений: 6549
Откуда: Уфа
Дата регистрации: 01.08.2003
Victoriacom
...
FP.setParam(65826, LIBFPTR_MCT_OTHER)
FP.setParamStrHex(LIBFPTR_PARAM_MARKING_CODE, cHexCode)
FP.parseMarkingCode()
cTag1162 = FP.getParamByteArray(1162)[/code]

В ОФД приходит тэг1162 без типа номенклатуры!

ПОМОЖИТЕ, КТО ЧЕМ МОЖЕТЕ!

Возможная причина - Вы отцепили параметры и константы от объекта. Попробуйте так :

With FP
.setParam(.LIBFPTR_PARAM_NOMENCLATURE_TYPE, .LIBFPTR_MCT_OTHER)
...
EndWith


------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive
Re: И снова маркировка Атол
Victoriacom
Автор

Сообщений: 111
Дата регистрации: 08.12.2010
Если кому интересно, вот мое решение:
cTag1162 = ''
cFullKod = ALLT(<просканированный код>)
*-* отрезаем хвост, начиная с признака 91
IF '91' $ cFullKod
cFullKod = LEFT(cFullKod, AT('91', cFullKod)-1)
ENDIF
*-* преобразуем код в 16ричный с разбивкой по пробелам
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_MCT_OTHER)
FP.setParamStrHex(LIBFPTR_PARAM_MARKING_CODE, cHexCode)
FP.parseMarkingCode()
oTag1162 = FP.getParamByteArray(1162)
*-* это просто для проверки
cTag1162 = TRANSFORM(oTag1162)
далее идет установка параметров товара, налоги ...
IF NOT EMPTY(cTag1162)
FP.setParam(1162, oTag1162)
ENDIF
FP.setParam(1212,1) && признак предмета расчета (товар)
FP.setParam(1214,4) && признак способа расчета (полный расчет)
FP.registration()

Списывался с спецами на Forum.Atol.ru. Все, предлагаемые ими варианты, у меня не работают.
Вот один, достаточно простой вариант, который был мне предложен:

Fptr.setParam(Fptr.LIBFPTR_PARAM_RECEIPT_TYPE, 1)
Fptr.openReceipt()
Fptr.setParam(Fptr.LIBFPTR_PARAM_COMMODITY_NAME, "Товар")
Fptr.setParam(Fptr.LIBFPTR_PARAM_PRICE, 100)
Fptr.setParam(Fptr.LIBFPTR_PARAM_QUANTITY, 1)
Fptr.setParam(Fptr.LIBFPTR_PARAM_TAX_TYPE, Fptr.LIBFPTR_TAX_VAT20)
Fptr.setParam(Fptr.LIBFPTR_PARAM_MARKING_CODE, "30 31 30 34 36 34 30 30 31 32 36 35 38 33 31 36 32 31 33 72 62 4c 48 2a 3f 56 61 61 4e 36 5a 1d 39 31 45 45 30 36 1d 39 32 39 76 4d 50 4b 34 66 31 44 57 55 31 39 2b 41 44 35 53 65 57 46 53 48 64 33 4e 67 4f 74 71 31 56 79 39 65 55 44 76 6e 54 47 51 34 3d")
Fptr.setParam(1212, 1)
Fptr.setParam(1214, 4)
Fptr.registration()

У них работает! После закрытия чека смотрю fptr10.log: тэг 1162 = 0000...
А это значит те же грабли, с которыми я воевал. На ОФД: неопределен тип номенклатуры.


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

Сообщений: 111
Дата регистрации: 08.12.2010
Как я дошел до того, что нужно обрезать маркировочный код?

Да просто заказчик дал мне список кодов от честного знака. Они все короткие.
Я эти короткие коды проверил на кассе - все отработали правильно.

Не уверен, что обрезать по признаку "91" правильно. Мало ли, вдруг в первой части кода будет какой-то левый "91"?...
Фиг знает. Но уже 2 дня касса работает.

Одно могу сказать: спецы с Forum.atol.ru мне ни разу не помогли.
Всё делал методом тыка.


------------------
Алло, это прачечная? Да, это прачечная. Здравствуйте.




Исправлено 2 раз(а). Последнее : Victoriacom, 13.01.21 16:22
Ratings: 0 negative/0 positive
Re: И снова маркировка Атол
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
Victoriacom
Одно могу сказать: спецы с Forum.atol.ru мне ни разу не помогли.
Да. С помощью там тоскливо.
Причем люди указывают на их явные косяки, а они либо тупо отмазываются, либо морочат голову.
Ratings: 0 negative/0 positive
Re: И снова маркировка Атол
Равиль

Сообщений: 6549
Откуда: Уфа
Дата регистрации: 01.08.2003
Я с маркировкой пока дела не имел, но думаю предстоит

Уже предлагал выше вместо этого :

FP.setParam(LIBFPTR_PARAM_MARKING_CODE_TYPE, LIBFPTR_MCT_OTHER)
FP.setParamStrHex(LIBFPTR_PARAM_MARKING_CODE, cHexCode)

Сделать так :

FP.setParam(FP.LIBFPTR_PARAM_MARKING_CODE_TYPE, FP.LIBFPTR_MCT_OTHER)
FP.setParamStrHex(FP.LIBFPTR_PARAM_MARKING_CODE, cHexCode)

Попробуйте.


------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive
Re: И снова маркировка Атол
Равиль

Сообщений: 6549
Откуда: Уфа
Дата регистрации: 01.08.2003
Victoriacom

Списывался с спецами на Forum.Atol.ru. Все, предлагаемые ими варианты, у меня не работают.
Вот один, достаточно простой вариант, который был мне предложен:

Fptr.setParam(Fptr.LIBFPTR_PARAM_RECEIPT_TYPE, 1)
Fptr.openReceipt()
Fptr.setParam(Fptr.LIBFPTR_PARAM_COMMODITY_NAME, "Товар")
Fptr.setParam(Fptr.LIBFPTR_PARAM_PRICE, 100)
Fptr.setParam(Fptr.LIBFPTR_PARAM_QUANTITY, 1)
Fptr.setParam(Fptr.LIBFPTR_PARAM_TAX_TYPE, Fptr.LIBFPTR_TAX_VAT20)
Fptr.setParam(Fptr.LIBFPTR_PARAM_MARKING_CODE, "30 31 30 34 36 34 30 30 31 32 36 35 38 33 31 36 32 31 33 72 62 4c 48 2a 3f 56 61 61 4e 36 5a 1d 39 31 45 45 30 36 1d 39 32 39 76 4d 50 4b 34 66 31 44 57 55 31 39 2b 41 44 35 53 65 57 46 53 48 64 33 4e 67 4f 74 71 31 56 79 39 65 55 44 76 6e 54 47 51 34 3d")
Fptr.setParam(1212, 1)
Fptr.setParam(1214, 4)
Fptr.registration()

У них работает! После закрытия чека смотрю fptr10.log: тэг 1162 = 0000...
А это значит те же грабли, с которыми я воевал. На ОФД: неопределен тип номенклатуры.

а в их примере как раз и отсутствует строка с указанием типа номенклатуры,
попробуйте добавить ее :

Fptr.setParam(Fptr.LIBFPTR_PARAM_MARKING_CODE_TYPE, Fptr.LIBFPTR_MCT_OTHER)


------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive
Re: И снова маркировка Атол
Евгений Банщиков

Сообщений: 218
Откуда: Kurgan
Дата регистрации: 09.04.2004
Victoriacom
Как я дошел до того, что нужно обрезать маркировочный код?
Да просто заказчик дал мне список кодов от честного знака. Они все короткие.
Я эти короткие коды проверил на кассе - все отработали правильно.

Не уверен, что обрезать по признаку "91" правильно. Мало ли, вдруг в первой части кода будет какой-то левый "91"?...
Фиг знает. Но уже 2 дня касса работает.

Одно могу сказать: спецы с Forum.atol.ru мне ни разу не помогли.
Всё делал методом тыка.
Коллега, на ваше сообщение в личке не мог сразу ответить , так как болел. После выздоровления меня первым делом попросили разобраться с проблемой c маркировкой, аналогичной вашей. Изучив вопрос , выяснил , что если чтение кода происходит ч-з HID сканер, которые работает в режиме эмуляции клавиатуры (у нас все сканеры работают в этом режиме), то код с него идет уже без управляющих GS . Вот ссылка на тему , где обсуждается данный вопрос forum.atol.ru . LIBFPTR_PARAM_MARKING_CODE требует указание полной последовательности байтов , включая GS коды. Без них код считается невалидным и буква [М] не печатается и данные в ЧЗ не отправляются. В качестве быстрого решения просто прописал GS ручками перед управляющими
m.cStr=Strtran(m.cStr,'91',Chr(29)+'91')
m.cStr=Strtran(m.cStr,'92',Chr(29)+'92')
m.cStr=Strtran(m.cStr,'93',Chr(29)+'93')
После этого все заработало без проблем .
Ratings: 0 negative/2 positive
Re: И снова маркировка Атол
Равиль

Сообщений: 6549
Откуда: Уфа
Дата регистрации: 01.08.2003
Victoriacom
Как я дошел до того, что нужно обрезать маркировочный код?
....
Не уверен, что обрезать по признаку "91" правильно. Мало ли, вдруг в первой части кода будет какой-то левый "91"?...

Да, сомнения не напрасны - к сожалению "91" встречается в левой части

Евгений Банщиков
LIBFPTR_PARAM_MARKING_CODE требует указание полной последовательности байтов, включая GS коды. Без них код считается невалидным и буква [М] не печатается и данные в ЧЗ не отправляются. В качестве быстрого решения просто прописал GS ручками перед управляющими
m.cStr=Strtran(m.cStr,'91',Chr(29)+'91')
m.cStr=Strtran(m.cStr,'92',Chr(29)+'92')
m.cStr=Strtran(m.cStr,'93',Chr(29)+'93')
После этого все заработало без проблем.

Вот реальный код где это может неправильно отработать :
010402979912555421203197042601091EE0692N0e+71pJVTrRDa1OQWPaa6/uTcnSWsDobhPH1zlMgVY=


------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive
Re: И снова маркировка Атол
PavlikPavlikovich

Сообщений: 170
Дата регистрации: 21.07.2010
У меня не атол. А с кодом маркировки поступаю так:
*Когда ловлю сканером:
IF SUBSTR(m.kodnam,1,2)="01" AND SUBSTR(m.kodnam,17,2)="21" &&Если 1 и 2 символ =01, а 17 и 18 символы =21 то это маркировка
ENDIF
*Потом для кассы просто обрезаю
m.kodnam=SUBSTR(m.kodnam,1,31) && обрезаю данные со сканера до 31 символа. Это и есть наша марка.
Ratings: 0 negative/0 positive
Re: И снова маркировка Атол
Равиль

Сообщений: 6549
Откуда: Уфа
Дата регистрации: 01.08.2003
возможно где-то и было уже - не помню, но иногда даже первая часть (31 символ) считанного кода маркировки зависит от текущей перед сканированием раскладки клавиатуры.
Вот пример (один и тот же код считанный в русской раскладке и латинской):
010290002750201421B?86JZpD8Had2
010290002750201421B&86JZpD8Had2

то есть в русской раскладке '&' заменяется на '?' и уже не распознается как правильный код
поэтому рекомендуется программно переключаться на латинскую раскладку перед сканированием.


------------------
Тяжело согнать курсором муху с монитора ...




Исправлено 1 раз(а). Последнее : Равиль, 28.04.21 18:19
Ratings: 0 negative/0 positive
Re: И снова маркировка Атол
Равиль

Сообщений: 6549
Откуда: Уфа
Дата регистрации: 01.08.2003
После выезда к клиенту нашли причину некорректного считывания марок.
Дело было не в раскладке клавиатуры.
У них стандартное RDP подключение и все наладилось после установки :

Цитата:
В настройках подключения в закладке "локальные ресурсы", в поле "использовать сочетание клавиш windows" установить "на этом компьютере"

[attachment 35366 ]

Речь идет о HID сканерах.

Здесь описана проблема и решение :

social.technet.microsoft.com


------------------
Тяжело согнать курсором муху с монитора ...




Исправлено 1 раз(а). Последнее : Равиль, 04.05.21 13:51
Ratings: 0 negative/1 positive
Re: И снова маркировка Атол
Atlant

Сообщений: 204
Откуда: Новосибирск
Дата регистрации: 01.09.2005
Подниму тему.
Нет ли у кого примера кода печати чека для ФФД 1.2 с маркированным товаром, понятное дело...?
Ratings: 0 negative/0 positive
Re: И снова маркировка Атол
Равиль

Сообщений: 6549
Откуда: Уфа
Дата регистрации: 01.08.2003
Atlant
Подниму тему.
Нет ли у кого примера кода печати чека для ФФД 1.2 с маркированным товаром, понятное дело...?

А без маркированного товара уже есть решение ?
Если да, то надо лишь считывать со сканера все коды товара в чеке и записать их построчно перед закрытием чека:

Registrator.setParam(Registrator.LIBFPTR_PARAM_MARKING_CODE, m.lcMark_Code) && без кодировки

или

Registrator.setParamStrHex(Registrator.LIBFPTR_PARAM_MARKING_CODE, m.lcHex_Mark_Code) && c 16-ричной кодировкой

В отличие от обычного чека есть нюанс :
Если кол-во товара более 1 шт в строке, то придется эту позицию размножить на это количество (по 1 шт), т.к. у каждой единицы товара своя маркировка.


------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive
Re: И снова маркировка Атол
Atlant

Сообщений: 204
Откуда: Новосибирск
Дата регистрации: 01.09.2005
Есть под 10-й драйвер под маркировку версии 1.05..
Там же в версии 1.2 есть понятие проверки валидности марок - в основном этот момент интересен.
Ratings: 0 negative/0 positive
Re: И снова маркировка Атол
Равиль

Сообщений: 6549
Откуда: Уфа
Дата регистрации: 01.08.2003
Atlant
Есть под 10-й драйвер под маркировку версии 1.05..
Там же в версии 1.2 есть понятие проверки валидности марок - в основном этот момент интересен.

Посмотрел ...MarkingCodeValidation() и т.д. - пока не пробовал
Это в драйвере 10.9 появилось или раньше ? и насколько актуально ?


------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive
Re: И снова маркировка Атол
Atlant

Сообщений: 204
Откуда: Новосибирск
Дата регистрации: 01.09.2005
Ну, вообще, как бы актуально в том плане, что позволяет до продажи проверить валидность марок.
Ratings: 0 negative/0 positive
Re: И снова маркировка Атол
Равиль

Сообщений: 6549
Откуда: Уфа
Дата регистрации: 01.08.2003
Atlant
Ну, вообще, как бы актуально в том плане, что позволяет до продажи проверить валидность марок.

Посмотрел - да, есть польза от этой функции - можно проверить валидность марки, причем без продажи товара, т.е. заранее.
Но может быть и побочный эффект - представляю что начнется, если вдруг запретят закрытие чека без положительного результата этой проверки ...


------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive
Re: И снова маркировка Атол
Atlant

Сообщений: 204
Откуда: Новосибирск
Дата регистрации: 01.09.2005
Ну, на запрет этого мы никак не повлияем (есть же запрет ЕГАИС, к примеру). А функционал реализовать надо... Пусть продавец решение принимает...
Ratings: 0 negative/0 positive
Re: И снова маркировка Атол
Atlant

Сообщений: 204
Откуда: Новосибирск
Дата регистрации: 01.09.2005
Ну, методом проб и ошибок выяснено, что пробивать по ФФД 1.2 без указанной выше проверки - низя. То есть, можно пробить при лбом результате проверки, но сделать её - нужно в любом случае...
Ratings: 0 negative/0 positive


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

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

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