Форум OlegON > Программы и оборудование для автоматизации торговли > Кассовые программы > УКМ WIN

Баг при выгрузке продаж через dbf файлы в новой версии программы

23.09.2020 21:33


02.07.2017 14:46
FinSoft
 
После обновления программы для работы с онлайн кассами съехала выгрузка продаж в dbf. В файле CASHSAIL.DBF наименования полей остались прежними, но типы изменились. Например, для даты чека вместо типа "Дата" стало "Строковое 254 символа", для номеров числа с плавающей точкой. По этой причине загрузка дает ошибку. Я обошел с помощью версионирования формата обмена с внешними кассовыми программами, но осадочек остался...
02.07.2017 17:12
student
 
Цитата:
FinSoft съехала выгрузка продаж в dbf.
а вот это странно - вы файлики дбф случаем не правили (1с-ка обычно этим страдает если не совсем корректно написана процедура обмена - были случаи когда она записи помеченные на удаление в файле считала как правильные и продажи множились как снежный ком)?
просто касса не создает файлики с определенной структурой с нуля, а юзает те что в каталоге, если их нет - просто выкидывает сохраненные образа из шаблона что хранится внутри - т.е. типы так просто поменяться не могут - ну не умеет операция записи бинарного образа на диск менять типы полей :)

предлагаю очистить каталог выгрузки либо вручную либо активировать опцию очистки каталогов до выгрузки в настройках и перевыгрузить, если повторится - прислать банку данных и полученную выгрузку для анализа проблемаы

крайний раз шаблоны правились не так давно - где то в пределах месяца - там увеличивался размер поля CARDSIZE под одного клиента но это было для парадоксовой выгрузки и дбф не менялся...

хотя возможно что используется версия программа у которой нет еще ф-ции перенумерации номеров чека (фд) и при записи в номер чека большого значения происходит изменение типа - но что то в это мне слабо верится - не бывает чудес :)
завтра прицеплю какую либо базу с номерами фд более 40тыс и проверю


Цитата:
FinSoft Я обошел с помощью версионирования формата обмена с внешними кассовыми программами
а вот здесь можно по подробнее - как и каким способом и каким драйвером (если он есть) идет вычитка данных
02.07.2017 20:34
FinSoft
 
Проявилось на всех кассах после обновления программы в нескольких магазинах. Файлы после загрузки в бэк автоматических удаляются. При этом выгрузка справочников в кассовую программу проходит корректно, проблема возникла только с продажами.

Загрузка в бэке происходит через библиотеку, которая работает с dbf файлом как с бинарным по динамически задаваемой структуре. Соответственно, значения были прочитаны некорректно, программа загрузки стопорнула процесс. Я открыл загружаемый dbf подручным средством (Calc), посмотрел структуру полей, скорректировал в загрузчике, после чего продажи успешно прошли в бэк.

Судя по нелогичности типов данных, сложилось впечатление, что была изменена процедура выгрузки в сторону какой-то унификации, и были присвоены дефолтные типы данных - числовые значения все n20.5, все другие c254. Имена полей сохранились, изменились только типы данных.
02.07.2017 20:50
FinSoft
 
Вот структура dbf, которая работала до обновления (стандартная для укм2):
lor:dbf.dbfield('SHOPINDEX','N6.0',lor:ShopIndex)
lor:dbf.dbfield('CASHNUMBER','N6.0',lor:CashNumber)
lor:dbf.dbfield('ZNUMBER','N6.0',lor:ZNumber)
lor:dbf.dbfield('CHECKNUMBE','N6.0',lor:CheckNumbe)
lor:dbf.dbfield('ID','N6.0',lor:id)
lor:dbf.dbfield('DATE','D',lor:date)
lor:dbf.dbfield('TIME','N6.0',lor:time)
lor:dbf.dbfield('CARDARTICU', 'C30',lor:CardArticu)
lor:dbf.dbfield('CARDSIZE','C10',lor:CardSize)
lor:dbf.dbfield('QUANTITY','N16.9',lor:Quantity)
lor:dbf.dbfield('PRICERUB','N16.2',lor:PriceRub)
lor:dbf.dbfield('PRICECUR','N16.2',lor:PriceCur)
lor:dbf.dbfield('TOTALRUB','N16.2',lor:TotalRub)
lor:dbf.dbfield('TOTALCUR','N16.2',lor:TotalCur)
lor:dbf.dbfield('DEPARTMENT','N6.0',lor:Department)
lor:dbf.dbfield('CASHER','N6.0',lor:Casher)
lor:dbf.dbfield('USINGINDEX','N6.0',lor:UsingIndex)
lor:dbf.dbfield('REPLACE','N6.0',lor:Replace)
lor:dbf.dbfield('OPERATION','N6.0',lor:Operation)
lor:dbf.dbfield('CREDCARDIN','N6.0',lor:Credcardin)
lor:dbf.dbfield('DISCCLIIND','N6.0',lor:DiscCliInd)
lor:dbf.dbfield('LINKED','N6.0',lor:Linked)

Такая стала после обновления:
lor:dbf.dbfield('SHOPINDEX','N20.5',lor:ShopIndex)
lor:dbf.dbfield('CASHNUMBER','N20.5',lor:CashNumber)
lor:dbf.dbfield('ZNUMBER','N20.5',lor:ZNumber)
lor:dbf.dbfield('CHECKNUMBE','N20.5',lor:CheckNumbe)
lor:dbf.dbfield('ID','N20.5',lor:id)
lor:dbf.dbfield('DATE','C254',lor:date)
lor:dbf.dbfield('TIME','C254',lor:time)
lor:dbf.dbfield('CARDARTICU', 'C30',lor:CardArticu)
lor:dbf.dbfield('CARDSIZE','C200',lor:CardSize)
lor:dbf.dbfield('QUANTITY','N20.5',lor:Quantity)
lor:dbf.dbfield('PRICERUB','N20.5',lor:PriceRub)
lor:dbf.dbfield('PRICECUR','N20.5',lor:PriceCur)
lor:dbf.dbfield('TOTALRUB','N20.5',lor:TotalRub)
lor:dbf.dbfield('TOTALCUR','N20.5',lor:TotalCur)
lor:dbf.dbfield('DEPARTMENT','N20.5',lor:Department)
lor:dbf.dbfield('CASHER','N20.5',lor:Casher)
lor:dbf.dbfield('USINGINDEX','N20.5',lor:UsingIndex)
lor:dbf.dbfield('REPLACE','N20.5',lor:Replace)
lor:dbf.dbfield('OPERATION','N20.5',lor:Operation)
lor:dbf.dbfield('CREDCARDIN','N20.5',lor:Credcardin)
lor:dbf.dbfield('DISCCLIIND','N20.5',lor:DiscCliInd)
lor:dbf.dbfield('LINKED','N20.5',lor:Linked)
02.07.2017 21:15
student
 
Цитата:
FinSoft что была изменена процедура выгрузки в сторону какой-то унификации
вот этого точно не было :)
все и так унифицировано - все сначала идет в темповые таблицы родного формата, потом в зависимости от типа выгрузки линкуются внешние файлы или скуль сервер и туда простым инсертом переливаются данные (такой подход был выбран давно исходя из максимальной скорости обработки выгрузки)
я написал выше - программа не формирует внешние файлы с нуля (чтобы не зависеть от установленных драйверов и наличия бде и т.п.) - она пишет на диск сохраненные шаблоны (в данном случае готовые пустые дбф файлы в количестве 12 шт, бинарный образ которых хранится в модуле)
процедура линковки штатная не использует внешние драйвера и как следствие не позволяет модифицировать структуру
остается теперь только понять что случилось и почему структура не соответствует той что была ранее

Цитата:
FinSoft изменились только типы данных.
можно отключить очистку каталогов если активирована, кинуть в каталог правильные файлы и не удалять их после приема - касса будет юзать те файлы что есть - т.е. перезаписи их не будет

хотелось бы уточнить - я правильно понимаю что особенно напрягает дата в тексте или изменение размерности др полей тоже не фонтан ?
просто если завтра выяснится что кривой шаблон то придется либо выковыривать его с архива, либо пересоздавать (я бы предпочел пересоздать и кое что поменять - мне выгодней иметь дк в 30 символов, увеличить строку в логе и 20.2 везде в числовых на суммах)
03.07.2017 09:00
FinSoft
 
Я уже подстроился. У меня библиотека для прямой работы с dbf чувствительна к структуре файла. Она используется, чтобы не подключать сторонние драйвера. Используется редко. Поэтому, желательно, чтобы структура dbf не менялась часто и без предупреждения...
03.07.2017 09:14
student
 
Цитата:
FinSoft чтобы структура dbf не менялась часто и без предупреждения
в данном случае это из серии "чудес не бывает, а вот ерунда случается" - т.е. реальная ерунда на пустом месте :(
сейчас разрулим как так получилось и все вернется на круги своя ...
поскольку все равно проверять теперь все то я как и написал - изменю некоторые типы и в дальнейшем они так и останутся
03.07.2017 22:47
student
 
обновил встроенные шаблоны - в следующей сборке (после 3-7-2017) все должно быть как и ранее кроме
Цитата:
student изменю некоторые типы и в дальнейшем они так и останутся
основное изменение - сделал везде размер 20.6 для числовых и увеличил часть текстовых
просьба если что то кого то не устраивает не молчать и отписаться сразу :)

теперь почему так произошло - печальная история :( старый дбедитор что ранее использовался еще со времен укм2 под 10-й виндой х64 не взлетел и был использован первый попавшийся из просторов инета, который по словам разраба использует прямую работу с дбф без драйвера, и который оказался кривым на обе ноги :(
когда расширяли кардсайз для парадокса было принято решение пересоздать и для дбф-а - причем пересоздали все файлы ...
короче - моя вина - не уследил.... надеюсь больше не повторится тем более что и расширять уже нечего :)

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.