AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.03.2014, 07:14   #1  
smoyk is offline
smoyk
Участник
 
188 / 13 (1) ++
Регистрация: 20.04.2007
Каждую ночь, в 3 часа, мне в папку копируют свежий файл с неизвестным именем, который приходится искать косвенными методами) В том числе по дате. И при наложении фильтра на таблицу File.SETRANGE(Date, TODAY) в таблице этот файл то есть, то его нет. Т.е. программа отрабатывает в 4 часа, доходит до этой строки, потом я делаю FINDFIRST и вывожу результат в лог. В таблице пусто. Утром проверяю, файл лежит на месте, время у него 3 часа, все как положено. Запускаю свою программу, она его находит) Я думал во времени косяк, что его еще нет на момент ее запуска, но по часам сходится, у файла стоит 3:00, программа запускается в 4:00.
Никто не сталкивался с такой бедой?)
Старый 18.03.2014, 10:33   #2  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
мб так поможет: тыц, или так: тыц-тыц, лично у меня без проблем работает конструкция:

Код:
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;
вышеуказанный код отрабатывает раз в 2 минуты - и файлов новых появляется куча, видит без проблем.
__________________
Как только вы проиграете, все ваши прошлые победы забудут.
Старый 18.03.2014, 10:40   #3  
smoyk is offline
smoyk
Участник
 
188 / 13 (1) ++
Регистрация: 20.04.2007
В смысле установить еще какие-то фильтры? Не, не помогает, я и так накладываю несколько фильтров. Сейчас примерно так написано:
Код:
  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  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
сорь, совсем забыл пару строк сверху забрать, в ответе подправил добавив это:

Код:
SELECTLATESTVERSION;
CLEAR(FileTable);

FileTable.RESET;
...
На мибусо рекомендуют просто в другой дирректории найти файл и после вернуться на нужную...
__________________
Как только вы проиграете, все ваши прошлые победы забудут.
Старый 18.03.2014, 10:44   #5  
smoyk is offline
smoyk
Участник
 
188 / 13 (1) ++
Регистрация: 20.04.2007
Да, CLEAR и RESET не делал, ибо смысла вроде в них нет... попробую сегодня)
SELECTLATESTVERSION вот эту функция я искал, но не нашел... может поможет.
Спасибо за советы.
Старый 18.03.2014, 10:48   #6  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
Цитата:
Сообщение от smoyk Посмотреть сообщение
Да, CLEAR и RESET не делал, ибо смысла вроде в них нет... попробую сегодня)
SELECTLATESTVERSION вот эту функция я искал, но не нашел... может поможет.
Спасибо за советы.
если не поможет - пробуй перед сканом своей директории проходиться по другой(там файл первый находишь и на свою директорию назад)... как пример:

Код:
...
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  
smoyk is offline
smoyk
Участник
 
188 / 13 (1) ++
Регистрация: 20.04.2007
Видители, если программа не может в одной директории по какой-то причине найти существующий файл, то как бы нет гарантии, что она найдет файл в другой директории...
Или это не для того, чтобы что то найти, а просто туда сюда надо поперемещаться?) Я просто смысла не понимаю таких плясок с бубном и как это должно работать)
Старый 18.03.2014, 11:03   #8  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
Цитата:
Сообщение от smoyk Посмотреть сообщение
Видители, если программа не может в одной директории по какой-то причине найти существующий файл, то как бы нет гарантии, что она найдет файл в другой директории...
Или это не для того, чтобы что то найти, а просто туда сюда надо поперемещаться?) Я просто смысла не понимаю таких плясок с бубном и как это должно работать)
именно - спрыгнуть с нужной папки на другую, и потом вернуться назад.
__________________
Как только вы проиграете, все ваши прошлые победы забудут.
Старый 20.03.2014, 07:29   #9  
GRIZZLY_imported is offline
GRIZZLY_imported
Участник
 
39 / 10 (1) +
Регистрация: 18.05.2007
Тоже сталкивался с проблемой, когда 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);
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:18.