Имя: Пароль:
1C
1С v8
При соединении V82.Application Сервер занят
,
0 МосЭстрада
 
25.03.13
13:17
Из 1с 7.7 создается подключение к базе 1с 8.2
Коннектор = СоздатьОбъект("V82.Application");
V8 = Коннектор.Connect("...");

через 2 минуты (приблизительно) появляется окно
Сервер занят (иногда открывается меню кн. Пуск)

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

Как можно вылечить?

Еще есть подозрение, что мешает другое подключение, к другой базе:
Подключение = СоздатьОбъект("ODBCDataBase");
Подключение.Соединение("...");,
но оно закрывается перед OLE подключением.
1 МосЭстрада
 
25.03.13
14:28
Установка соединения выполняется по следующему алгоритму:

1.    COM-соединение с требуемыми параметрами ищется в пуле соединений. Если найдено, то используется оно.
2.    Если COM-соединение с требуемыми параметрами не найдено, то анализируется не исчерпан ли лимит по числу одновременно существующих соединений. Если не исчерпан, то создается новое COM-соединение.
3.    Если лимит исчерпан, но при этом в пуле имеются неиспользуемые COM-соединение, то соединение, дольше всех находящееся в пуле, удаляется и создается новое COM-соединение.
4.    Если никаким способом найти подходящее или создать новое COM-соединение не удалось, то происходит ожидание освобождения COM-соединение другим потоком, после чего весь процесс повторяется, начиная с пункта 1.

Если объект COM-соединитель был создан в Singlethreaded Apartment (STA), то реально все действия с COM-соединителем и созданными им объектами COM-соединение будут выполняться в одном потоке. В этом случае, если метод Connect не сможет на первом проходе найти подходящее или создать новое COM-соединение, то выполнение этого метода зациклится, так как освободить уже, возможно, ненужное другое COM-соединение будет нельзя по той причине, что операция освобождения объекта COM-соединение должна быть выполнена в том же потоке, в котором уже выполняется метод Connect.

Следует помнить, что создание COM-объектов из приложения 1C:Предприятие 8.1 выполняется из STA. Это же справедливо для большинства GUI-приложений Windows.
2 МосЭстрада
 
25.03.13
14:29
Кажется мне, что происходит это самое зацикливание.
А когда время таймаута истекает, появляется это окно Сервер занят.

Кто-нибудь сталкивался?
3 МосЭстрада
 
25.03.13
14:42
Тихо мирно сам с собой я веду беседу...
4 МосЭстрада
 
25.03.13
16:28
А вот если переписывать, какой метод соединения баз лучше взять?
5 МосЭстрада
 
26.03.13
10:15
Попробую использовать V82.COMConnector.
Он должен быстрее работать.
Говорю я себе...
6 Maxus43
 
26.03.13
10:21
да, использовать в даннгом случае надо COMConnector, да и тему надо наверное в v7 лучше.
7 МосЭстрада
 
27.03.13
14:19
Сегодня окно Сервер занят решило не появляться.
На тестовой базе с COMConnector время подключения действительно сократилось.
Если буду в рабоче базе менять, отпишусь, сработало ли.
8 hhhh
 
27.03.13
14:22
похоже просто ODBCDataBase не успевает закрыться, а вы уже стартуете. Поставьте задержку в несколько секунд.
9 МосЭстрада
 
02.04.13
09:51
В рабочей базе окно Сервер занят больше не появляется (пока). Но теперь другая напасть. Через некоторое время после всех обработок появляется ошибка виндовс. Ругается на клюшки "for SQL". Щелкаем Отчет не отправлять и все закрывается. Занавес.
10 МосЭстрада
 
02.04.13
09:52
hhhh, спасибо за совет, подумаю над этим, попробую.
11 МосЭстрада
 
02.04.13
10:54
А как правильнее:
Коннектор = "";
или
Коннектор = 0;