EventProxy - внешняя компонента для асинхронной обработки событий COM-объектов (работает в 7.7 и 8.0)

17.03.08

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

EventProxy - внешняя компонента для асинхронной обработки событий COM-объектов.
Работает в 7.7 и в 8.0

Скачать файл

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

Наименование Бесплатно
EventProxy.rar
.1205761159 16,52Kb
261
261 Скачать бесплатно

Содержит единственный объект EventProxy.

Свойства:

  • ГлубинаБуфераСобытий(EventBufferDepth) - глубина буфера событий интерфейса IAsyncEvent
  • ГлобальныйКонтекст(GlobalContext) - собственно он и есть

Методы:

  • Источник (Source) Устанавливает источник событий.
    параметры:
    • Источник - собственно источник событий.
    • ProgID - ProgID источника (По этому ProgID определяются DISPID и имена событий)
    • ИмяИсточника - имя источника событий, как оно будет передано в процедуру ОбработкаВнешнегоСобытия
  • ПолучитьОбъект (GetObject)
    передает свой единственный параметр в ф-ю CoGetObject и возвращает полученный объект (аналог GetObject в VB)
  • Сериализовать
    сериализует переданный параметр при помощи ObjRefMoniker

При вызове метода "Источник", EventProxy подписывается на события источника.
При получении события оно передается в 1С через IAsyncEvent.

В процедуре ОбработкаВнешнегоСобытия(Источник, Событие, Данные) аргумент "Данные" содержит сериализованный список значений с параметрами события. Для десериализации параметров события необходимо вызвать функцию ЗначениеИзСтрокиВнутр(Данные). Параметры с типом VT_DISPATCH сериализуются при помощи ObjRefMoniker и могут быть десериализованы методом "ПолучитьОбъект".

Поскольку обработка событий в 1С идет в асинхронном режиме, следует соблюдать осторожность при использовании параметров, восстановленных из ссылки ObjRef, т.к. к тому времени, когда у 1С появится время обработать внешнее событие, объект может прекратить свое существование.

Пример использования:

Перем Обработчик, ОбработчикСобытий,objWMIServices;

Процедура ПриНачалеРаботыСистемы()
	//ПодключитьВнешнююКомпоненту("Addin.EventProxy");
	ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"EventProxy.dll");
	ОбработчикСобытий=СоздатьОбъект("Addin.EventProxy");
	ОбработчикСобытий.ГлубинаБуфераСобытий=200;
	Обработчик=СоздатьОбъект("WbemScripting.SWbemSink");
	ОбработчикСобытий.Источник(Обработчик,"WbemScripting.SWbemSink","WMISink");
	objWMIServices = ОбработчикСобытий.ПолучитьОбъект( "winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2");
	Shell=СоздатьОбъект("WScript.Shell");
	Env=Shell.Environment("Process");
	objWMIServices.ExecNotificationQueryAsync(Обработчик,
	"SELECT * FROM __InstanceOperationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_PrintJob'
	|AND TargetInstance.Owner='"+Env.Item("UserName")+"'");
КонецПроцедуры	// ПриОткрытии

Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
	Если (Источник="WMISink") и (Событие="OnObjectReady") Тогда
		Д=ЗначениеИзСтрокиВнутр(Данные);
		WMIObj=ОбработчикСобытий.ПолучитьОбъект(Д.ПолучитьЗначение(1));
		ИмяСобытия=WMIObj.SystemProperties_.Item("__Class").Value;
		Job=WMIObj.TargetInstance;
		Если ИмяСобытия="__InstanceDeletionEvent" Тогда
			Если Job.PagesPrinted=Job.TotalPages Тогда
				Сообщить("Документ "+Job.Document+" напечатан");
			Иначе
				Сообщить("Документ "+Job.Document+" не напечатан","!!!");
			КонецЕсли;
		КонецЕсли;
		Сообщить("Name:"+Job.Name);
		Сообщить("Caption:"+Job.Caption);
		Сообщить("Description:"+Job.Description);
		Сообщить("Document:"+Job.Document);
		Сообщить("Owner:"+Job.Owner); 
		Сообщить("TotalPages:"+Job.TotalPages);
		Сообщить("StartTime:"+Job.StartTime);
		Сообщить("HostPrintQueue:"+Job.HostPrintQueue);
		Сообщить("JobStatus:"+Job.JobStatus);
		Сообщить("Size:"+Job.Size);
		Сообщить("Status:"+Job.Status);
		Сообщить("StatusMask:"+Job.StatusMask);
		Сообщить("PagesPrinted:"+Job.PagesPrinted);
		Сообщить("JobId:"+Job.JobId);
	КонецЕсли;
КонецПроцедуры	// ОбработкаВнешнегоСобытия

См. также

Внешние источники данных Программист Бизнес-аналитик Пользователь Платформа 1С v8.3 Управляемые формы Анализ и прогнозирование 1C:Бухгалтерия Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

28500 руб.

15.11.2022    22264    23    49    

39

Зарплата Внешние источники данных Бюджетный учет Перенос данных 1C Системный администратор Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 8 учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

120000 руб.

19.08.2020    26112    25    1    

28

Внешние источники данных Зарплата Бюджетный учет Программист Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 7.хх учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

84000 руб.

24.04.2017    52264    104    165    

91

Внешние источники данных Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Готовая интеграция для управляемых форм. Встраивается в вашу 1С как расширение. Реализует автоматический обмен данными между 1С (1С:Фитнес клуб и аналогов) и СКУД RusGuard, автоматизирует бизнес-процессы по созданию и учету сотрудников в СКУД. Значительно упрощает работу специалистов отдела кадров и отдела безопасности: избавляет от двойного ввода информации в 1С и СКУД.

94999 руб.

11.07.2024    1158    1    0    

3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 10 учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

84000 руб.

05.10.2022    11437    13    8    

15

Зарплата Внешние источники данных Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 8 организаций (далее Парус) в конфигурацию 1С:Зарплата и управление персоналом, ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

120000 руб.

07.06.2021    13611    2    3    

3

Розничная торговля Внешние источники данных Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Бухгалтерский учет 1С:Бухгалтерия 3.0 Фармацевтика, аптеки Россия Бухгалтерский учет Платные (руб)

Внешняя обработка загрузки данных из файла-выгрузки, сформированного в программе F3 TAIL версии 3.4 (и выше) или еФарма версии 2.1, в базу конфигурации 1С: Бухгалтерия предприятия 8, ред. 3.0 (базовая, ПРОФ, КОРП, ФРЕШ).

13200 руб.

19.12.2016    48155    93    106    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Abadonna 3970 09.01.07 07:05 Сейчас в теме
2. steban 73 08.01.07 20:29 Сейчас в теме
При вызове метода Источник создается происходит подписка на события.
Обработка событий происходит в процедуре ОбработкаВнешнегоСобытия, где Источник-имя заданное при подписке (чтобы различать источники), Событие - наименование события, как оно прописано в TypeLibrary источника, данные - список значений с параметрами события, сериализованный методом, аналогичным ЗначениеВСтрокуВнутр.
Параметры с типом VT_DISPATCH надо дополнительно десериализовать методом ПолучитьОбъект (GetObject).
Могу набросать пример по отслеживанию событий файловой системы.
3. пользователь 08.01.07 19:56
Сообщение было скрыто модератором.
...
4. steban 73 11.11.06 12:56 Сейчас в теме
С аутглюком пример получился неудачный - очень часто к моменту обработки события ссылка на письмо становится инвалидной.
Заменил на отслеживание событий очереди принтера через WMI.
5. sumerian 27.11.07 15:55 Сейчас в теме
прикрутил для отслеживания появления в папке файлов. работает, но wmiprvse.exe отжирает до 60% процессорного времени, после ОбработчикСобытий=0 и Обработчик=0 процесс не исчезает. убиваешь в диспетчере задач - сам поднимается и опять жреть. есть решение?
6. steban 73 24.12.07 15:58 Сейчас в теме
2 sumerian:
решение есть - увеличить polling interval.
Код
within 10
Показать полностью
7. steban 73 17.03.08 16:40 Сейчас в теме
Добавлена поддержка объектов, не реализующих IProvideClassInfo (например InternetExplorer.Application )
8. German 413 06.07.08 01:21 Сейчас в теме
А как использовать с ADODB.Connection?

Код
      
ОбработчикСобытий=Новый ("Addin.EventProxy");
ОбработчикСобытий.ГлубинаБуфераСобытий=200;
Обработчик= Новый COMОбъект("ADODB.Connection");
Обработчик.ConnectionString = СтрокаПодключения;
Обработчик.ConnectionTimeout=0;
Обработчик.CursorLocation=3;
Обработчик.Open();
ОбработчикСобытий.Источник(Обработчик,"ADODB.Connection","ADO");
АсинхронныйОбъект=ОбработчикСобытий.ПолучитьОбъект(" "); 
Показать полностью


Что передать в функцию ПолучитьОбъект чтобы вернуть объект?
10. vis_tmp 32 25.04.20 14:07 Сейчас в теме
Никак не могу найти, есть ли возможность для 7.7 использовать Rabbit MQ ?
Оставьте свое сообщение