Отслеживание изменений каталога в REAL-TIME: Native ВК для 8.х

17.11.13

Разработка - Разработка внешних компонент

Давно у меня была задумка отследить, например, появление определенного файла в каталоге базы данных без использования различных таймеров и обработчиков ожидания. Настоящая ВК отслеживает изменения в выбранном каталоге в реальном времени и генерирует в 1С соответствующие внешние события. Выбранный каталог может быть как папкой, так и целым диском.

Бесплатные

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Узнавайте о новых бесплатных решениях в нашей телеграм-группе Инфостарт БЕСПЛАТНО

Наименование Скачано Бесплатно
Версия 1.0.0.1
.zip 314,95Kb
153 Скачать бесплатно
DirSpy1002.zip
.zip 289,18Kb
165 Скачать бесплатно

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Настоящая ВК появилась как побочный продукт при выполнении проекта по отслеживанию "нежелательных" файлов на компьютерах корпоративной сети. Текущая версия позволяет поддерживать отслеживание изменений одновременно в двух папках (на двух дисках). Выполнена по технологии Native, не требует регистрации в реестре.

Подключение ВК:

ПодключитьВнешнююКомпоненту(ПолноеИмяФайлаВК,"DirSpy",AddInType.Native);

Создание экземпляра класса:

Шпион = Новый("AddIn.DirSpy.V8DirSpy"); // слева любая глобальная переменная.

ВНИМАНИЕ: не проводите никакие эксперименты по использованию локальной переменной класса (например, обработкой), получите дамп.

Методы ВК:

Каталог1(ИмяКаталога,фл_Добавлен,фл_Удален,фл_Модифицирован,фл_Переименован) - устанавливает отслеживание изменений в выбранном каталоге.

ИмяКаталога - строка

фл_Добавлен,фл_Удален,фл_Модифицирован,фл_Переименован - флаги генерации внешнего события, если Истина - генерируется событие:

Источник="DIR_SPY";

Событие- одно из:"FILE_ADDED","FILE_REMOVED","FILE_MODIFIED","FILE_RENAMED_OLD_NAME", "FILE_RENAMED_NEW_NAME".

Данные - полное имя файла.

Флажки - тип булево, необязательные, по умолчанию фл_Добавлен=Истина, остальные Ложь

Метод выполняется в отдельном потоке, возвращаемое значение - идентификатор потока. Если ноль - ошибка создания потока.

Каталог2(ИмяКаталога,фл_Добавлен,фл_Удален,фл_Модифицирован,фл_Переименован) - полностью идентичен методу Каталог1

ОтключитьПоток(ИдентификаторПотока) - отключает слежение и удаляет поток с указанным идентификатором

//--- модуль обычного приложения---
Перем Шпион Экспорт;
Функция КаталогИБ() Экспорт
    КаталогИБ = СтрокаСоединенияИнформационнойБазы();
    КаталогИБ = Сред(КаталогИБ,7,СтрДлина(КаталогИБ)-8) + "\";
    Возврат КаталогИБ;
КонецФункции
Процедура ПриНачалеРаботыСистемы()
    ФайлВК=КаталогИБ()+"DirSpy.dll";
    Файл= Новый Файл(ФайлВК);
    Если Файл.Существует() Тогда
        //-- подключение компоненты--
        ПодключитьВнешнююКомпоненту(ФайлВК,"DirSpy",AddInType.Native);
        //-- создание экземпляра класса--
        Шпион =    Новый("AddIn.DirSpy.V8DirSpy");
        Каталог="c:\";   // весь диск С
        //                            ADD     DEL  CHANGE RENAME
        Хендл1=Шпион.Каталог1(Каталог,Истина,Истина,Ложь,Ложь);
        Если Хендл1=0 Тогда
            Сообщить("Не удалось создать поток");
        КонецЕсли;

        Каталог="d:\";  // весь диск D
        //                            ADD     DEL  CHANGE RENAME
        Хендл2=Шпион.Каталог2(Каталог,Истина,Истина,Истина,Истина);
        Если Хендл2=0 Тогда
            Сообщить("Не удалось создать поток");
        КонецЕсли;

        Иначе
        Сообщить("Не обнаружен файл ВК, скопируйте ""DirSpy.dll"" в КаталогИБ "
        +ФайлВК,СтатусСообщения.Информация);
    КонецЕсли;
КонецПроцедуры

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


Примечание для продвинуто-любопытных: используется API ReadDirectoryChangesW

В архиве находится папка с тестовой базой+DirSpy.dll

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Разработка внешних компонент POS терминал Рабочее место Розничная торговля Программист Пользователь 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Управленческий учет Платные (руб)

Медиадисплей покупателя может отображать текущую покупку на кассовом месте, показывать видеорекламу, баннеры, во время простоя разворачивать рекламу на весь экран. Экран можно использовать в качестве графического меню-борда в кафе и видеовывески. В качестве устройства отображения можно использовать Android-планшеты, смарт-телевизоры с Android, мониторы или проекторы под управлением Windows или Linux-компьютера. Linux-версия успешно запускается на одноплатных компьютерах Raspberri Pi и Orange Pi. Настраивается ЛЮБОЙ ДИЗАЙН экрана при помощи встроенного графического редактора! Решение можно масштабировать от одного экрана до тысяч экранов с централизованным управлением.

18300 руб.

30.05.2017    57118    11    71    

48

Разработка внешних компонент Программист 1С:Предприятие 8 1C:Бухгалтерия 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 Платные (руб)

Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).

5084 руб.

12.05.2020    33766    145    100    

100

Разработка внешних компонент Программист 1С:Предприятие 8 1C:Бухгалтерия Платные (руб)

Внешняя компонента позволяет печатать PDF файлы непосредственно из 1С, не используя при этом сторонних программ. Прекрасно работает на сервере, тонком клиенте и веб-клиенте. Основана на проекте PDFium из состава проекта Chromium/Chrome

5084 руб.

17.09.2018    41380    118    128    

120

Разработка внешних компонент Программист 1С 8.3 Бесплатно (free)

В современных корпоративных решениях на платформе 1С:Предприятие 8.3 всё чаще возникает потребность в визуальном моделировании и автоматизации бизнес-процессов с использованием нотации BPMN 2.0. Стандартные средства платформы не предоставляют полноценного редактора BPMN, однако интеграция открытой библиотеки bpmn-js позволяет реализовать интерактивное моделирование бизнес-процессов непосредственно в 1С. В статье рассмотрены архитектура решения, пошаговая инструкция по сборке библиотеки из исходников для WebKit, а также примеры программного взаимодействия между 1С и JavaScript.

03.04.2026    2372    SultanovStas    8    

21

Разработка внешних компонент Системный администратор Программист Стажер Бесплатно (free)

Библиотека для работы с базами SQLite из 1С на основе внешней компоненты. Для Linux и Windows, бесплатно и с открытым исходным кодом!

14.01.2025    6912    bayselonarrend    17    

54

Разработка внешних компонент Программист 1С:Предприятие 8 Россия Бесплатно (free)

В статье описывается приложение-конструктор внешних компонент (native API). Конструктор упрощает процесс разработки за счет удобного добавления всех нужных функций и процедур в графическом режиме, с указанием их параметров и типов параметров. На выходе приложение генерирует готовый код на С++ и Rust и позволяет сразу приступить к реализации, без настройки API компоненты вручную.

04.12.2024    11924    kovalevdmv    29    

83
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Alex1Cnic 153 10.10.13 10:22 Сейчас в теме
Интересно, а для 1С-ки как применить? а так плюс конечно за труды
2. Abadonna 3977 10.10.13 10:32 Сейчас в теме
(1) Alex1Cnic,
а для 1С-ки как применить?

Самое первое, что приходит в голову:
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
	Если Источник="DIR_SPY" Тогда
		Если Событие="FILE_ADDED" Тогда
			ИмяФайла=Данные;
			Если Найти(ИмяФайла,"GoNah")>0 Тогда
				ЗавершитьРаботуСистемы(Ложь,Ложь);
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

Показать
3. пользователь 10.10.13 10:35
Сообщение было скрыто модератором.
...
16. Abadonna 3977 11.10.13 07:24 Сейчас в теме
(3) Eugeneer,
Работает на управляемых формах? в клиент-сервере.

Не поленился проверить на базе "Работа с клиентами", построенной на основе БП 3.0. Уэфнее и сервер-клиентнее не бывает:))
&НаКлиенте
Процедура ЗапуститьШпиона(Команда)
	Если Шпион=Неопределено Тогда  // Шпион - ГЛОБАЛЬНАЯ!
		Возврат;
	КонецЕсли;
	
	Каталог="c:\";   // весь диск С
	Хендл1=Шпион.Каталог1(Каталог,Истина,Истина,Ложь,Ложь);
	Если Хендл1=0 Тогда
		Сообщить("Не удалось создать поток");
	КонецЕсли;
КонецПроцедуры

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

Показать


Прикрепленные файлы:
4. Abadonna 3977 10.10.13 10:42 Сейчас в теме
Да ВЕЗДЕ мои работают ;) Эту конкретно не проверял
5. Ёпрст 1068 10.10.13 10:54 Сейчас в теме
6. Ёпрст 1068 10.10.13 10:55 Сейчас в теме
Это... файло_ренайм пасёт ? Ну или просто изменение файла, атрибутов там его ?..
7. Abadonna 3977 10.10.13 10:56 Сейчас в теме
(6) Ёпрст, это... а почитать не катит? ;)
8. Ёпрст 1068 10.10.13 11:03 Сейчас в теме
Ээ.. че почитать ?
На картинке вижу токма аддед и ремувед..
10. Abadonna 3977 10.10.13 11:10 Сейчас в теме
(8)
Ээ.. че почитать ?

Подозреваю, что описание :)))
Каталог1(ИмяКаталога,фл_Добавлен,фл_Удален,фл_Модифицирован,фл_Переименован) - устанавливает отслеживание изменений в выбранном каталоге.

ИмяКаталога - строка

фл_Добавлен,фл_Удален,фл_Модифицирован,фл_Переименован - флаги генерации внешнего события, если Истина - генерируется событие:

Источник="DIR_SPY";

Событие- одно из:"FILE_ADDED","FILE_REMOVED","FILE_MODIFIED","FILE_RENAMED_OLD_NAME", "FILE_RENAMED_NEW_NAME".


На картинке:
Прикрепленные файлы:
11. Ёпрст 1068 10.10.13 11:23 Сейчас в теме
9. Ёпрст 1068 10.10.13 11:08 Сейчас в теме
аа... вижу ненэйм..
Ну молоток.
12. mptt 16 10.10.13 11:55 Сейчас в теме
Плюс одназначно.. Еще бы на исходники DirSpy взглянуть..
13. hogik 447 10.10.13 15:52 Сейчас в теме
Аркадий.
Извини, не в тему напишу.
Нажимаю звёздочку. Вхожу в список "одобряющих". Я в списке есть. Возвращаюсь на страницу разработки. Нажимаю звёздочку. Смотрю список - меня там нетУ. И так многократно можно повторить...
14. Abadonna 3977 10.10.13 17:00 Сейчас в теме
(13)
Не дай Бог жить с эпоху перестройки сайтов. (с) Древняя мудрость

Фиг его знает, я три раза попробовал - три раза тебя в списке вижу
15. hogik 447 10.10.13 17:19 Сейчас в теме
(14)
Дык. ;-) Я же плюс тебе ставлю нажатием звёздочки, а ты просто на меня смотришь.
Т.е. если я тебе ставлю плюс настойчиво (многократным нажатием), то я его могу в результате и не поставить. Блеск... :-(
P.S.
Написал ещё в теме про новый "дизайн" сайта. Может разберутся...
K_A_O; cleaner_it; +2 Ответить
17. kirillkr 30 11.10.13 12:10 Сейчас в теме
(0) А для параноиков исходник библиотеки идет?
18. Abadonna 3977 11.10.13 12:16 Сейчас в теме
(17) kirillkr,
А для параноиков исходник библиотеки идет?

Параноикам могу порекомендовать погуглить строчку "ReadDirectoryChangesW Дельфи", например ;)
19. kirillkr 30 11.10.13 12:22 Сейчас в теме
(18) и писать свою ВК? Зачем? Или там все-таки есть секретная отправка данных в АНБ?
20. Abadonna 3977 11.10.13 12:26 Сейчас в теме
(19) kirillkr, я на ГРУ работаю ;)
Прошли те времена, когда я исходники дарил.
wunderland; kirillkr; yandextesting; +3 Ответить
21. kirillkr 30 11.10.13 18:01 Сейчас в теме
(20) вот так вот "Большой Брат" следит в России.
23. Abadonna 3977 12.10.13 06:02 Сейчас в теме
(22) slimper, is evil for crooked-hands arseholes
24. Evil Beaver 8406 14.10.13 17:17 Сейчас в теме
Вещь полезная, API простой, всегда можно сделать при желании, но когда есть готовый вариант, лучше его использовать. Посему, исходники для параноиков все-таки не помешают. Но хозяин-барин, разумеется :)
25. Abadonna 3977 14.10.13 21:48 Сейчас в теме
(24) Evil Beaver,
API простой

Ну, именно эту API я бы никак к простой не отнес, это не какой-нибудь FindWindow.
но когда есть готовый вариант, лучше его использовать.

Вот он, лежит готовый вариант - используйте :)))
Evil Beaver; hogik; +2 Ответить
26. Evil Beaver 8406 14.10.13 23:43 Сейчас в теме
(25) дык, спасибо, как понадобится, так воспользуюсь. Но мой внутренний параноик хнычет:)
27. vladon 26.10.13 15:16 Сейчас в теме
Если не секрет, как в Native API генерировать внешние события?
28. Abadonna 3977 26.10.13 21:10 Сейчас в теме
(27) vladon, см.ВК Native API
type
  TV8AddInDefBase = class //IAddInDefBase см. документацию от 1С
  public
    procedure Destroy1; virtual; abstract;
    function AddError(wcode: word; const source: PWideChar;
      const descr: PWideChar;
      scode: integer): boolean; virtual; stdcall; abstract;
    function Read(wszPropName: PWideChar;
      pVal: PV8Variant;
      pErrCode: PInteger;
      errDescriptor: PPWideChar): boolean; virtual; stdcall; abstract;
    function Write(wszPropName: PWideChar;
      pVar: PV8Variant): boolean; virtual; stdcall; abstract;
    function RegisterProfileAs(wszProfileName: PWideChar): boolean; virtual; stdcall; abstract;
    function SetEventBufferDepth(lDepth: integer): boolean; virtual; stdcall; abstract;
    function GetEventBufferDepth: integer; virtual; stdcall; abstract;
    function ExternalEvent(wszSource, wszMessage, wszData: PWideChar): boolean; virtual; stdcall; abstract;
    procedure CleanEventBuffer; virtual; stdcall; abstract;
    function SetStatusLine(wszStatusLine: PWideChar): boolean; virtual; stdcall; abstract;
    procedure ResetStatusLine; virtual; stdcall; abstract;
  end;
Показать
29. kentavr27 97 16.11.13 21:35 Сейчас в теме
Хотелось бы уточнить... Один экземпляр класса одновременно может отслеживать не более двух каталогов? Потому как при попытке второй раз использовать метод Хендл1=Шпион.Каталог1(Каталог,Истина,Истина,Ложь,Ложь) 1с-ка молча валится. Так и должно быть?
30. Abadonna 3977 17.11.13 02:13 Сейчас в теме
(29) kentavr27, Мне даже в голову не приходило проверить на повторное использование, ибо - а на фиг?
Проверил, да - валится. Пока считай, что так и должно быть. Посмотрю...
Подправил, вот аж так теперь работает:
Хендл1=Шпион.Каталог1(Каталог,Истина,Истина,Ложь,Ложь);
		Если Хендл1=0 Тогда
			Сообщить("Не удалось создать поток");
		КонецЕсли;
		Хендл1=Шпион.Каталог1(Каталог,Истина,Истина,Ложь,Ложь);
		Если Хендл1=0 Тогда
			Сообщить("Не удалось создать поток");
		КонецЕсли;
		Хендл1=Шпион.Каталог1(Каталог,Истина,Истина,Ложь,Ложь);
		Если Хендл1=0 Тогда
			Сообщить("Не удалось создать поток");
		КонецЕсли;
		Хендл1=Шпион.Каталог1(Каталог,Истина,Истина,Ложь,Ложь);
		Если Хендл1=0 Тогда
			Сообщить("Не удалось создать поток");
		КонецЕсли;

Показать

Будет новая, очень расширенная версия, там будет без косяка
31. Abadonna 3977 17.11.13 03:29 Сейчас в теме
(29) Залил подправленную 1.0.0.2
32. Kalam 105 20.11.13 11:46 Сейчас в теме
А зачем это к 1С цеплять?
А если в 1С, то почему не сделать через ОбработчикОжидания?
В чем сила, брат?
33. Abadonna 3977 20.11.13 14:27 Сейчас в теме
(32) Kalam,
то почему не сделать через ОбработчикОжидания?

Кто не дает? Делай. А мне надо было секунда в секунду - я для себя и сделал. А вот зачем мне это надо было - я сам знаю ;)
И вообще у меня привычка дурная: чем через задницу в 1С выеживаться, мне проще ВК написать
skif-m; kentavr27; +2 Ответить
34. Свой 164 25.11.13 02:03 Сейчас в теме
в 1С 7.7 компонента будет работать ?
35. Abadonna 3977 25.11.13 04:21 Сейчас в теме
(34) Свой, нет, конечно. Native для 7.7 не предусмотрен. Кстати, еще один резон завязать с 7.7 ;)
36. script 128 21.03.15 00:29 Сейчас в теме
Бeдет ли отслеживать компонента изменения файлов в ситевом каталоге или виртуальном, подключенном через RDP ?
41. user595194_bendery_sh 04.06.25 22:52 Сейчас в теме
(36) будет только факт изменения, а что изменено не покажет
37. пользователь 03.11.15 13:53
Сообщение было скрыто модератором.
...
38. Al777 12.10.16 13:53 Сейчас в теме
Заметил следующее. Платформа 8.2. Конфигурация: Комплексная автоматизация 1.1.76 + CRM 1.4.10. Подключение ВК производится при начале работы системы. Она хорошо работает, претензий нет, но пользователь, допустим, вынес какие-то отчёты в виде картинок или картинок с надписью на свою панель различных значков и закрыл 1С Предприятие. Когда опять открыл 1С Предприятие, то там нет последних сохранённых отчётов в виде картинок. Без использования этой ВК всё замечательно сохраняется и не слетает. Кто-нибудь с этим сталкивался? Как решили проблему?
39. Alias 177 04.04.18 12:18 Сейчас в теме
Событие "FILE_RENAMED_NEW_NAME" не приходит, есть только "FILE_RENAMED_OLD_NAME".
Почему так может быть? С added, removed, modified проблем нет.
Win 7 pro х64; 1С 8.3.10.

P.S. к сожалению, понимаю, что вопрос не к автору ВК... :( может у кого-то есть мысли или другая аналогичная ВК.
40. user595194_bendery_sh 01.06.25 21:09 Сейчас в теме
На 8.3.27 серверная (w2008R2) и файловая (W10) вылетает вскоре после загрузки длл
Сигнатура проблемы:
Имя события проблемы: BEX
Имя приложения: 1CV8.exe
Версия приложения: 8.3.27.1441
Отметка времени приложения: 67c0e4bb
Имя модуля с ошибкой: DirSpy.dll_unloaded
Версия модуля с ошибкой: 0.0.0.0
Отметка времени модуля с ошибкой: 2a425e19
Смещение исключения: 118b9dac
Код исключения: c0000005
Данные исключения: 00000008
Версия ОС: 6.1.7601.2.1.0.16.7
Код языка: 1049
Дополнительные сведения 1: 0a9e
Дополнительные сведения 2: 0a9e372d3b4ad19135b953a78882e789
Дополнительные сведения 3: 0a9e
Дополнительные сведения 4: 0a9e372d3b4ad19135b953a78882e789
43. DaYmonSmol 13.02.26 11:30 Сейчас в теме
(40) Как получилось подключить ?
42. DaYmonSmol 13.02.26 11:28 Сейчас в теме
Ребят, а можно на 8.3 подключить как-то ??
Для отправки сообщения требуется регистрация/авторизация