Имя: Пароль:
1C
1С v8
Проблема с Com-соединением
0 Jokerman
 
27.11.13
14:50
Здравствуйте уважаемые 1сники. Есть некая проблема, ума не приложу что нужно сделать, так как с такой системой в первый раз сталкиваюсь!
При старте система анализирует через com соединение имеется ли уже соединение у "входящего" пользователя и предлагает переподключиться. Все отрабатывает ок у большинства, но у некоторых пользователей, которые настроены не напрямую а через некий посредний сервак(таково требование безопасности, я не в курсе) com соединение не отрабатывает. Может нужно какой-то порт открыть, понимаю, что это дело админа: он разводит рукам, а решить то надо как-то!
1 Jokerman
 
27.11.13
15:04
Да кстати, администрирование серверов тоже не работает.
2 Jokerman
 
27.11.13
17:34
Нет мыслей?
3 Wobland
 
27.11.13
17:42
чо?
4 Wobland
 
27.11.13
17:42
я слишком мало знаю о ком-соединении
5 Jokerman
 
27.11.13
18:05
(4) ничего сложного, вот код:
                connector = Новый COMОбъект("V8.ComConnector");
                server = connector.ConnectServer(ИмяСервера);
6 Hmster
 
27.11.13
18:06
(5) а что пишет?
7 Wobland
 
27.11.13
18:09
(6) неверная строка с указанием класса
8 Конфигуратор1с
 
27.11.13
18:28
(5) а так  connector = Новый COMОбъект("V82.ComConnector");
9 Конфигуратор1с
 
27.11.13
18:28
там вроде надо не 8 а 82 указать?
10 Конфигуратор1с
 
27.11.13
18:29
ну если 82, а не 81)
11 Wobland
 
27.11.13
18:48
да и строка соединения не внушает
12 Jokerman
 
27.11.13
18:48
(10) я же говорю, что проблема не в этом как тока сменился апишник, тогда все поехало :)
13 Jokerman
 
27.11.13
18:48
В исключение попадает
14 Wobland
 
27.11.13
18:48
да что строка, сам метод. хотя, кто знает, что у автора за В8 такой..
15 Wobland
 
27.11.13
18:49
(12) запокажи весь код
16 Jokerman
 
27.11.13
18:58
ПодстрокиСтрокиСоединения  = РазложитьСтрокуВМассивПодстрок(СтрокаСоединенияИнформационнойБазы(),";");
    
    Если ПодстрокиСтрокиСоединения.Количество()> 1 и Лев(ПодстрокиСтрокиСоединения[0], 5) = "Srvr=" и Лев(ПодстрокиСтрокиСоединения[1], 4) = "Ref=" Тогда
        
        ИмяСервера = СтрЗаменить(Сред(ПодстрокиСтрокиСоединения[0],7, СтрДлина(ПодстрокиСтрокиСоединения[0]) - 7),":",Символы.ПС);
        ИмяБазы      = Сред(ПодстрокиСтрокиСоединения[1],6, СтрДлина(ПодстрокиСтрокиСоединения[1]) - 6);
        Порт = СтрПолучитьСтроку(ИмяСервера,2);
        Порт = Лев(Порт,СтрДлина(Порт)-1)+"0";
        ИмяСервера = СтрПолучитьСтроку(ИмяСервера,1);
        
        Попытка
            Коннектор = Новый COMОбъект("V82.COMConnector");
            
            Агент = Коннектор.ConnectAgent(ИмяСервера+?(Порт="0","",":"+Порт));    
            
            Кластеры = Агент.GetClusters();
            Для каждого Кластер из Кластеры Цикл
                АдминистраторКластера = "";
                ПарольКластера = "";
                Агент.Authenticate(Кластер, АдминистраторКластера, ПарольКластера);
                Процессы = Агент.GetWorkingProcesses(Кластер);
                Для каждого Процесс из Процессы Цикл
                    Порт = Процесс.MainPort;
                    // теперь есть адрес и порт для подключения к рабочему процессу
                    РабПроц = Коннектор.ConnectWorkingProcess(ИмяСервера + ":" + СтрЗаменить(Порт, Символы.НПП, ""));
                    РабПроц.AddAuthentication("", "");
                    
                    ИнформационнаяБаза = "";
                    
                    Базы = Агент.GetInfoBases(Кластер);
                    Для каждого База из Базы Цикл
                        Если НРег(База.Name) = НРег(ИмяБазы) Тогда
                            ИнформационнаяБаза = База;
                            Прервать;
                        КонецЕсли;
                    КонецЦикла;
                    Если ИнформационнаяБаза = "" Тогда
                        продолжить;// база не найдена
                    КонецЕсли;
                    
                    ОписаниеИБ = РабПроц.CreateInfoBaseInfo();
                    ОписаниеИБ.Name = ИмяБазы;
                    
                    СоединенияБазы = РабПроц.GetInfoBaseConnections(ОписаниеИБ);                    
                    
                    // Разорвать соединения клиентских приложений указанного номера соединения.
                    Для Каждого Соединение Из СоединенияБазы Цикл
                        Если Соединение.ConnID=НомерСоединения Тогда
                            РабПроц.Disconnect(Соединение);
                            Возврат Истина;
                        КонецЕсли;
                    КонецЦикла;
                    
                КонецЦикла;
            КонецЦикла;
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
        
    Иначе
        
        Сообщить("Завершение работы пользователей в файловом режиме не предусмотрено");
        
    КонецЕсли;
    
    Возврат Ложь;
17 Wobland
 
27.11.13
19:03
блин, сразу бы так
18 Wobland
 
27.11.13
19:04
теперь я без сарказма повторю (4) и уйду спать. утром почитаю ;)
19 Jokerman
 
27.11.13
19:12
(18) Спасибо за проявленный интерес!
20 Wobland
 
28.11.13
05:55
я агента ни разу в глаза не видел, но что говорит описание ошибки?
21 Jokerman
 
28.11.13
14:50
(20) что-то типа сервер не найден!
22 Jokerman
 
28.11.13
15:12
Лучше узнать кто-нибудь сталкивался с такой системой когда через промежуточный сервер к 1с подсоединяются?
23 RomanFire
 
28.11.13
15:16
(22) СОМ соединение идет к базе из удаленного сервера?Соединение обрывается просто скорее всего
24 Jokerman
 
28.11.13
15:20
(23) Почему, кто напрямую работает, то норм. Мне кажется дело в доступе, поэтому вопрос: если 1с ка пашет а администрование серверов нет, то что надо открыть, какой порт или доступ, потому что 100пудово позакрывали сначала все, потом открыли 1ссовский диапазон, но видимо не все!
25 RomanFire
 
28.11.13
15:21
(24) Я экспериментировал с таким, валилось СОМ.
26 Jokerman
 
28.11.13
15:38
(25) не удалось найти решение?
27 Jokerman
 
28.11.13
15:48
Сказать или открывайте все или функция будет недоступна
Закон Брукера: Даже маленькая практика стоит большой теории.