0. Душелов 3911 05.03.09 15:38 Сейчас в теме

[Мониторинг изменения файлов] - ActiveX-компонента для 1С 8.х + ВК для 7.7

Компонента следит за изменениями файлов в заданных каталогах, без таймеров и опросов файловой системы.
Использует события Windows.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. Душелов 3911 05.03.09 15:38 Сейчас в теме
Насколько я знаю, подобная ВК есть, но...
Т.к. в 8-ке в контексте сервера нет возможности использовать внешние компоненты в стандартном представлении 1С, то пришлось написать аналог в виде ActiveX, который прекрасно работает в серверном режиме (т.е. регламентные и прочие задания).
2. Арчибальд 2710 05.03.09 16:05 Сейчас в теме
Предлагаю альтернативный ник
Душелов_Для_работы_MS.NET_Framework2.0
3. biv75 05.03.09 16:15 Сейчас в теме
А лучше отдельную страницу "Душелов разработки"
4. Арчибальд 2710 05.03.09 16:21 Сейчас в теме
(3)Отнюдь НЕ ВСЕ разработки Василия требуют фрамугу. Так что альтернатива нужна.
5. artbear 1176 05.03.09 17:25 Сейчас в теме
Подобное вроде как можно сделать и на штатном MS.ScriptControl, без всяких
наворотов в виде ВК ?
Его события вроде бы также можно юзать в восьмерке.

ЗЫ сам в 8.1 не тестил :)
в 77 с помощью 1С++ подобная схема работает.
6. Душелов 3911 05.03.09 19:57 Сейчас в теме
(5) Честно, не помню, по-моему Watcher там есть.... Можно, конечно, порыскать, но для меня быстрее компоненту написать, чем со скриптами разбираться ;)
7. biv75 06.03.09 00:21 Сейчас в теме
(6) Вот.. лень двигатель прогресса, ленись Василий, мне нравится как ты это делаешь
_rashik; Арчибальд; +2 Ответить
8. CheBurator 12.03.09 04:29 Сейчас в теме
Василий! вот у мну есть подозрение.. что используя очередь событий виндов (или как оно там называется) - можно организовать обмен между сеансами в одной базе... яточно знаю что как-то так можно!
9. Душелов 3911 12.03.09 08:57 Сейчас в теме
(8) Обмен чем? Сообщениями? Можно, почему нет?
10. CheBurator 12.03.09 14:52 Сейчас в теме
Вот!!!! так надо делать!!!
то есть например... я "плюнул" сообщение, оно "стало" в очередь (где-то в виндах"), по факту появления данного сообщения в очереди в запущенных экземплярах 1ски генерится внешнее событие....
или меня не туда несет?
11. Душелов 3911 12.03.09 14:56 Сейчас в теме
Открыл обработку - создайл файлик свой в определенном каталоге и начал мониторить этот каталог на изменение там файлов всех, кроме своего.

В свой файлик записал сообщение - все, у кого открыты обработки увидели, что файлик изменен и давай его кучно читать :)
13. Арчибальд 2710 12.03.09 15:13 Сейчас в теме
(11)>все, у кого открыты обработки увидели, что файлик изменен и давай его кучно читать
Не все. Только те, кто умеет ;)
14. Душелов 3911 12.03.09 15:15 Сейчас в теме
(13) Ну и все, кому разрешено его читать :)
52. dreadlord 08.02.16 15:14 Сейчас в теме
Може есть у кого рабочий пример под 7-ку.
Так и не удалось запустить ЭТОТ!

Перем Мониторинг;

// ==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==
Процедура ПриОткрытии()
	ЗагрузитьВнешнююКомпоненту("FileWatcher.dll");
	
	Попытка
		Мониторинг = СоздатьОбъект("AddIn.FileWatcher");
	Исключение
		Сообщить("Ошибка создания объекта внешней компоненты: FileWatcher");
	КонецПопытки;
	
	ЭлемМониторинга = Мониторинг.Добавить("ПапкаФТП");
	ЭлемМониторинга.Фильтр = "*@cbd.zip";
	ЭлемМониторинга.Путь = "N:\Base\Obmin\";
	//ЭлемМониторинга.ФильтрИзменений = "";
    ЭлемМониторинга.Активирован = 1;
	
КонецПроцедуры	// ПриОткрытии

// ==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==
// - Источник = "FileWatcher"
// - Событие (ПриСоздании, ПриИзменении, ПриУдалении, ПриПереименовании, Ошибка)
// - Данные (ИмяЭлемента + ИмяФайла + Путь), при переименовании еще "СтароеИмяФайла + СтарыйПуть"
//
Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные);
	Сообщить("ОбработкаВнешнегоСобытия: "+Источник);

	Если Источник = "FileWatcher" Тогда
		Сообщить("Событие "+Событие);
		Сообщить("Данные "+Данные);
	КонецЕсли;
КонецПроцедуры

Показать


Вылетает с ошибкой:
ЭлемМониторинга = Мониторинг.Добавить("ПапкаФТП");
{N:\COPYCB\EXTFORMS\МОНИТОРИНГФТП.ERT(13)}: Поле агрегатного объекта не обнаружено (Добавить)


Есть рабочий вариант от Romix-а, НО - проблема в том, что какой именно файл создан у него не видно, нужно парсить папку.

Спасибо.
12. Душелов 3911 12.03.09 15:01 Сейчас в теме
Соответственно, закрыл обработку - грохнул файлик.
Присутствие файликов - аналог онлайна пользователей :)
15. maljaev 793 12.03.09 15:57 Сейчас в теме
У меня стоит точно такая же задача, как у Чебура. Путей реализации без изврата через файлы или справочники пока не нашел.
16. Душелов 3911 12.03.09 15:58 Сейчас в теме
17. Душелов 3911 12.03.09 16:00 Сейчас в теме
(15) ПонимаешЬ, в чем отличие использования компоненты от просто файлов и справочников - не надо использовать обработки ожидания и постоянное насилование файловой системы. когда файлы изменятся - сгенерируются нужные события у всех, кто следит за нужным каталогом.
18. maljaev 793 12.03.09 16:15 Сейчас в теме
Мне тут на 1CPP кинули ссылку на решение через сетевые сокеты. Теоретически, должно быть неплохое решение. Нужно только разобраться как это все работает и как применить к нашей ситуации.

http://www.rikcenter.ru/downloads.php?file=13
http://www.1cpp.ru/forum/YaBB.pl?num=1234860912
19. Душелов 3911 12.03.09 16:19 Сейчас в теме
(18) Так это можешь мой чат взять :)
Вообщем, все понятно. Сейчас сяду и напишу сервер событий :)))
23. Арчибальд 2710 13.03.09 08:13 Сейчас в теме
32. Душелов 3911 13.03.09 17:22 Сейчас в теме
(23) Вот тестовый сервер событий http://za-ha-dum.narod.ru/1c/EventServer.zip
Есть пример клиентов для 7.7 и 8.1
В примерах есть все команды, кроме одной, ее просто не успел включить:
КлиентСобытий.ОтправитьПриватно(Ник, Текст)

На базе этого сервера можно сделать чат (в примере он таким и является), а так же всякие выгонялки, оповестелки и прочее.
21. CheBurator 13.03.09 01:44 Сейчас в теме
(18) перая ссылка ( http://www.rikcenter.ru/downloads.php?file=13 ) - это как раз по вопросу, который я завязал обсуждать на мисте, аналогично упомянутому мной выше, а суть была в том: как из одного сеанса 1Ски (работающего с базой ИБ1) передать событие в другой сеанс этой же ИБ...?
ОбработкаОжидания - отметаем сразу, ради того чтобы обработать событие которое может быть раз в 2 часа (а может раз в 10 минут) - постоянно крутить ожидание - это какое-то извращение! Я хочу, чтобы, работая в базе, мне извне "генерилось" событие - и вот когда оно пришло - вот тогда я и сделаю что надо... так вот - единственное решение придложил Садовников - чат по ссылке как раз и является примером.. Но! там тоже не все гламурно!
...
и вот еще: соответсвенно, работая в ИБ, я хочу иметь "глобальный" обработчик событий (независимо от того в какой я форме нахожусь) - как я понял из беседс Василием - это можно сделать активиксом, но для него надо держать постоянно открытой форму... - тоже изврат...
..
так вот.. еще один вариант - но смотрел только поверхностно (ибо не спец) - чат может быть построен на очереди сообщений виндов (но для этого добен нужен...)
20. Hadgehogs 337 13.03.09 01:01 Сейчас в теме
Где же это я все видел - то...
22. CheBurator 13.03.09 01:47 Сейчас в теме
(20) аналогичная компонента по мониторингу файлов с генерацией ВС есть у romix? у него еще есть fakir.dll (я ее юзаю для целей автообновления псевдожурнала при проведении документа, отображаемого в журнале) - то есть я могу в модуле проведения сгенерить событие и оно отловится 1Ской... но опять же - только в рамках данного сеанса 1С... вот...
24. Hadgehogs 337 13.03.09 09:27 Сейчас в теме
(22) Ну вообще это все в Нетленке реализовано давно.
28. CheBurator 13.03.09 12:07 Сейчас в теме
(24) вас ист дас "Теленка"? тьфу, "нетленка"?
29. biv75 13.03.09 12:08 Сейчас в теме
25. Hadgehogs 337 13.03.09 09:28 Сейчас в теме
Это я так Василия, идущего дорогой баянов, подъеживаю.
26. Душелов 3911 13.03.09 09:35 Сейчас в теме
(25) Читаем 1 коммент... Я там как бы все написал.
27. Душелов 3911 13.03.09 10:23 Сейчас в теме
По многочисленным просьбам :) Написал аналогичную ВК для 7.7 (можно и в 8-ке использовать, только смысла нет) с теми же методами.
30. varelchik 13.03.09 13:06 Сейчас в теме
А кто нить еще пробовал под 7.7?
У мене че 1С в коврик сворачивается при ппытке изменения сканируемого файла.
31. Душелов 3911 13.03.09 13:14 Сейчас в теме
(30) Попробовал на разных машинах + в терминале, не падает.
Как вариант, можно попробовать прологировать все и посмотреть, где у тебя что выпадает.
33. Душелов 3911 13.03.09 17:22 Сейчас в теме
точнее не ник, а имя соединения ;)
34. Душелов 3911 13.03.09 17:23 Сейчас в теме
Если запускать на одном компьютере (терминальная сессия, разные базы), то каждому клиенту надо назначить разные порта. Автопоиск портов свободных сделаю потом. Да и стоит ли делать "группы", по аналогии с комнатами чатовскими?
35. maljaev 793 15.03.09 16:57 Сейчас в теме
Чего-то у меня при соединении постоянно ошибку выдает:

Ошибка: Ошибка сокета - Обычно разрешается одно использование адреса сокета (протокол/сетевой адрес/порт) (10048).
36. Душелов 3911 15.03.09 17:00 Сейчас в теме
(35) см. 34, каждому клиенту надо задать разные порты.
37. maljaev 793 15.03.09 17:03 Сейчас в теме
(36) Задавал, не помогает. Ошибка вылазит даже при одном запущенном клиенте.
38. Душелов 3911 15.03.09 17:05 Сейчас в теме
Запускаешь сервер на 27000 порту, потом запускаешь клиента на 27001 к примеру. Что пишет?
39. maljaev 793 15.03.09 17:12 Сейчас в теме
Уточняю:

Сервер с портом по умолчанию. Клиент с портом по умолчанию. Первое соединение происходит нормально. Второе соединение, равно как и последующие, выдает ошибку. Не помогает даже закрытие/переоткрытие обработки клиента. Помогает закрытие/переоткрытие сеанса 1С. В остальном все нормально - клиенты видят друг друга, обмен сообщениями происходит. Если нажать "отсоединиться", а затем "соединиться", то на первом клиенте идет без ошибки, второй клиент высвечивает все ту же ошибку.
40. maljaev 793 15.03.09 17:13 Сейчас в теме
Ошибся: один клиент 27001, второй 27002. Жалко нету редактирования постов.
41. maljaev 793 17.03.09 12:55 Сейчас в теме
Душелов, ты чего-нибудь по постам 39-40 скажешь? Будешь дорабатывать или нет?
43. Душелов 3911 17.03.09 13:21 Сейчас в теме
(41) Попробуй это http://infostart.ru/projects/3644/
Пока сделал автопрощупывание 10 портов
42. Душелов 3911 17.03.09 12:59 Сейчас в теме
Надо сделать отдельной разработкой и там это дело обсуждать ;)
44. Elfar 43 06.12.09 19:22 Сейчас в теме
Выполняю этот механизм на 7.7 и у меня при изменении(создании, удалении) в контролируемом каталоге вылетает ошибка и вылетает 1С-ка.
Подскажите в чём есть проблема.
Прикрепленные файлы:
45. koreav 53 21.12.09 16:50 Сейчас в теме
1С:Предприятие 8.1 (8.1.13.41), при возникновении event'а окно 1С закрывается без сообщения об ошибке
46. fpohtmeh 109 31.05.10 18:15 Сейчас в теме
Я не сторонник того, чтобы в имя компоненты впихивать свое имя
Тем более комбинация англ. и рус. слов (Душелов и Filewatcher)...
Впрочем, это моё мнение
47. shushkovka 132 27.08.10 16:02 Сейчас в теме
Платформа 8.1.14.72. reg.bat отработал без ругани. Запускаю мониторинг на диск C:\*.*, создаю любой файл... 1С вылетает "без шума и пыли"... где копать?
48. idle 89 03.06.13 17:35 Сейчас в теме
Прописал компоненту и описал контролируемый каталог и тип файлов...
Процедура ПриНачалеРаботыСистемы()
	Попытка
		Мониторинг = СоздатьОбъект("AddIn.FileWatcher");
	Исключение
		Сообщить("Ошибка создания объекта внешней компоненты: AddIn.FileWatcher");
	КонецПопытки;
	ЭлМон = Мониторинг.Добавить("файло");
	ЭлМон.Путь = "C:\temp\";
	ЭлМон.Фильтр = "*.csv";
	ЭлМон.ФильтрИзменений = "Модификация";
	ЭлМон.Активирован = 1;
КонецПроцедуры
Показать

При проверке работоспособности (создании или изменении существующего в папке файла) 1С вылетает...

Подскажите в чем может быть проблема?
49. Ёпрст 1036 03.06.13 17:40 Сейчас в теме
(48) Автора ВК уже нет в живых, врят ли кто-то будет поддерживать его творения.
50. Ёпрст 1036 03.06.13 17:41 Сейчас в теме
А так, через regsvr32 попробуй зарегить вк, для начала
51. idle 89 03.06.13 18:24 Сейчас в теме
(50) Ёпрст, Таки с этого и начал работу с компонентой...
Далее в глобальнике:
Попытка
	ПодключитьВнешнююКомпоненту("AddIn.FileWatcher");
	Сообщить("Внешняя компонента мониторинга папки успешно загружена!");
Исключение
	Сообщить("Не удалось подключить компоненту ""AddIn.FileWatcher""");
КонецПопытки;

и еще что выше написал в первом сообщении...
Хотел насладиться в отладчике пойманным событием, но увы...
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Москва
зарплата от 100 000 руб. до 150 000 руб.
Полный день

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Специалист внедрения и сопровождения 1С
Москва
зарплата от 80 000 руб.
Полный день

Product Owner (Менеджер по продукту 1С)
Москва
зарплата от 100 000 руб. до 170 000 руб.
Полный день

Тим лид по разработке 1С (Team Lead 1С)
Москва
зарплата от 100 000 руб. до 200 000 руб.
Полный день