Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Как передать события в 1С ? (число прочтений - 3525 )
Alex_Spb
Junior Member
**
Отсутствует



Сообщений: 43
Местоположение: Санкт-Петербург
Зарегистрирован: 21. Февраля 2008
Пол: Мужской
Как передать события в 1С ?
21. Января 2009 :: 12:38
Печать  
Добрый день.
Хочу реализовать такой механизм:
Из 1С запустить .Net приложение (WPF application на C#).
Данное .Net приложение например рисует схему объекта
пользователь выбирает помещение
и нажимает в .Net приложении кнопку отчет по помещению,
после этого я хочу чтобы
.Net приложение послало событие (как то уведомило 1С о выборе пользователя)
и поймать событие в 1С
ОбработкеВнешнего событие и построить отчет в 1С.

Я недавно стал изучать C# и никак не могу понять как это можно реализовать, пока есть только одна мысль
использовать компоненту EventProxy.dll и подписаться с её помощью на событие, но получается тогда как то надо встраивать в свое приложение com server  ?

Или можно как то более простым способом отправить сообщение
из .Net в 1С ку,
буду признателен если ктонибудь кинет кусок кода как это сделать.
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Как передать события в 1С ?
Ответ #1 - 22. Января 2009 :: 06:53
Печать  
"sadovnikov писал(а) Вчера :: 12:27:
ТвойОбъект1С.ИмяЭкспортируемойГлобальнойПроцедуры(Параметры)
Ничего не понял ..."

Что именно не понял?
В Инит далаешь так:
function TRiK_SQL.Init(pConnection: IDispatch): HResult; stdcall;
begin
  p1c       := pConnection;

Когда потребуется что-то сделать в 1С, делаешь так:

  //Получение указателя на 1С
  if VarType(obj) And varTypeMask = varEmpty then begin
    obj := OleVariant(p1c).AppDispatch;
    IDispatch(obj)._AddRef;
  end;

А потом спокойно вызываешь свойства и методы глобального контекста 1С-ки. Вариантов несколько.

1.
TempStr := obj.EvalExpr('КаталогИБ()+"SYSLOG\links.tmp"');

2.
obj.ExecuteBatch('ОкноСообщений_Click()');

3.
Spis := ISpis(IDispatch(obj.CreateObject('ValueList')));

4.
       MethodName := 'Инет_СтрокаОтКлиента';
       if IDispatch(obj).GetIDsOfNames(GUID_NULL, @MethodName, 1, LOCALE_USER_DEFAULT, @MethodID) = S_OK then begin
           //Параметры идут в обратном порядке
           Args[0] := ConnectServer^.GUID;
           Args[1] := ConnectServer^.ReadStr;

           DispParams.rgvarg:=@Args;   //Инициализация массива Variant
           DispParams.rgdispidNamedArgs := nil;
           DispParams.cArgs := 2;
           DispParams.cNamedArgs := 0;
           IDispatch(obj).Invoke(MethodID, GUID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, DispParams, @VarResult, @ExcepInfo, @ArgErr);
       end;

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать