Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
12 дек 2024, 10:38

Получения оповещения СОМобъекта

Автор Inovatech, 09 авг 2021, 21:54

0 Пользователей и 1 гость просматривают эту тему.

Inovatech

Добрый вечер уважаемые!
Помогите пожалуйста решить одну проблемку!

Запустил программу в фоновом режиме.
Задаю команды, но не могу получить результаты.

Источник от создателей программы для запуска в фоновом режиме и пример в VB на вложенном файле.

Мой код:
      objLAPI = Новый COMОбъект("LiaisonAPI.ctlLAPI");
      
      sessions = objLAPI.GetSessionNames();
      sessions = СтрЗаменить(sessions,"Emulator|","");
      ТекСессия = Лев(sessions,Найти(sessions,"|")-1);
      
      objLAPI.Session = ТекСессия;
      
      objConn = objLAPI.Connect();
      
      Если НЕ objConn Тогда
         Сообщить("Провал");
      КонецЕсли;

      ????????

      objLAPI.NetSignIn();

antoneus

Из фонового задания надо писать в какой-нибудь текстовый лог. Или пользоваться объектом СообщениеПользователю и потом выгребать это все методом ПолучитьСообщенияПользователю.

Inovatech

antoneus, спасибо за ваш ответ.

Может я неправильно выразился или не понял корректно.

Короче, я должен ловить следующие события :
Connected
Disconnected
Err
Received

после команды (выполнения регламентных заданий), скажем send(), а ответ приходит от объекта в течение максимум 20 секунд (в качестве вышеупомянутых событий).
Как отловить "ответ" ?

antoneus

Ну, есть такая конструкция как ДобавитьОбработчик, я правда не знаю, как она в фоновом задании будет работать. Типа такого:

ДобавитьОбработчик objLAPI.Connected, ОбработкаСоединения;
и далее

Процедура ОБработкаСоединения(ВходныеПараметры)

    .....

Inovatech

antoneus, спасибо за ваш ответ!

Я так и сделал,
Но, увы, у меня почему-то не получился (((.
еще раз ковыряюсь тогда

Inovatech

Мой код был таким:

.............
Сч = 0;
Пока Сч<Таймер И НЕ Найдена Цикл
Сч=Сч+1;
ДобавитьОбработчик objLAPI.Received, ОбработкаПолучен;
ДобавитьОбработчик objLAPI.Err, ОбработкаОшибка;
ДобавитьОбработчик objLAPI.Connected, ОбработкаСоединен;
ДобавитьОбработчик objLAPI.Disconnected, ОбработкаРазединен;
КонецЦикла;
Найдена = Ложь;

.................


Процедура ОбработкаСоединен()
Соединен = Истина;
Найдена = Истина;
.....
КонецПроцедуры

Процедура ОбработкаРазединен()
Соединен = Ложь;
Найдена = Истина;
.....
КонецПроцедуры

Процедура ОбработкаОшибка(КодОшибки,ОписОшибки)
Ошибка = КодОшибки;
Найдена = Истина;
.....
КонецПроцедуры

Процедура ОбработкаПолучен(ПолученныйОтвет)
ДанныеИ = ПолученныйОтвет;
Найдена = Истина;
.....
КонецПроцедуры

antoneus

Не-не, обработчики надо добавить один раз, и потом отправить команду на соединение, например. Когда в объекте возникнет событие - должна вызваться процедура обработки этого события. Возможно, objLAPI надо еще сделать глобальной процедурой модуля.

Inovatech

antoneus, спасибо за Ваше замечания.

Цитата: antoneus от 10 авг 2021, 18:30Не-не, обработчики надо добавить один раз, и потом отправить команду на соединение, например.
Я с вами согласен.

Я сперва так и сделал.
Но не была отклика.

Получается, что я ошибся засунув ДобавитьОбработчик в цикл.

Когда меняю параметры события, 1С ругается, например, если вместо:
....
Процедура ОбработкаОшибка(КодОшибки,ОписОшибки)
    Ошибка = КодОшибки;
....

пишу так:
Процедура ОбработкаОшибка(КодОшибки)
.....

Отсюда можно сделать вывод, что параметры событие правильные.
Но почему-то не возникает событие....

Inovatech

antoneus, по-моему ошибка в другом месте.

Спасибо за Ваше внимание и уделенное время.
Искренне благодарю

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск