Главная » Файлы » Программируем в 1С » 1С и Другие системы

Скачивать материалы с сайта, могут только зарегистрированные пользователи.
Для регистрации заполните два поля ниже!

Через минуту Вы получите "Гостевой доступ"




ВК для асинхронной обработки событий COM-объектов
2009 Февраль 25, 14:14
ВК для асинхронной обработки событий COM-объектов
  

Внешняя компонента для 1С: Предприятие 8.0, 1С: Бухгалтерия 7.7, 1С: Торговля и склад 7.7, 1С: Зарплата и кадры 7.7

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

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

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

Методы:
* Источник (Source) Устанавливает источник событий.
параметры:
o Источник - собственно источник событий.
o ProgID - ProgID источника (По этому ProgID определяются DISPID и имена событий)
o ИмяИсточника - имя источника событий, как оно будет передано в процедуру
ОбработкаВнешнегоСобытия

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


http://www.1cpp.ru/forum/YaBB.pl?num=1152684759

Категория: 1С и Другие системы | Добавил: c1 | Теги: ВК для асинхронной обработки событи, скачать программы 1с бесплатно
Просмотров: 2711 | Загрузок: 15 | Рейтинг: 0.0/0

Выразить благодарность - Поделиться с друзьями!

 

Здесь все о технической стороне 1С!

 

Узнай, как правильно администрировать 1С Предприятие
Регистрируйся на бесплатный 7-ми дневный курс сейчас:

Ваш E-Mail в безопасности



Всего комментариев: 0
avatar