Имя: Пароль:
 
1C
 
Отслеживание файлов
0 Галка
 
14.11.07
11:46
Уважаемые профессионалы! Помогите!
  Мне необходимо отслеживать появление файла в каталоге Windows (без использования обработки ожидания). Нашла ВК "Отслеживание изменений в файловой системе и программирование потоков (threads)" ( Книга знаний: Отслеживание изменений в файловой системе и программирование потоков (threads)), но данная ВК, отслеживает любые изменения в папке, а мне необходимо только появление файла. Передала данную ВК нашему админу, он мне вернул следующее инфо:


FILE_NOTIFY_CHANGE_FILE_NAME соответствует событиям переименования, создания или удаления файла
Чтобы определить тип произошедшего действия, нужно получить дополнительную информацию из структуры
Type PFileNotifyInformation=^TFileNotifyInformation;
Пример кода на паскале:
  case PFileNotifyInformation(Ptr).Action of
   FILE_ACTION_ADDED    : Item.SubItems.Add('Файл был создан');
   FILE_ACTION_REMOVED  : Item.SubItems.Add('Файл был удален');
   FILE_ACTION_MODIFIED : Item.SubItems.Add('Файл был изменен');
   FILE_ACTION_RENAMED_OLD_NAME :
  Item.SubItems.Add('Файл был переименован и в имени файла - предыдущее имя');
   FILE_ACTION_RENAMED_NEW_NAME :
 Item.SubItems.Add('новое имя после переименования');
   else Item.SubItems.Add('Произошло что-то странное');
  end;

  Подскажите плз, насколько возможно использовать данную функцию непосредственно в 1С? Или необходимо все таки исправлять ВК?
1 ТелепатБот
 
14.11.07
11:46
2 Галка
 
14.11.07
11:49
(1) Нет, внешняя компонента работает, все хорошо. Проблема только в том, что она делает больше того что необходимо.
3 Галка
 
14.11.07
11:55
Неужели никто ничего не может сказать по данному вопросу?
4 YF
 
14.11.07
12:01
(0) А чем обработка ожидания не катит?
5 Галка
 
14.11.07
12:03
(4) Файл может появлять очень часто(раз в минуту), а может не появляться сутки. Поэтому нет смысла, все время опрашивать каталог.
6 YF
 
14.11.07
12:05
(5) А ты думаешь ВК что делает? Она ведь тоже опрашивает каталог, ИМХО.
7 zenik
 
14.11.07
12:05
Если не секрет, что делает 1С когда появляется этот файл?

з.ы. Опрос раз в минуту наличия файла - не напрягает.
8 Галка
 
14.11.07
12:07
(6) Мне кажется с использованием VK, это не затрагивает базу 1С.
9 Галка
 
14.11.07
12:09
(7) Запускается процедура обработки данного файла (заполнение документов результатами из файла)
10 YF
 
14.11.07
12:11
(8) А как ОбработкаОжидания() затрагивает?
11 Галка
 
14.11.07
12:17
(10) Раз в минуту обращается к каталогу, проверяет наличие необходимого файла и на все это тратит время. Давайте не будем обсуждать обработку ожидания.
12 zenik
 
14.11.07
12:18
(9) Не заморачивайся... Если не хочешь напрягать пользователя - запусти 1С с системным пользователем, у которого будет крутится обработкаОжидания и под этим пользователем и будут создаваться документы. Никто ничего не заметит ;)
13 перцептрон
 
14.11.07
12:19
(2) она полюбому будет делать больше чем надо. Винда так сделана
14 dk
 
14.11.07
12:20
Пойдем с другой стороны, а как 1с узнает, что наступило событие в ВК? :)
15 Галка
 
14.11.07
12:21
(12) Нет, не получится. При создании в документе и в каждой заполненной строке прописывается кто создал и кто заполнил, а также еще фиксируется кто изменил. Т.е. должно стоять имя того пользователя, который работает.
16 zenik
 
14.11.07
12:21
для примера, вот эта процедура у меня вызывается раз в минуту:
Процедура ЗавершитьРаботу()
   // В каталоге базы
   ФайлФлаг=КаталогИБ()+"close";
   Если ФС.СуществуетФайл(ФайлФлаг)=1 Тогда
       ОбработкаОжидания("ЗавершитьРаботуПауза",300);
       Сообщить("Внимание! По инициативе администратора через 5 минут
                |1С:Предприятие будет закрыто. Сохраните все документы,
                |в противном случае они будут утеряны.
                |
                |Попытаться возобновить работу можно будет через 15 минут.","!!!");
   КонецЕсли;
   // В каталоге пользователя
   ФайлФлаг=КаталогПользователя()+"close";
   Если ФС.СуществуетФайл(ФайлФлаг)=1 Тогда
       ПринудительноЗакрытьПрограмму=1;
       ЗавершитьРаботуСистемы(0);
   КонецЕсли;
КонецПроцедуры

В базе 30 человек сидит, никто не напрягается.

зы. можешь замерить отладчиком, сколько милисекунд будет тратиться на такую проверку... Не напрягает совершенно. Через ВК будет тоже самое, только гемора больше.
17 zenik
 
14.11.07
12:23
(15) Эти данные можно добавить в сам файл, который опрашиваешь
18 Галка
 
14.11.07
12:26
Просто я предлагала обработку ожидания директору и ему не понравилось, что до обработки файла нужно еще ждать. Ему необходимо все и сразу :(
19 перцептрон
 
14.11.07
12:26
(14) ОбработкаВнешнегоСобытия()
20 перцептрон
 
14.11.07
12:28
(18) никогда не обсуждай с начальством как ты будешь что то ревлизовывать.
21 у лю 427
 
14.11.07
12:28
Просьба к автору ветки - скинуть ВК на почту...
С народа не читается - говорит, нет страницы....

адрес - karkarde@pisem.net
22 Галка
 
14.11.07
12:29
(19) В 1С все обработки у меня написаны и хорошо работают, проблема только в том, что процедура срабатывает когда файл удаляется и переименовывается. А функцию FILE_NOTIFY_CHANGE_FILE_NAME, которую мне дал админ можно вставить в 1с?
23 у лю 427
 
14.11.07
12:35
спасибо. Пришло....
Щас тут кадра озадачу переделкой....
24 у лю 427
 
14.11.07
12:36
Пусть учится.... ученик хренов...
25 перцептрон
 
14.11.07
12:36
(22) ВК не передает в 1с параметр указывающий на конкретное событие?
26 Галка
 
14.11.07
12:38
(25) Да, она только передает, что какое-то событие произошло, а какое конкретно не указано.
27 Галка
 
14.11.07
12:41
(24) ОГРОМНОЕ СПАСИБО!
28 перцептрон
 
14.11.07
12:46
(26) Если нет исходников ВК, то можно хранить в 1с список файлов и сверять его с файлами каталога
29 Галка
 
14.11.07
12:53
(28) В данном каталоге при условии нормальной работы, с большой долей вероятности может только находится один файл с каждого прибора. Потому что после обработки файла я его перезаписываю в другое место.
30 Кураж
 
14.11.07
13:01
(0) В топку ВК и ОбработкуОжидания туда же! События WMI - рулят.
31 у лю 427
 
14.11.07
13:13
упс....

чела на месте нет....

(24) в общем, лично я поправить ВК сейчас не смогу - нет установленной делфи...
Править надо именно ВК - сейчас она просто фиксирует факт изменения каталога
админ дал правильную наводку, как разобраться детально - какое событие произошло....
надо вставить это в ВК и пересобрать проект
32 перцептрон
 
14.11.07
13:20
(31) "упс.... чела на месте нет...."
хехе. А сам чо слабенький? :)
33 pectopatop
 
14.11.07
13:21
киньте ВК или сюда (ссылку)
или на почту pectopatop(at)mail.ru
34 pectopatop
 
14.11.07
13:29
ROMIX , http://x-romix.narod.ru/ - "Сайт временно закрыт".
уже вроде с недельку..
забанили что ли? =)
35 Галка
 
14.11.07
13:30
(33) отправила. Заранее спасибо
36 у лю 427
 
14.11.07
13:30
(32) рожать дистрибутивы дельфи еще не научен....

P.S. кстати, админ эту функцию просто спер на одном из сайтов по дельфи из примера....

(33) щас перекину....
37 у лю 427
 
14.11.07
13:32
кинул

кстати, вот пример такого сайта
http://www.delphisources.ru/pages/faq/base/read_directory_changes_w.html
38 у лю 427
 
14.11.07
13:35
39 Галка
 
14.11.07
13:43
(38) Что можно сказать по этому поводу... Урод наш админ... Лишь бы только чем-нибудь отмазаться... :( Я его эту ВК уже месяц прошу доделать, и вот какой результат... :((( Спасибо.
40 у лю 427
 
14.11.07
13:48
почитала? Я тоже удивился...
А всего то полез искать другие значения FILE_NOTIFY_CHANGE_FILE_NAME
Делфей то нет - нет и хелпа....

кинешь правленую ВК на меня ?
41 Галка
 
14.11.07
13:57
(40) если чудо свершится, обязательно. Оставь майл.
42 у лю 427
 
14.11.07
14:13
(41) --- адрес см 21 пост....
если чудо тебе не снизойдет - я заказал на завтра дистрибутив (но только вечером будет)... Сделаю...
43 Галка
 
14.11.07
14:24
(42) Спасибо. Если у меня появится раньше, скину.
44 pectopatop
 
14.11.07
14:26
(43), (42) - проверьте ящики
45 Галка
 
14.11.07
14:37
(44) Прошу прощения, но мне не дошло :(
46 Галка
 
14.11.07
14:38
Мой Mail: sppt@yandex.ru
47 pectopatop
 
14.11.07
14:41
(46) намбер ту..
48 Галка
 
14.11.07
14:48
(47) Это конечно смешно, но не доходит может яндекс не пропускает? Файл случайно не .EXE или .dll? Если не сложно, можно еще раз в архиве,и копию на galina@atlant.ru
49 pectopatop
 
14.11.07
14:53
http://pectopatop.narod.ru/vk_ChangeNotification2.rar

В общем, если файл копируется в папку откуда-то извне, или меняется -
то событие отработает.
Если создается прямо в папке - то нет.
(Т.к. перенавесил событие на изменение времени последней модификации.)
50 pectopatop
 
14.11.07
14:57
(48) не хотите ли подождать товарища "у лю 427" ? =)
51 Галка
 
14.11.07
15:03
(49)ОГРОМНЕЙШЕЕ СПАСИБО!!!
52 у лю 427
 
14.11.07
15:34
нифига... Не отрабатывает ни одно событие
- ни удаление, ни создание, ни копирование, ни пересылка...
старая ВК (от ромикса) все ловит
53 у лю 427
 
14.11.07
15:37
кстати, по времени - сколько ждать?
54 FreeFin
 
14.11.07
15:46
Стыбрено с коденета:
содержимое файла.vbs

Dim strFile, strTemp
Dim x, y
Dim objWMI, objEventsCollection, objEvent, objFS
Const strSourceDirWMI = "C:\\\\Temp"
Const strSourceDir = "C:\Temp\"
Const timeVal = "3"
'On Error Resume Next
Set objFS = CreateObject("Scripting.FileSystemObject")
If objFS.FolderExists(strSourceDir) Then
   Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
   Set objEventsCollection = objWMI.ExecNotificationQuery _
       ("SELECT * FROM __InstanceCreationEvent WITHIN " & timeVal & " WHERE " _
       & "Targetinstance ISA 'CIM_DirectoryContainsFile' and " _
       & "TargetInstance.GroupComponent= " _
       & "'Win32_Directory.Name=""" & strSourceDirWMI & """'")
   Do
       Set objEvent = objEventsCollection.NextEvent
       strTemp = objEvent.TargetInstance.PartComponent
       x = InStrRev(strTemp, "\")
       y = Len(Mid(strTemp, x + 1)) - 1
       strFile = Mid(strTemp, x + 1, y)
       MsgBox "Появился новый файл: " & strFile, vbInformation
       'Здесь можно предусмотреть процедуру выхода из бесконечного цикла
   Loop
Else
   MsgBox "Не обнаружен наблюдаемый каталог.", vbCritical
End If
Set objFS = Nothing
Set objEvent = Nothing
Set objEventsCollection = Nothing
Set objWMI = Nothing
55 pectopatop
 
14.11.07
15:48
(52) а попробуй (для интереса) поменять времени последней модификации файла..
56 pectopatop
 
14.11.07
15:49
(55) + у меня работает. нормально. хз в чем там дело.
я умываю руки )))
57 Галка
 
14.11.07
16:01
Нет, исправленная ловит, но только если файл копируется или вносятся изменения в файл и он закрывается через крестик ьез предварительного сохранения.
58 у лю 427
 
14.11.07
17:14
(55) меняешь время - ловит....
причем как то непонятно - изредка не ловит....

P.S. у меня время последнего доступа отключено для ускорения работы файловой системы...
59 у лю 427
 
14.11.07
17:15
копируемый файл - не ловит (копируется фаром)
60 у лю 427
 
14.11.07
17:17
ладно, не заморачивайся - завтра бум разбираться...
2 + 2 = 3.9999999999999999999999999999999...