Имя: Пароль:
1C
1С v8
Как проверить идет ли обмен данными по Com-соединению?
, ,
0 Mikhail Volkov
 
19.05.20
09:45
Вопрос был задан в теме Ошибка формата потока - не открывается конфигуратор. Установка Com-соединения процесс длительный, сразу после обмена его нельзя разрывать, может понадобится. Сейчас оно разрывается по выходу пользователя из базы, или при подключении к другой базе. Хотелось бы рвать его по истечении получаса, но если оно не используется.
1 VladZ
 
19.05.20
10:15
Предлагаю отказаться от работы по Com-соединению. Избавишься от многих проблем.
2 Mikhail Volkov
 
19.05.20
10:35
(1) OLE нужен.
3 ДенисЧ
 
19.05.20
10:42
(2) OLE не нужен
4 Mikhail Volkov
 
19.05.20
10:52
(3) Нужен/не нужен - еще вопрос... до меня бы. Можно ли сразу открыть объект (не всю базу) по найденной ссылке в другой базе?
А по вопросу темы нет ответа?
5 Галахад
 
гуру
19.05.20
10:57
(4) Ну, не выходить сразу, а через полчаса.
6 ДенисЧ
 
19.05.20
11:00
(4) "Можно ли сразу открыть объект (не всю базу) по найденной ссылке в другой базе?"
За такое нужно бить тапком. По рыжей.
7 Mikhail Volkov
 
19.05.20
11:09
(6) Что так? Какая-то альтернатива OLE.
8 Mikhail Volkov
 
19.05.20
11:14
(5) Через полчаса по новой установит Com-соединение, если нужно.
9 VladZ
 
19.05.20
11:16
(8) Зачем?
10 Mikhail Volkov
 
19.05.20
11:40
(9) Что зачем? Если нужно что-то получить или записать в другой базе. Или по (4): сделал пользователь сверку двух баз (можно без Com-соединения, чем-то другим), обнаружил документ несоответствия. Хочет его открыть в той базе, прямо из своей базы, посмотреть, например, кто его редактировал.
11 fisher
 
19.05.20
11:42
Логируй.
Анализируй лог.
Профит.
12 VladZ
 
19.05.20
11:55
(10) Вывел реестр. Отдал тем, кто отвечает за эти данные.
Дальнейший анализ - в рамках другой информационной базы. Com-соединение не нужно.
13 Mikhail Volkov
 
19.05.20
13:26
(12) Приведу примеры использования Com-соединений: Обязательно ли совпадение версий платформы баз при соединении по COM ?, Обмен Альфа-Авто с КА2 (ERP): что лучше использовать WEB или HTTP сервис вместо COM?, Службы компонентов: возможно ли создать обертку OLE соединения V83.Application - в последнем как обойдешься без OLE? Но сейчас вопрос не о этом.
(11) Не то. Com-соединение хранится в переменной. Когда пользователю нужно обратиться к другой базе, то проверяется эта переменная. Если она Неопределено или не соответствует подключаемой базе, тогда устанавливается новое Com-соединение. Во время этой проверки в любом случае надо запускать или пере запускать обработку ожидания на разрыв Com-соединения. Это первое что в голову приходит. Может что лучше предложишь?
14 VladZ
 
19.05.20
13:49
(13) Ты привел список проблем, а не список примеров. Мой ответ не изменился: от Com-соединения необходимо отказаться.
15 Mikhail Volkov
 
19.05.20
14:23
(14) Да, и список проблем. Можешь их решить без Com-соединения?
Что-то не понял на счет перезапуска ПодключитьОбработчикОжидания(<ИмяПроцедуры>, <Интервал>, <Однократно>), если Однократно = Ложь и Интервал не истек, то она начнет с начало отсчитывать Интервал? А после того как отчитает Интервал, то надо делать ОтключитьОбработчикОжидания() или нет?
16 Mikhail Volkov
 
19.05.20
18:11
При перезапуске (пользователь снова обратился к другой базе) надо ли выполнять ОтключитьОбработчикОжидания(<ИмяПроцедуры>) перед ПодключитьОбработчикОжидания(<ИмяПроцедуры>, <Интервал>, <Однократно>), чтобы отсчет интервала пошел с начала?
17 breezee
 
19.05.20
19:22
Ком очень медленный. ОООООЧЕНЬ. Запилите веб-сервис
18 Mikhail Volkov
 
20.05.20
11:11
Написал так:
// Старт/Перезапуск Com-соединения для его завершения через полчаса: 30*60
//
Процедура СтартComСоединения() Экспорт
    Если ОбъектКА <> Неопределено Тогда
        ОтключитьОбработчикОжидания("ЗавершениеComСоединения");
    КонецЕсли;
    ПодключитьОбработчикОжидания("ЗавершениеComСоединения", 1800);
КонецПроцедуры    // СтартComСоединения()

// Завершение Com-соединения
//
Процедура ЗавершениеComСоединения() Экспорт
    ОбъектКА = Неопределено;
КонецПроцедуры    // ЗавершениеComСоединения()

Вызываю из ВыполнитьПодключениеКА(), все в одном общем модуле с галочками: Сервер и Клиент (обычное приложения), но без Глобальный. Получаю ошибку:
Ошибка при вызове метода контекста (ПодключитьОбработчикОжидания)
    ПодключитьОбработчикОжидания("ЗавершениеComСоединения", 1800);
по причине:
ПодключитьОбработчикОжидания Недопустимое значение параметра (параметр номер '1')

Из справки: Имя экспортируемой процедуры модуля управляемого приложения (модуля обычного приложения) или глобального общего модуля. Процедура должна располагаться на клиенте.
Перенес процедуру ЗавершениеComСоединения() в Глобальный модуль - заработало!? Но не хотелось бы переносить в "чужие" модули, и на своем Глобальный не хочется ставить. Как сделать?
19 VladZ
 
20.05.20
12:08
(15) В (13) указаны проблемы, связанные с COM. Откажешься - и этих проблем не будет.
Я не вижу причин, по которым ты используешь COM. Искать их по указанным ссылкам не буду - у меня на это нет времени.

Составь сам список механизмов, которые тебе нужны и разработай план работ по отказу от COM.
20 Mikhail Volkov
 
20.05.20
12:29
(19) Думаю над этим, тем более для разных версий платформ. От Com можно отказаться, но не от OLE. Например, есть решение проблемы (4)?
А по (18), обязательно в Глобальном модуле (вроде в справки "или")?
21 VladZ
 
20.05.20
12:38
(20) "Можно ли сразу открыть объект (не всю базу) по найденной ссылке в другой базе?"

Да, есть решение:
1. Найти причины, по которым необходимо это делать.
2. Отказаться от них: либо решить, либо забить на них.
3. Больше никогда не открывать объект из другой базы.

Всё.
22 Mikhail Volkov
 
20.05.20
13:41
(21) Понятно: не делать, отказаться, забить... на кого.
(18)+ Перенес процедуру ЗавершениеComСоединения() в глобальный модуль, а там: Переменная не определена (ОбъектКА) - объявлена Экспорт в модуле обычного приложения. Почему?
23 Mikhail Volkov
 
20.05.20
15:54
Вроде переменная объявленная в модуле обычного приложения как Экспорт везде рулит, а в глобальном модуле нет!?
Ладно, вернул ЗавершениеComСоединения() в свой модуль (там ОбъектКА точно работает), в глобальном переименовал в глЗавершениеComСоединения(), и прописал в ней ссылку на ЗавершениеComСоединения() в своем модуле.
Все работает, но нельзя ли обойтись без глобального модуля?
24 Mikhail Volkov
 
26.05.20
15:07
(21) Все же: Можно ли сразу открыть объект (например, из командной строки) по найденной ссылке в другой базе?
25 Mikhail Volkov
 
26.05.20
19:37
(24)+ Нашел пару обработок: Открытие документов и справочников по ссылке в другой базе http://catalog.mista.ru/public/1042208/ и Простой способ открыть документ по ссылке из другой базы http://catalog.mista.ru/public/191975/. Обе используют программу AutoIt, которую можно скачать с сайта http://www.autoitscript.com/site/autoit/downloads/.
26 Mikhail Volkov
 
27.05.20
10:59
(25)+ В первой статье говорится, что вроде можно открыть  объект по найденной ссылке в другой базе не используя Com, AutoIt, только стандартные механизмы 1С?
27 Mikhail Volkov
 
28.05.20
09:43
По последнему вопросу создал новую тему Открыть объект по найденной ссылке в другой базе
AdBlock убивает бесплатный контент. 1Сергей