Игорь Столяров писал(а): ↑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 раза обращаться к сервисам ЧЗ. Возможно, потом объединят в одну и пока требуется по быстрому сделать какое-то решение.
C6/C11, ШВС, tps/btrieve.