18.03.2014, 07:14 | #1 |
Участник
|
Каждую ночь, в 3 часа, мне в папку копируют свежий файл с неизвестным именем, который приходится искать косвенными методами) В том числе по дате. И при наложении фильтра на таблицу File.SETRANGE(Date, TODAY) в таблице этот файл то есть, то его нет. Т.е. программа отрабатывает в 4 часа, доходит до этой строки, потом я делаю FINDFIRST и вывожу результат в лог. В таблице пусто. Утром проверяю, файл лежит на месте, время у него 3 часа, все как положено. Запускаю свою программу, она его находит) Я думал во времени косяк, что его еще нет на момент ее запуска, но по часам сходится, у файла стоит 3:00, программа запускается в 4:00.
Никто не сталкивался с такой бедой?) |
|
18.03.2014, 10:33 | #2 |
Участник
|
мб так поможет: тыц, или так: тыц-тыц, лично у меня без проблем работает конструкция:
Код: SELECTLATESTVERSION; CLEAR(FileTable); FileTable.RESET; FileTable.SETFILTER(Path, ImportPath); FileTable.SETRANGE("Is a file", TRUE); IF FileTable.FINDSET THEN BEGIN REPEAT ... UNTIL FileTable.NEXT = 0 END;
__________________
Как только вы проиграете, все ваши прошлые победы забудут. |
|
18.03.2014, 10:40 | #3 |
Участник
|
В смысле установить еще какие-то фильтры? Не, не помогает, я и так накладываю несколько фильтров. Сейчас примерно так написано:
Код: ff.WRITE('1'); f.SETRANGE(Path, '\\users\_MD'); IF f.FINDFIRST THEN ff.WRITE('2'); f.SETRANGE("Is a file", TRUE); IF f.FINDFIRST THEN ff.WRITE('3'); f.SETRANGE(Date, TODAY); IF f.FINDFIRST THEN REPEAT ff.WRITE(f.Name+' '+FORMAT(f.Date)); UNTIL f.NEXT=0; IF f.FINDFIRST THEN ff.WRITE('4'); |
|
18.03.2014, 10:42 | #4 |
Участник
|
сорь, совсем забыл пару строк сверху забрать, в ответе подправил добавив это:
Код: SELECTLATESTVERSION; CLEAR(FileTable); FileTable.RESET; ...
__________________
Как только вы проиграете, все ваши прошлые победы забудут. |
|
18.03.2014, 10:44 | #5 |
Участник
|
Да, CLEAR и RESET не делал, ибо смысла вроде в них нет... попробую сегодня)
SELECTLATESTVERSION вот эту функция я искал, но не нашел... может поможет. Спасибо за советы. |
|
18.03.2014, 10:48 | #6 |
Участник
|
Цитата:
Код: ... repeat files.setrane(path, 'c:\'); files.find('-'); files.setrange(path, 'c:\foo\bar\'); if files.find('-') then movefile; until foo = bar; ...
__________________
Как только вы проиграете, все ваши прошлые победы забудут. |
|
18.03.2014, 10:49 | #7 |
Участник
|
Видители, если программа не может в одной директории по какой-то причине найти существующий файл, то как бы нет гарантии, что она найдет файл в другой директории...
Или это не для того, чтобы что то найти, а просто туда сюда надо поперемещаться?) Я просто смысла не понимаю таких плясок с бубном и как это должно работать) |
|
18.03.2014, 11:03 | #8 |
Участник
|
Цитата:
Сообщение от smoyk
Видители, если программа не может в одной директории по какой-то причине найти существующий файл, то как бы нет гарантии, что она найдет файл в другой директории...
Или это не для того, чтобы что то найти, а просто туда сюда надо поперемещаться?) Я просто смысла не понимаю таких плясок с бубном и как это должно работать)
__________________
Как только вы проиграете, все ваши прошлые победы забудут. |
|
20.03.2014, 07:29 | #9 |
Участник
|
Тоже сталкивался с проблемой, когда NAV не мог найти файл. Действительно, помогает перед своим поиском сходить в папку C:
Вот мой код, который ищет файл с именем компании в каталоге экспорта и делает инкремент к последнему найденному имени: Код: IF COPYSTR(ExportPath, STRLEN(ExportPath), 1) <> '\' THEN ExportPath += '\'; Folder.SETRANGE(Path,'c:\'); IF Folder.FINDFIRST THEN; Folder.SETRANGE(Path, ExportPath); Folder.SETRANGE("Is a file",TRUE); Folder.SETFILTER(Name, '@' + STRSUBSTNO('%1-Export-%2.xml',Company.Name,'*')); IF Folder.FINDLAST THEN ExportName := INCSTR(Folder.Name) ELSE ExportName := STRSUBSTNO('%1-Export-%2.xml',Company.Name,FORMAT(1, 0, '<Integer,4><Filler Character,0>')); XMLDoc.save(ExportPath + ExportName); |
|