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

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

И снова маркировка Атол
Victoriacom

Сообщений: 80
Дата: 30.12.20 12:05:25
Здравствуйте, товарищи!
Вынужден кричать 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 без типа номенклатуры!

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


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




Исправлено: Victoriacom, 30.12.20 12:12
Ratings: 0 negative/0 positive

Re: И снова маркировка Атол
Равиль

Сообщений: 6274
Откуда: Уфа
Дата: 08.01.21 20:54:55
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

Сообщений: 80
Дата: 13.01.21 16:13:18
Если кому интересно, вот мое решение:
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

Сообщений: 80
Дата: 13.01.21 16:18:47
Как я дошел до того, что нужно обрезать маркировочный код?

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

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

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


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




Исправлено: Victoriacom, 13.01.21 16:22
Ratings: 0 negative/0 positive

Re: И снова маркировка Атол
Аспид

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

Re: И снова маркировка Атол
Равиль

Сообщений: 6274
Откуда: Уфа
Дата: 16.01.21 11:25:24
Я с маркировкой пока дела не имел, но думаю предстоит

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

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: И снова маркировка Атол
Равиль

Сообщений: 6274
Откуда: Уфа
Дата: 16.01.21 11:43:33
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: И снова маркировка Атол
Евгений Банщиков
Автор

Сообщений: 214
Откуда: Kurgan
Дата: 17.01.21 12:34:40
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/1 positive

Re: И снова маркировка Атол
Равиль

Сообщений: 6274
Откуда: Уфа
Дата: 24.02.21 16:30:36
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

Сообщений: 151
Дата: 25.02.21 14:39:34
У меня не атол. А с кодом маркировки поступаю так:
*Когда ловлю сканером:  
  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



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

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


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