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

17.03.08

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

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

Скачать исходный код

Наименование Файл Версия Размер
EventProxy.rar
.1205761159 16,52Kb
259
.1205761159 16,52Kb 259 Скачать бесплатно

Содержит единственный объект 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);
	КонецЕсли;
КонецПроцедуры	// ОбработкаВнешнегоСобытия

См. также

Перенос данных из Парус 8 в ЗГУ 3

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

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

84000 руб.

19.08.2020    22620    19    1    

22

Экстрактор данных 1С в BI - выгрузка данных из 1С в BI-аналитику

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

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

15.11.2022    13653    12    SQV0    47    

29

Перенос данных из Парус 10 в ЗГУ ред.3

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

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

60000 руб.

05.10.2022    9307    9    8    

11

Перенос данных из Парус 7.хх в ЗГУ ред.3

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

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

24000 руб.

24.04.2017    48842    97    163    

86

Перенос данных из Парус 10 (Торнадо) в ЗГУ ред.3 через Excel

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

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

24000 руб.

16.11.2018    30083    20    31    

21

Медиадисплей. Рекламный информационный монитор для покупателя.

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

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

16800 руб.

30.05.2017    52243    34    69    

43
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Abadonna 3959 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 1 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 ?
Оставьте свое сообщение