Имя: Пароль:
1C
1С v8
V82.Application проблема при повтором соединении
0 golden-pack
 
16.10.11
15:17
Код:

1.КОМ = Новый COMОбъект("V82.Application");
2.Соединение = КОМ.Connect(СтрокаСоединения);
3.//произвольный код
4.Соединение = КОМ.Connect(СтрокаСоединения);

Вопрос: В строке 2 - например происходит сбой авторизации, почему при выполнении строки 4 - происходит неизвестная ошибка ?

Вот так работает, но вопрос в силе:

1.КОМ = Новый COMОбъект("V82.Application");
2.Соединение = КОМ.Connect(СтрокаСоединения);
3.//произвольный код
4.КОМ = Новый COMОбъект("V82.Application");
5.Соединение = КОМ.Connect(СтрокаСоединения);
1 golden-pack
 
16.10.11
15:18
Например КомКоннектор так работает:

1.КОМ = Новый COMОбъект("V82.COMConnector");
2.Соединение = КОМ.Connect(СтрокаСоединения);
3.//произвольный код

4.Соединение = КОМ.Connect(СтрокаСоединения);
2 golden-pack
 
17.10.11
02:36
ап
3 golden-pack
 
17.10.11
05:34
up
4 vicof
 
17.10.11
06:07
возможно, в первом случае уже подконнекчено к одному объекту, и к нему же пытается коннектиться.
5 golden-pack
 
17.10.11
06:09
(4) хорошо - еще вариант зависло соединение - тогда вопрос:

Как отконнектить тогда, без объявления Новый ComОбъект ? Есть такая процедура ?
6 vicof
 
17.10.11
06:11
Возможно, Quit()
7 golden-pack
 
17.10.11
06:13
(6) спс. буду пробывать
8 marty0701
 
17.10.11
06:31
В случае Automation-сервера запускается полноценное приложение 1С:Предприятие 8, а в случае внешнего соединения запускается относительно небольшой внутрипроцессный COM-сервер. В 1ом случае у тебя ошибка доступа к БД и приплыли.
9 golden-pack
 
17.10.11
06:37
(8) приплыли к чему ?
10 marty0701
 
17.10.11
06:42
(9)Вранье, но все равно приплыли.
11 golden-pack
 
17.10.11
06:45
(10) не пиши тут ни о чем пожалуйста
12 marty0701
 
17.10.11
06:46
(11)Почему?
13 golden-pack
 
17.10.11
14:19
(6) Quit() Exit() Close()
Не работают!


UP!
14 Nutsiiam
 
17.10.11
14:50
= неопределено
15 golden-pack
 
17.10.11
16:47
сразу пробовал - не работает
16 golden-pack
 
17.10.11
17:22
ап
17 golden-pack
 
18.10.11
01:47
up
18 golden-pack
 
18.10.11
06:01
up
19 golden-pack
 
18.10.11
08:19
up
20 Diversus
 
18.10.11
08:31
Необходимо использовать
КОМ.ЗавершитьРаботуСистемы(Ложь);
21 golden-pack
 
18.10.11
10:50
(20) спасибо - буду пробывать
22 golden-pack
 
18.10.11
13:26
(20) Метод ЗавершитьРаботуСистемы не обнаружен :(
23 golden-pack
 
18.10.11
16:04
ап
24 golden-pack
 
19.10.11
03:54
апппппп
25 golden-pack
 
19.10.11
09:09
ап
26 Diversus
 
19.10.11
09:15
>> Метод ЗавершитьРаботуСистемы не обнаружен :(

Его надо использовать для Application. Проверено, у меня этот метод работает...
27 golden-pack
 
19.10.11
09:19
(26) после сбоя авторизации - в обработке исключения = не обнаружен. Проверено.
28 Diversus
 
19.10.11
09:28
(27) А почему не использовать новое COM-соединение для следующего подключения, например, КОМ2?
И если хотите решить проблему, лучше опиши задачу полнее, а то не понятно зачем это все делается...
29 golden-pack
 
19.10.11
10:02
(28) с ком2 мысль - согласен - попробую.
Задачу смысла описывать нет, т.к. проблема описана в полном объеме.
30 MaxS
 
19.10.11
10:07
В типовых бывают настройки запрет нескольких соединений.
Может быть при втором входе где-то появляется модальное окно, которое пытается сообщить, что нельзя войти.
31 golden-pack
 
19.10.11
10:09
конфа нетиповая. Запретов нет.
32 golden-pack
 
19.10.11
12:59
ап
33 MaxS
 
19.10.11
15:02
см.(28)
34 golden-pack
 
20.10.11
02:13
(33) это как вариант. но вопрос из (0) в силе.
35 golden-pack
 
20.10.11
14:56
ап
36 izekia
 
20.10.11
15:05
а MaxConnections у менедждера соединений какой стоит?
37 Serginio1
 
20.10.11
15:09
(36) у Automation сервер такого понятия нет. Поэтому наверное и не срабатывает второе соединеие
38 izekia
 
20.10.11
15:13
(37) а в СП?
39 izekia
 
20.10.11
16:37
(37) в смысле в СП не предлагать посмотреть?)
40 Serginio1
 
20.10.11
16:47
(39) В спаравке даже такой код присутствует

connector = Новый COMObject("V82.Application");
connector.Connect("File=c:\InfoBases\Trade;Usr=Director;")
ТДокумент = connector.NewObject("ТекстовыйДокумент");
ТДокумент.ВставитьСтроку(1, "Новая строка");
Сообщить(ТДокумент. КоличествоСтрок());
То есть Один экземпляр соединения
41 izekia
 
20.10.11
16:49
(40) как это соотносится с (37)

про имакс коннекшнс, кстати, раз настолько лень)
Менеджер COM-соединений (COM connector)
MaxConnections (MaxConnections)
Использование:

Только чтение.
Описание:

Тип: Число. Определяет максимальное число одновременно существующих объектов Внешнее соединение, созданных через данный менеджер COM-соединений. Число одновременно существующих соединений включает также число соединений, находящихся в пуле внешних соединений. Значением по умолчанию 0 (число одновременно существующих объектов Внешнее соединение не ограничено).
Устанавливать свойству не нулевое значение можно только в том случае, если сам объект был создан в Multithreaded Apartment (MTA), что обеспечивает реальное функционирование самого менеджера и созданных им объектов Внешнее соединение в многопотоковой (multithreaded) среде. Это условие соблюдается в частности, если COM-соединитель был создан в приложении ASP.NET.
Если же объект был создан в Singlethreaded Apartment (STA), то реально все действия с ним и созданными им объектами Внешнее соединение будут выполняться в одном потоке. В этом случае, если метод Connect не сможет на первом проходе найти подходящее или создать новое Внешнее соединение, то выполнение этого метода зациклится, так как освободить уже, возможно, ненужное другое Внешнее соединение будет нельзя по той причине, что операция освобождения объекта Внешнее соединение должна быть выполнена в том же потоке, в котором уже выполняется метод Connect.
Следует помнить, что создание COM-объектов из приложения 1C:Предприятие 8 выполняется из STA. Это же справедливо для большинства GUI-приложений Windows.

Доступность:

Интеграция.
42 Serginio1
 
20.10.11
17:02
А ты не путаешь COMObject("V82.Application");
с          COMОбъект("V82.COMConnector");
?
43 izekia
 
20.10.11
17:30
(42) ой пля простите, я - осел
44 Serginio1
 
20.10.11
17:44
Ну зачем, же так жестко? Если даже ошибся, ничего страшного. "и опыт сын ошибок трудных и гений парадоксов друг"
45 izekia
 
20.10.11
18:36
(44) да первый пост внимательно не прочитал, сорри)
46 golden-pack
 
21.10.11
01:53
Итог за 5 дней жизни темы: "V82.Application" - 1 соединение максимум. жаль.
47 H A D G E H O G s
 
21.10.11
01:57
Щас посмотрим
48 H A D G E H O G s
 
21.10.11
02:33
Да, действительно, при ошибке в Коннекте, при повторном коннекте - неопознанная ошибка.
1) ЗавершитьРаботуСистемы() как и свойство visible доступны только после успешного коннекта!
2) Отключать надо так КОМ =неопределено;
3) Вот это у меня вполне работает, см. отладку по шагам и наличие процессов в диспетчере

&НаКлиенте
Перем Соединение;
&НаКлиенте
Процедура коннект(Команда)
   КОМ = Новый COMОбъект("V82.Application");
   Попытка
       Соединение = КОМ.Connect("File=""G:\database\8.2\Пустая\Пустая1"";usr=badname");
       КОМ.visible=Истина;
       возврат;
   Исключение
       КОМ=Неопределено;
   КонецПопытки;
   
   КОМ = Новый COMОбъект("V82.Application");
   Попытка
       Соединение = КОМ.Connect("File=""G:\database\8.2\Пустая\Пустая1"";usr=admin");
       КОМ.visible=Истина;
       Ком.ЗавершитьРаботуСистемы(Ложь);
       возврат;
   Исключение
       КОМ=Неопределено;
   КонецПопытки;
КонецПроцедуры
49 golden-pack
 
21.10.11
02:52
Ок.
50 H A D G E H O G s
 
21.10.11
02:56
(49) эээ.. ммм.
http://demotivation.me/images/20081110/4xv6g0e456kc.jpg

Угадал?
51 golden-pack
 
21.10.11
04:03
(50) нет. вот такЪ http://demotivation.me/lgeotvm42dscpic.html
52 TAA
 
21.10.11
04:49
Ты похоже не закрыв базу пытаешься снова подключиться в случае COM это прокатит а с Application нет
53 golden-pack
 
21.10.11
05:08
(52) >>>Ты похоже

Ты код в (0) видел ???????