Имя: Пароль:
1C
1С v8
Виснет COM-соединение при обмене
0 desonet
 
28.01.25
10:58
Здравствуйте!

Платформа: 1С:Предприятие 8.3 (8.3.25.1520)
Бухгатерия: Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.168.19)
Торговля: Управление торговлей, редакция 11 (11.5.20.80)
ОС: Windows Server 2022 Standard Версия 21Н2 (сборка ОС 20348.587)
SQL: MS SQL Server 2012

У меня настроен обмен между базами торговли и бухгалтерии через COM соединение.
Сам обмен запускается из базы бухгалтерии.
Запускаю обмен вручную и он зависает на окне сопоставления объектов, т.е. не доходит до выгрузки данных из торговли.
Я сделал эксперимент. Написал обработку, которая из базы источника по COM-соединению вызывает процедуру общего модуля.
Поставил точку останова в базе источнике, но после вызова процедуры точка останова не срабатывает. Само COM соединение активно.
На сервере 1С режим дебага включен.
Для эксперимента я снижал релиз 1С, т.к. новый релиз возможно с ошибками, но ситуация с зависанием не исчезла.

Первый раз такое вижу. Есть у кого-нибудь идеи как можно побороть эту проблему?
1 Lite777888
 
naïve
28.01.25
11:07
(0) Проверить упешность ком соединения в настр синхр, проверить ЖР ,журнал виндовс,.почистить сереверный кэш ,перезагрузить службы ,сервер ит д
2 Prog_man
 
гуру
28.01.25
11:21
(0) как вариант, настроить обмен через файлы, с COM регулярно какие то глюки случаются.
3 desonet
 
28.01.25
12:05
(1) Проверка COM-соединения проходит успешно.
В ЖР и журнале Windows никаких ошибок нет.
Сервер свежеустановленный. Кэши я тоже чистил

(2) Вариант хороший, но есть ещё самописный обмен с отраслевой базой и он работает только через COM соединение и этот печалит

Я думаю, что если написать в техподдержку 1С. Если смысл или в таких случаях они отфутболят типовыми фразами?
4 craxx
 
28.01.25
12:14
(0) Права в компоненте службы компонент проверить.
5 Pprog151713
 
28.01.25
12:30
Что такое сопоставление объектов? Запрос к данным источника?
6 eddy_n
 
28.01.25
12:35
(0) У всех общих модулей в обмене присутствует признак Внешнее соединение?
7 Ногаминебить
 
28.01.25
13:47
Работало и перестало? Тогда стоит начать с выявления причины.
Сменили платформу, сменили конфигурацию, поменяли обработку.
8 desonet
 
28.01.25
14:46
Для тестирования в базы, к которой подключаюсь через COM, в общем модуле написал процедуру. Тело процедуры пустое.

Вызываю эту процедуру через COM и получаю ошибку:

Ошибка при вызове метода контекста (Connect): Произошла исключительная ситуация (V83.COMConnector.1): Ошибка формата потока
9 ChMikle
 
28.01.25
14:50
(8) комконнектор проверьте (у вас на одной платформе базы) ?
10 KuznecovvIvan
 
28.01.25
15:05
(0) Если база клиент-серверная и размещена на сервере в определенном кластере, можно попробовать прописать на другой кластер и соединяться через com по нему. У нас так тоже было. Просто на одном кластере зависало соединение. Когда прописывали на другой работало нормально.
11 eddy_n
 
28.01.25
15:24
(9) Если были бы на разных, процесс бы не стартовал.
12 desonet
 
29.01.25
01:33
С подключением через COM соединение разобрался.
При обмене через COM проблема в другом.

Создал две пустые базы для тест обмена.

В одной базе создал простую обработку, которая соединяется через COM

Текст обработки

==================================================================================================================================
&НаСервере
Процедура КомандаВыполнитьОбменНаСервере()
    Сервер = "192.168.0.6";
    База = "prog_test_2";                    
    Пользователь = "";
    Пароль = "";
    
    V83 = Новый COMобъект("V83.ComConnector");
    СтрокаПодключения =  "srvr='" + СокрЛП(Сервер)
                          + "'; ref='" + СокрЛП(База)
                          + "'; usr='" + СокрЛП(Пользователь)
                          + "'; pwd='" + СокрЛП(Пароль) + "';";
    Попытка                      
        База1С = V83.Connect(СтрокаПодключения);            
        Сообщить("Подключение к базе прошло успешно");
    Исключение              
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;  
    
    СтруктураПараметров = Новый Структура;
    Ответ = База1С.ОбщегоНазначения.ПроверкаОбмена(СтруктураПараметров);
    Сообщить(Ответ);
КонецПроцедуры

&НаКлиенте
Процедура КомандаВыполнитьОбмен(Команда)
    КомандаВыполнитьОбменНаСервере();
КонецПроцедуры
==================================================================================================================================

Во второй базе создаю общий модуль "Общего назначения". В свойствах модуля ставлю флажки "Сервер" и "Внешнее соединение".

Текст общего модуля
==================================================================================================================================
Функция ПроверкаОбмена(СтруктураПараметров) Экспорт
    Возврат "Успех";
КонецФункции
==================================================================================================================================


В обработке первой базы, которая подключается ко второй и вызывает функцию "Проверка обмена" из общего модуля, если передать параметр "СтруктураПараметров" с типом "Структура",
то соединение наглухо зависает.
    СтруктураПараметров = Новый Структура;
    Ответ = База1С.ОбщегоНазначения.ПроверкаОбмена(СтруктураПараметров);

А если передать параметр "СтруктураПараметров" в виде строки, то 1С не зависает.
13 desonet
 
29.01.25
03:11
Продолжение.

Я перезапустил службу "Агент 1С Предприятия" и повторил выполнение обмена на тестовых базах.
И что удивительно, что при передаче в параметра типа Структуры обмен состоялся успешно.
   СтруктураПараметров = Новый Структура;
   Ответ = База1С.ОбщегоНазначения.ПроверкаОбмена(СтруктураПараметров);


Я обрадовался и запустил обмен между базой торговли и бухгалтерии и он завис.
В этот момент я заново запускаю обмен между тестовыми базами и он тоже виснет.

Я перезапускаю Агент сервера 1С Предприятия и опять обмен между тестовыми базами работает до тех пор пока я не запущу обмен между рабочими базами
14 craxx
 
29.01.25
04:07
(12) Просто структуру ты по COM не передашь
нужно так
    
СтруктураПараметров = База1С.NewObject("Структура");
    Ответ = База1С.ОбщегоНазначения.ПроверкаОбмена(СтруктураПараметров);
15 desonet
 
29.01.25
05:12
(14) Спасибо за подсказку! Поправил в рабочей базе и заработало.
До переустановки операционной системы на сервере 1С мой вариант описания структуры покатывал, а теперь нет. Хм! Странная 1С.
16 desonet
 
29.01.25
05:14
Как-то мне стыдно, что такая простая ошибка была.
Надо меньше сидеть в 1С и больше гулять, проветривать мозги. )))
17 craxx
 
29.01.25
06:13
(15) Да ну неправда, не мог он прокатывать, никогда нельзя было через ком протащить что-то кроме простых типов Число, Строка, Дата, Булево.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан