Имя: Пароль:
1C
 
C# и 1С ВнешнееСобытия
0 vashkovich
 
30.06.11
14:22
Коллеги, вопрос в следующем.

Создано приложение на С# вызывающее 1С 8.2 как Com объект.
Вызов следующий:
ConnectString  =@"....."
Object[] arguments = { ConnectString };
v82comConnector = Type.GetTypeFromProgID("V82.COMConnector");
            v82 = Activator.CreateInstance(v82comConnector);
            Connection = v82comConnector.InvokeMember("Connect", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Static, null, v82, arguments);
           Type t = Connection.GetType();
           connect1c = t.IsCOMObject ? true : false;

Вызов проходит удачно.

Необходимо вызвать срабатывание в 1С метода ВнешнееСобытие.

Пробую сделать так:

Object[] _arg = new object[3];
               _arg[0] = "SocketServer";
               _arg[1] = "";
               _arg[2] = richTextBoxReceivedMsg.Text;

Object res= _v82comConnector.InvokeMember("ExternalEvent", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Static, null, v82, _arg);
               richTextBoxReceivedMsg.Text = "";

Получаю ошибку Unknown name

Пробовал вызвать так
_v82comConnector.AsyncEvent.ExternalEvent("SocketServer", "", richTextBoxReceivedMsg.Text);

все равно не получилось.

Посему вопрос.
Как правильно вызвать выполнение метода ВнешнееСобытие?
1 Axel2009
 
30.06.11
14:32
Внешнее событие есть у объекта формы тока.. а ты для комконнектора вызываешь. не?
2 Axel2009
 
30.06.11
14:33
(1)+ а для приложения нужно ОбработкаВнешнегоСобытия, аля ExternEventProcessing
3 vashkovich
 
30.06.11
14:41
ExternEventProcessing не подходит.

Если писать внешнюю компоненту, то там вызвать в 1С ОбработкуВнешнегоСобытия очень просто пишешь:

string s1;
string s2;
string s3;
s1 = (string)paParams.GetValue(0);
s2 = (string)paParams.GetValue(1);
s3 = (string)paParams.GetValue(2);
V7Data.AsyncEvent.ExternalEvent(s1, s2, s3);

И в 1С обрабатыващь как надо переданные параметры.

А как через COM объект не понимаю :(
4 vashkovich
 
30.06.11
15:06
ПРоблему конечно можно решить создать в модуле приложения функцию с именем ExternalEvent, но это не будет полноценное внешнее событие :(
5 Axel2009
 
30.06.11
15:37
еще раз. в 1с в модуле есть только один предопределенный модуль с внешним событием. ExternEventProcessing
ExternalEvent относится к ФОРМЕ какоголибо объекта.
6 Axel2009
 
30.06.11
15:38
(5) неужели
bject res= _v82comConnector.InvokeMember("ExternEventProcessing", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Static, null, v82, _arg);
не подходит? у них одни и теже параметры.
7 vashkovich
 
30.06.11
15:57
хм....
прописал в модуле обычного приложения ОбработкаВнешнегоСобытия
запись в журнал
иногда пишет иногда вылетает с ошибкой.

буду разбираться дальше.

Спасибо за помощь !
8 Serginio1
 
30.06.11
16:14
Изодного потока? А чено динамики не используешь?
9 vashkovich
 
30.06.11
16:17
главное понять работает или нет, а дальше .... :)
10 Serginio1
 
30.06.11
16:34
А зачем тебе внешнее событие если ты через ком вызываешь. В любом случае ты можешь дергать все методы которые есть модулях помеченные как внешнее соединение
11 Scooter
 
30.06.11
16:37
(10)+1
мне тоже непонятно
12 vashkovich
 
30.06.11
17:15
Просто уже есть конфигурация в которой все прописано через внешнее событие.
13 Serginio1
 
30.06.11
17:21
Для того, что бу вызывать внешнее событие тебе нужен интерфйс IAsyncEvent. В свое время делал ВК которая возвращала Этот интерфейс, который уже передавался в СОМ объекты. Можешь поступить так же. Сделать функцию в 1С которая закружала бы ВК получала из неё IAsyncEvent и предавала его как результат
14 Scooter
 
30.06.11
17:30
(12)через СОМ вызывай метод обработки внешнего события
15 vashkovich
 
30.06.11
17:44
(14) так сейчас и поступаю :)
16 Scooter
 
30.06.11
17:45
(15)ну и не парься, нормально
или пиши ВК
17 vashkovich
 
30.06.11
17:46
(13) мне кажеться, это как-то сложновато получиться. Проще прописать в модуле приложения
ОбработкаВнешнегоСобытия(Источник, Событие, Данные) Экспорт
и дергать из COMа.
18 Serginio1
 
30.06.11
17:52
(17) Но они не будут вызываться в формах. Все от задачи. А глобальной функции тебе выше уже писали
Программист всегда исправляет последнюю ошибку.