Страница 3 из 3
					
				Работа с Честным знаком (определение срока годности молочной продукции)
				Добавлено: 21 Октябрь 2023, 10:45
				 finsoftrz
				Проверил запрос с токеном, полученном в кабинете Честного знака, как было показано на скриншоте выше.
Код: Выделить всё
curl -X POST "https://markirovka.crpt.ru/api/v4/true-api/codes/check" -H "X-API-KEY: 43...ed" -H "Content-Type: application/json" -d @"mark.json" -o 1.txt
Содержание файла с маркой mark.json:
Код: Выделить всё
{
  "codes":[
      "0104607150100176215(j4Fc\u001D93aQ55"
  ]
}
Ответ в json пришел, срок годности совпадает с упаковкой (expireDate) (файл 1.txt).
Код: Выделить всё
{"code":0,"description":"ok","codes":[{"cis":"0104607150100176215(j4Fc\u001D93aQ55","valid":true,"printView":"0104607150100176215(j4Fc","gtin":"04607150100176","groupIds":[8],"verified":true,"found":true,"realizable":true,"utilised":true,"isBlocked":false,"expireDate":"2023-10-18T00:00:00.000Z","productionDate":"2023-10-15T00:00:00.000Z","prVetDocument":"6b6bbe21-6492-4b8b-a999-6f2ef5c764c6","errorCode":0,"isTracking":false,"sold":false,"packageType":"UNIT","producerInn":"6221000024","grayZone":false}],"reqId":"add5dafd-6648-47a9-90e8-2d2846cf0e75","reqTimestamp":1697874169849}
 
			 
			
					
				Работа с Честным знаком (определение срока годности молочной продукции)
				Добавлено: 21 Октябрь 2023, 21:50
				 Игорь Столяров
				OK ! Т.е. действительно можно по марке получить параметры партии товара ...
Интересно почему это до сих пор не реализовано на уровне драйвера ККТ.
			 
			
					
				Работа с Честным знаком (определение срока годности молочной продукции)
				Добавлено: 21 Октябрь 2023, 22:20
				 finsoftrz
				В автономных кассах уже есть. Это свежая тема, летом только пилотные проекты были. Этот запрос только в последнее время заработал, насколько я понял. Токен из личного кабинета будет действовать ограниченное время, потом хотят усложнить его получение.
			 
			
					
				Работа с Честным знаком (определение срока годности молочной продукции)
				Добавлено: 22 Октябрь 2023, 7:12
				 Игорь Столяров
				Значит ната сделать набросок класса и юзать пока не появится данная опция в драйвере ККТ.  

 
			 
			
					
				Работа с Честным знаком (определение срока годности молочной продукции)
				Добавлено: 22 Октябрь 2023, 14:29
				 finsoftrz
				Если есть время и желание, то почему бы нет. С True api все равно рано или поздно придётся работать.
Кстати, про cjson. Попробовал для разбора результата. Программа вылетала, пока не добавил sleep(100) после парсинга и перед очисткой структур. Потом подумал, нафиг на ровном месте приключения и переделал на substring. Но рано или поздно с json потребуется работать. Не сталкивались с таким?
			 
			
					
				Работа с Честным знаком (определение срока годности молочной продукции)
				Добавлено: 22 Октябрь 2023, 16:04
				 Игорь Столяров
				finsoftrz писал(а): 22 Октябрь 2023, 14:29
Программа вылетала, пока не добавил sleep(100) после парсинга и перед очисткой структур.
 
Всегда хорошо собрать и показать чистый пример демострирующий проблему (если она там будет). 
Мы ведь не знаем, что ещё прицепилось к приложению из шаблонов или других библиотек.
Мало информации, могу предположить (!!) что программа закрывалась при работающем потоке
и введение задержки даёт возможность потоку штатно закрыться без принудильного вырубания.
finsoftrz писал(а): 22 Октябрь 2023, 14:29
на ровном месте приключения и переделал на substring
 
Уточните пожалуйста, а что Вы переделали на SubString() ?
Если просто вытащить пару дат из текстовой JSON строки - то можно конечно временно и так ... 
Но там в запросе (и ответе) стоит массив, что бы одним запросом обрабатывать всё содержание чека.
Это уже будет сложно парсить как текст ... а запрашивать по одной марке - это только для теста ... 

 
			 
			
					
				Работа с Честным знаком (определение срока годности молочной продукции)
				Добавлено: 22 Октябрь 2023, 17:02
				 finsoftrz
				Игорь Столяров писал(а): 22 Октябрь 2023, 16:04
finsoftrz писал(а): 22 Октябрь 2023, 14:29
Программа вылетала, пока не добавил sleep(100) после парсинга и перед очисткой структур.
 
Всегда хорошо собрать и показать чистый пример демострирующий проблему (если она там будет). 
Мы ведь не знаем, что ещё прицепилось к приложению из шаблонов или других библиотек.
Мало информации, могу предположить (!!) что программа закрывалась при работающем потоке
и введение задержки даёт возможность потоку штатно закрыться без принудильного вырубания.
 
Приложение однопоточное. Проявляется только после обращения к методам cjson. Мне пока нет интереса копаться в нюансах, что с чем может конфликтовать, просто отметил факт и спросил, может у кого тоже проявлялось. Если хотите, могу запостить пример, вроде ничего военного.
Код: Выделить всё
testOld_r  routine   !проверка
   DATA
jsonFactory  cJSONFactory
root    &cJSON
item    &cJSON
JSONString STRING(10024)
lor:mark    string(80)
lor:dateStr string(40)
lor:date    long
   CODE
  JSONString='тут json строка'
   root &= jsonFactory.Parse(JSONString)
  if root &= null
     exit
  .
  item &= root.FindArrayItem('codes', 1)
  if ~(item &= null)
     item &= item.GetObjectItem('expireDate')
     lor:dateStr = item.ToString(1)
     sleep(100)  !вот это ---------------------------------------
     if lor:dateStr<>''
        lor:date=deformat(sub(lor:dateStr,2,10),@d10-)
        if lor:date>0 and lor:date<today()
           Loc:Ok=0   !просрочено
        .
     .
  .
  root.Delete()
 
Игорь Столяров писал(а): 22 Октябрь 2023, 16:04
finsoftrz писал(а): 22 Октябрь 2023, 14:29
на ровном месте приключения и переделал на substring
 
Уточните пожалуйста, а что Вы переделали на SubString() ?
Если просто вытащить пару дат из текстовой JSON строки - то можно конечно временно и так ... 
Но там в запросе (и ответе) стоит массив, что бы одним запросом обрабатывать всё содержание чека.
Это уже будет сложно парсить как текст ... а запрашивать по одной марке - это только для теста ... 
 
Надо вытащить одну дату. Именно по одной марке, на кассе. Посмотрим, как в реальной работе будет. В методичке ЧЗ именно так предлагается делать. Есть, конечно, вариант вначале пропикать все марки, а потом скопом проверять, это уже более сложно, так как придется где-то отображать колонку со сроком годности после проверки, чтобы кассир мог потом найти среди нескольких для удаления. 
Я думаю, что такая проверка не совсем логична, так как марки потом все равно проверяются еще раз, зачем 2 раза обращаться к сервисам ЧЗ. Возможно, потом объединят в одну и пока требуется по быстрому сделать какое-то решение.
 
			 
			
					
				Работа с Честным знаком (определение срока годности молочной продукции)
				Добавлено: 22 Октябрь 2023, 20:27
				 Игорь Столяров
				Сразу хочу сказать, что жись полна многообразия и я его принимаю ! 

Но как я понимаю концепцию CJSON (да поправят меня старшие товарищи), массив парсим вот так:
Код: Выделить всё
  Root &= MyJSon.Parse(JSONString)
  If Not (Root &= Null)
  
     jResult &= Root.FindObjectItem('Codes')
     If Not (jResult &= Null)
     
        jResult.ToQueue(qResult)
        If Records(qResult) > 0
           Get(qResult,1)
           If Not ErrorCode() then Message(Format( Deformat(Sub(qResult.expireDate,2,10),@d10-),@d06.b)).
        end
     end
     
     Root.Delete()
  end
Что бы не набирать - прикрепляю готовый к сборке пример в архиве.
Прогнал тысячу раз в цикле - никаких проблем ... 
Посмотрите пожалуйста ! 

 
			 
			
					
				Работа с Честным знаком (определение срока годности молочной продукции)
				Добавлено: 22 Октябрь 2023, 21:19
				 finsoftrz
				Насколько я понимаю логику, оба варианта должны дать идентичный результат, только в первом случае без дополнительной кьюшки. Непонятка была именно в том, при чем тут sleep. Почему без него программа вылетает, а с ним нет. Код то вроде как линейный.
			 
			
					
				Работа с Честным знаком (определение срока годности молочной продукции)
				Добавлено: 22 Октябрь 2023, 21:26
				 Игорь Столяров
				В Ваших условиях сборки вариант с парсом массива в Queue работает или всё-равно есть проблемы ?
			 
			
					
				Работа с Честным знаком (определение срока годности молочной продукции)
				Добавлено: 22 Октябрь 2023, 21:30
				 finsoftrz
				Игорь Столяров писал(а): 22 Октябрь 2023, 21:26
В Ваших условиях сборки вариант с парсом массива в Queue работает или всё-равно есть проблемы ?
 
Лень проверять, сейчас на substring. У меня и со sleep работало, просто тащить большой класс для простой задачи, у нас другие обычаи. 

 
			 
			
					
				Работа с Честным знаком (определение срока годности молочной продукции)
				Добавлено: 22 Октябрь 2023, 21:37
				 Игорь Столяров
				finsoftrz писал(а): 22 Октябрь 2023, 21:30
тащить большой класс для простой задачи, у нас другие обычаи
 
Понял ! 
