Имя: Пароль:
1C
 
v8: Имя SQL базы
0 wPa
 
20.11.08
15:06
Как получить сиквельное имя текущей базы?
1 Sadovnikov
 
20.11.08
15:08
Например, так:
   |Select NameBase From
   |(
   |Select dbid,db_name(dbid) As NameBase From master..sysaltfiles Where [FileName]=
   |(
   |Select Top 1 [FileName] From sysfiles
   |)
   |)As Z";
2 wPa
 
20.11.08
15:13
(1) не корректно выразился. Как получить сиквельное имя текущей базы (где выполняется код) средствами 1С. Толкьо через кластер или еще есть способ?
3 Sadovnikov
 
20.11.08
15:15
(2) Так выполни запрос из (1) в 1С и получишь скульное имя базы.
4 Барбариска
 
20.11.08
15:24
//***************************************************
Функция XOR(Знач ParA, Знач ParB)
   Res = 0;
   Koef = 1;
   Для к=1 По 8 Цикл
       BitA = ParA % 2;
       BitB = ParB % 2;
       ParA = Int(ParA / 2);
       ParB = Int(ParB / 2);
       BitC = (BitA + BitB) % 2;
       Res = Res + BitC * Koef;
       Koef = Koef * 2;
   КонецЦикла;
   Возврат Res;
КонецФункции

Функция СтрокаСоединения(Файл)
   Перем SQLKeyCode[36], ConnectCode[200];
   FSO = CreateObject("Scripting.FileSystemObject");
   F = FSO.OpenTextFile(Файл, 1);
   ConnectLen = 0;
   Пока F.AtEndOfStream = 0 Цикл
       ConnectLen = ConnectLen + 1;
       ConnectCode[ConnectLen] = КодСимв(F.Read(1));
   КонецЦикла;
   F.Close();
   FSO = 0;
   SQLKey = "19465912879oiuxc ensdfaiuo3i73798kjl";
   Для к=1 По 36 Цикл
       SQLKeyCode[к] = КодСимв(Сред(SQLKey, к, 1));
   КонецЦикла;
   Connect = "";
   Для к=1 По ConnectLen Цикл
       Connect = Connect + Симв(XOR(ConnectCode[к], SQLKeyCode[(к - 1) % 36 + 1]));
   КонецЦикла;
   vl=СоздатьОбъект("СписокЗначений");
   Connect=СтрЗаменить(Connect,"{","");
   Connect=СтрЗаменить(Connect,"}","");
   vl.ИзСтрокиСРазделителями(Connect);
   Возврат vl;
КонецФункции

---------------------
4-й параметр в возвращаемом списке - имя базы
5 wPa
 
20.11.08
15:24
(3) точно. но .. надо знать сервер ))
6 Барбариска
 
20.11.08
15:26
+(4)
Файл в качестве параметра - это

КаталогИБ()+"1Cv7.DBA";
7 pvase
 
20.11.08
15:26
select db_name()
select @@SERVERNAME
http://metaprog.co.ua/secrprog/FAQ_SQL_prog.html#_2_1_1
8 КонецЦикла
 
20.11.08
15:28
select @@SERVERNAME
9 Sadovnikov
 
20.11.08
15:35
(5) Так зачем тогда в двух постах писал слова "база"? :)
10 wPa
 
20.11.08
15:39
(9) дык нужна то база )))
11 Sadovnikov
 
20.11.08
15:40
(10) Ты это... Расскажи - чего сделать-то в итоге хочешь? И зачем?
12 Immortal
 
20.11.08
15:42
лучше через кластер
13 wPa
 
20.11.08
15:45
(12) да уже пробую
14 wPa
 
20.11.08
15:46
(11) Скажем так. Мне надо из обработки сделать сиквельный запрос к текущей базе
15 Sadovnikov
 
20.11.08
15:47
(14) Стоп. Это восьмерка или все-таки семерка?
16 Serg_1960
 
20.11.08
15:54
Для восьмёрки :)

СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
Если Найти(Врег(СтрокаСоединения), "FILE=") Тогда
  //Файловая версия
  ИмяБазы = СтрЗаменить(Сред(СтрокаСоединения,6),";","");
Иначе
  СтрокаСоединения = СтрЗаменить(СтрокаСоединения,";",Символы.ПС);
  ИмяСервера = Сред(СтрПолучитьСтроку(СтрокаСоединения,1),6);
  ИмяБазы = Сред(СтрПолучитьСтроку(СтрокаСоединения,2),5);
КонецЕсли;
17 wPa
 
20.11.08
16:03
(16) Это имя базы на сервере приложений. Нужна dbName
18 wPa
 
20.11.08
16:20
(15) Восьмерка
(12) Мдя через кластер как и предполагалось - семь кругов ада ))
19 wPa
 
20.11.08
16:36
(18) Аааа!! Нет не подходит кластер - нужно пройти две авторизации - на агенте и на рабочем процессе!
Есть мысли? Надо получить dbName и dbServerName текущей рабочей базы.
20 Demiurg
 
20.11.08
16:38
если авторизацию кластера и агента выбирать виндовую, то логин и пароль опускаются при авторизации
21 Demiurg
 
20.11.08
16:39
напиши, что делаешь, может твоя задача решается проще
22 Serg_1960
 
20.11.08
16:42
Ыыы :( Автор себе порочный круг создал:( Чтобы узнать у SQL-сервера имя базы - надо с ним соединение установить и запросить, - а соединение не установишь пока имя базы не знаешь :(
23 Immortal
 
20.11.08
16:45
то есть имя сервера тоже неизвестно?
24 Immortal
 
20.11.08
16:46
п.с. слава богу эту голубизну из ников убрали.
25 Demiurg
 
20.11.08
16:48
(22) гонишь, подключиться можно и к master базе
26 Demiurg
 
20.11.08
16:49
пропарси файл кластера,
доступ к нему через модуль сервера сделай
27 Serg_1960
 
20.11.08
16:49
(21) автору надо (14) сиквельный запрос к текущей базе... но сначало узнать имя сервера и имя базы в SQL. (16) ему не подходит. Ему строку соединения с базой надо. Типа:

Connection = Новый COMОбъект("ADODB.Connection");
String = "driver={SQL Server};server=SqlSrvr;uid=sa;pwd=PasWord;Database=Base";
// или
String = "Provider=SQLOLEDB.1;Password=PasWord;Persist Security Info=True;User ID=sa;Initial Catalog=Base;Data Source=SQLSRVR";

Connection.Open(String);
28 wPa
 
20.11.08
16:50
(21) Уже писал. Мне надо сделать сиквельный запрос к текущей базе.
А как сделать нт авторизацю? метод AddAuthentication требует логина пароля
(22) Это не я - это млин методов нет в платформе как получить сервер базу!
29 wPa
 
20.11.08
16:51
(26) не универсальный способ - если я обработку ношу с собой? )
30 Serg_1960
 
20.11.08
16:54
(25) Ага, гоню :( - ибо сам не знаю... но очень хочу узнать :)
(28) Имя сервера можно получить из СтрокаСоединенияИнформационнойБазы(). Так?
31 wPa
 
20.11.08
16:57
(30) Из строки соединения ты получишь имя сервера клстера с портом  и базу. У них есть свойства - имя базы на сиквеле и сервер сиквела - они то и нужны. Не у всех имена баз в кластере и на сиквеле совпадают! ;)
Но чтобы достучаться до этих свойств надо пройти две авторизации!
32 Serg_1960
 
20.11.08
17:02
(31) "имена базы кластера и SQL-базы могут быть разные" - ага я до этого уже допетрил :( Не совсем тормоз :)
Но в платформе не было, нет и не будет возможности получить пароль. Из соображений безопасности... Это тоже мне ясно :) И что остаётся? Голые знания: ты пароль или знаешь или нет :(
33 НЕА123
 
20.11.08
17:03
может там есть оно?
C:\Program Files\1cv81\server\reg_XXXX\*.lst
34 Serg_1960
 
20.11.08
17:12
(33) А ты до "может там" сначала доберись :)

Одним словом "порочный круг" (имхо)

"Монмаренси! Спаси нас!"(с) Трое в лодке
Одна надежда на  Demiurg Вячеслав! Гилев! Спаси нас :) http://gilev.ru/
35 wPa
 
20.11.08
17:15
(32) Это понятно - я про другое. На агенте сервера кластеров можно авторизоваться без пароля (если пустой пользователь, то текущая авторизация), но вот на процессе авторизоваться без пароля не получается! А без этого свойства найденной базы не доступны! Вот где хрень. Зачем нужна еще одна авторизация на процессе недогоняю.
36 Serg_1960
 
20.11.08
17:21
Сорри, я пас. Так глубоко не копал
37 wPa
 
20.11.08
17:21
нарою отпишу код
38 wPa
 
20.11.08
17:30
вот это не могу пройти

"Получение полной информации о соединениях и принудительный разрыв соединений возможны только при помощи интерфейса Соединение с рабочим процессом после аутентификации пользователей информационной базы. "
39 wPa
 
20.11.08
19:03
(38) прошел авторизацию созданием нового пользователя с ролью ПравоАдминистрирования. Работает - сервер и базу получаю. Еслии интересно - выложу
40 Demiurg
 
20.11.08
19:09
Вырезаю из старого кода, там есть в некоторых местах лажа, но суть подхода думаю понятна
(на пароль смотреть не надо, он не будет извелкаться, только на общую схему)


   Попытка
       Соединения = ПолучитьСоединенияИнформационнойБазы();
       Для каждого СоединениеИнформационнойБазы Из Соединения Цикл
           Если СоединениеИнформационнойБазы.Пользователь.Имя = ИмяПользователя() И  СоединениеИнформационнойБазы.ИмяПриложения="1CV8" Тогда
               Если Лев(СтрокаСоединенияИнформационнойБазы(),5)="File=" Тогда
                   ФайловыйВариант = Истина;
                   Сервер="";
                   ИмяБазы = "";
               Иначе
                   ФайловыйВариант = Ложь;    
                   ПозицияРазделителя = Найти(СтрокаСоединенияИнформационнойБазы(),";");
                   Сервер= Сред(СтрокаСоединенияИнформационнойБазы(),7, ПозицияРазделителя-8);
                   ИмяБазы = Сред(СтрокаСоединенияИнформационнойБазы(),ПозицияРазделителя+5,СтрДлина(СтрокаСоединенияИнформационнойБазы())-ПозицияРазделителя-5);
               КонецЕсли;    
               
           КонецЕсли;
           
           Текст.ДобавитьСтроку("Пользователь ["+СоединениеИнформационнойБазы.Пользователь+"]"+
           "Приложение ["+ПредставлениеПриложения(СоединениеИнформационнойБазы.ИмяПриложения)+"]"+
           "Начало ["+ СоединениеИнформационнойБазы.НачалоСеанса+"]"+
           "Компьютер ["+ СоединениеИнформационнойБазы.ИмяКомпьютера+"]"+
           "Соединение ["+ СоединениеИнформационнойБазы.НомерСоединения+"]");
       КонецЦикла;
   Исключение Сообщить(ОписаниеОшибки());    КонецПопытки;

Попытка
       
       СписокПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей();
       Для Каждого ПользовательСписка Из СписокПользователей Цикл
           Текст.ДобавитьСтроку(""+ПользовательСписка.Имя+" ("+ПользовательСписка.ПолноеИмя+")");
           
       КонецЦикла;        
   Исключение
   КонецПопытки;
   
   Если НЕ ФайловыйВариант Тогда
       
       Текст.ДобавитьСтроку("");
       Текст.ДобавитьСтроку("Параметры клиент-серверной архитектуры:");
       Текст.ДобавитьСтроку("Сервер 1С:Предприятие["+Сервер+"]");
       Текст.ДобавитьСтроку("Имя базы на сервере  ["+СтрЗаменить(ИмяБазы,"""","")+"]");
       
       ЛогинКластера = "";
       ПарольКластера = "";
       ЛогинАгента="";
       ПарольАгента = "";
       
       // Попытка определеть локальное размещение кластера
       Если СокрЛП(ВРег(Сервер)) = СокрЛП(ВРег(ИмяКомпьютера())) Тогда
           Попытка
               РабочийФайл = Лев(КаталогПрограммы(),СтрДлина(КаталогПрограммы())-4)+"\server\reg_1541\1CV8Reg.lst";
               ИмяФайла = Лев(РабочийФайл,СтрДлина(РабочийФайл)-3)+"txt";
               КопироватьФайл(РабочийФайл,ИмяФайла);
               Текст1 = Новый ЧтениеТекста(ИмяФайла);  
               Стр="";
               Стр = Текст1.ПрочитатьСтроку();
               
               Пока Стр <> Неопределено Цикл // строки читаются до символа перевода строки
                   Если Найти(Стр,ИмяБазы) <> 0 Тогда
                       НачалоПоиска = Найти(Стр,"DBMS")+5;
                       Стр = Прав(Стр,СтрДлина(Стр)-НачалоПоиска+1);
                       ПозицияРазделителя = Найти(Стр,";");
                       ТипСУБД = Лев(Стр,ПозицияРазделителя-1);
                       Текст.ДобавитьСтроку("Тип СУБД             ["+ТипСУБД+"]");
                       Стр = Прав(Стр,СтрДлина(Стр)-ПозицияРазделителя-9);
                       ПозицияРазделителя = Найти(Стр,";");
                       СерверСУБД = Лев(Стр,ПозицияРазделителя-3);
                       Текст.ДобавитьСтроку("Сервер СУБД          ["+СерверСУБД+"]");
                       Стр = Прав(Стр,СтрДлина(Стр)-ПозицияРазделителя-5);                    
                       ПозицияРазделителя = Найти(Стр,";");
                       БазаСУБД = Лев(Стр,ПозицияРазделителя-3);
                       Текст.ДобавитьСтроку("База СУБД            ["+БазаСУБД+"]");
                       Стр = Прав(Стр,СтрДлина(Стр)-ПозицияРазделителя-8);                    
                       ПозицияРазделителя = Найти(Стр,";");
                       ЛогинБазыСУБД = Лев(Стр,ПозицияРазделителя-3);
                       Текст.ДобавитьСтроку("Логин базы           ["+ЛогинБазыСУБД+"]");
                       Стр = Прав(Стр,СтрДлина(Стр)-ПозицияРазделителя-8);
                       ПозицияРазделителя = Найти(Стр,";");    
                       ПарольБазыСУБД = Лев(Стр,ПозицияРазделителя-3);
                       
                       //Текст.ДобавитьСтроку("ПарольБазыСУБД           ["+ПарольБазыСУБД+"]");
                       
                       
                       // Подключение к СУБД
                       
                       СерверSQL = СерверСУБД;    
                       ЛогинПользователя = ЛогинБазыСУБД;
                       ПарольПользователя = ПарольБазыСУБД;
                       База = БазаСУБД;
                       
                       СтрокаСоединения = "Provider=SQLOLEDB;Password="+ПарольПользователя+";Persist Security Info=True;User ID=" + ЛогинПользователя+";Initial Catalog="+База+";Data Source="+СерверSQL;
                       Попытка
                           SQLServer = Новый COMОбъект("ADODB.Connection");
                           SQLServer.CursorLocation=3;  
                           SQLServer.ConnectionTimeout = 30;
                           SQLServer.CommandTimeout = 1200;
                           SQLServer.ConnectionString = СтрокаСоединения;
                           
                           RecSet= Новый COMОбъект("ADODB.Recordset");
                           АДФайла=Прав(Строка(Новый УникальныйИдентификатор),8);
                           АДТрассы="1";
                           
                           SQLServer.Open();
                           Текст.ДобавитьСтроку("");
                           Текст.ДобавитьСтроку("----------------------------------------------");
                           Текст.ДобавитьСтроку("Анализ сервера СУБД:");
                           Текст.ДобавитьСтроку("");                        
                           
                       Исключение
                           Текст.ДобавитьСтроку(ОписаниеОшибки());
                       КонецПопытки;  
                       
                       Попытка                          
                           Query="EXEC xp_msver";
                           RecSet.Open(Query,SQLServer,3,1,1);
                           Если RecSet.RecordCount>0 Тогда
                               RecSet.MoveFirst();
                               Пока НЕ RecSet.EOF() Цикл
                                   ИмяПараметра=СокрЛП(RecSet.Fields(1).Value);
                                   Если ИмяПараметра="ProductVersion" Тогда                                    
                                       Текст.ДобавитьСтроку("Версия СУБД    ["+RecSet.Fields(3).Value+"]");
                                   ИначеЕсли ИмяПараметра="Platform" Тогда                                    
                                       Текст.ДобавитьСтроку("Платформа СУБД ["+RecSet.Fields(3).Value+"]");
                                   ИначеЕсли ИмяПараметра="WindowsVersion" Тогда                                    
                                       Текст.ДобавитьСтроку("Версия Windows ["+RecSet.Fields(3).Value+"]");
                                   ИначеЕсли ИмяПараметра="PhysicalMemory" Тогда                                    
                                       Текст.ДобавитьСтроку("ОЗУ сервера    ["+RecSet.Fields(3).Value+"]");    
                                   КонецЕсли;
                                   RecSet.MoveNext();
                               КонецЦикла;    
                           КонецЕсли;    
                           RecSet.Close();
                       Исключение
                           Текст.ДобавитьСтроку(ОписаниеОшибки());
                       КонецПопытки;    
                       
                       Текст.ДобавитьСтроку("");
                       
                       Попытка                          
                           Query="EXEC sp_helpdb "+СтрЗаменить(ИмяБазы,"""","");
                           RecSet.Open(Query,SQLServer,3,1,1);
                           Если RecSet.RecordCount>0 Тогда
                               RecSet.MoveFirst();
                               Пока НЕ RecSet.EOF() Цикл
                                   ИмяПараметра=СокрЛП(RecSet.Fields(1).Value);                                                    
                                   Текст.ДобавитьСтроку("Для базы "+RecSet.Fields(0).Value+
                                   " общий размер ["+ИмяПараметра+"], DBID ["+RecSet.Fields(3).Value+"], уровень совместимости "+RecSet.Fields(6).Value);
                                   RecSet.MoveNext();
                               КонецЦикла;    
                           КонецЕсли;    
                           RecSet.Close();
                       Исключение
                           Текст.ДобавитьСтроку(ОписаниеОшибки());
                       КонецПопытки;    
                       
                       Текст.ДобавитьСтроку("");                            
                       
                       Попытка                          
                           Query="SELECT * FROM sys.dm_os_performance_counters WHERE counter_name like 'User Connections%'";
                           RecSet.Open(Query,SQLServer,3,1,1);
                           Если RecSet.RecordCount>0 Тогда
                               RecSet.MoveFirst();
                               Пока НЕ RecSet.EOF() Цикл
                                   ИмяСчетчика=СокрЛП(RecSet.Fields(1).Value);
                                   Текст.ДобавитьСтроку("Количество подключений к серверу ["+RecSet.Fields(3).Value+"]");
                                   RecSet.MoveNext();
                               КонецЦикла;    
                           КонецЕсли;    
                           RecSet.Close();
                       Исключение
                           Текст.ДобавитьСтроку(ОписаниеОшибки());
                       КонецПопытки;    
                       
                       Текст.ДобавитьСтроку("");
                       Текст.ДобавитьСтроку("Свободного места на диска сервера СУБД:");
                       
                       Попытка  
                           Query="EXEC master.dbo.xp_fixeddrives";
                           RecSet.Open(Query,SQLServer,3,1,1);
                           Если RecSet.RecordCount>0 Тогда
                               RecSet.MoveFirst();
                               Пока НЕ RecSet.EOF() Цикл
                                   ИмяДиска=СокрЛП(RecSet.Fields(0).Value);
                                   Текст.ДобавитьСтроку("на диске "+ИмяДиска+" ="+RecSet.Fields(1).Value+" Mb");
                                   RecSet.MoveNext();
                               КонецЦикла;    
                           КонецЕсли;    
                           RecSet.Close();
                       Исключение
                           Текст.ДобавитьСтроку(ОписаниеОшибки());
                       КонецПопытки;  
                       
                       Текст.ДобавитьСтроку("");
                       Текст.ДобавитьСтроку("Распределение памяти на сервере СУБД:");
                       
                       Попытка                          
                           Query="SELECT * FROM sys.dm_os_performance_counters WHERE object_name like 'SQLServer:Mem%'";
                           RecSet.Open(Query,SQLServer,3,1,1);
                           Если RecSet.RecordCount>0 Тогда
                               RecSet.MoveFirst();
                               Пока НЕ RecSet.EOF() Цикл
                                   ИмяСчетчика=СокрЛП(RecSet.Fields(1).Value);
                                   Текст.ДобавитьСтроку(""+ИмяСчетчика+" = "+RecSet.Fields(3).Value);
                                   RecSet.MoveNext();
                               КонецЦикла;    
                           КонецЕсли;    
                           RecSet.Close();
                       Исключение
                           Текст.ДобавитьСтроку(ОписаниеОшибки());
                       КонецПопытки;    
                       
                       
                       
                       
                       Попытка  
                           SQLServer.Close();
                       Исключение
                           Текст.ДобавитьСтроку(ОписаниеОшибки());
                       КонецПопытки;  
                       
                       Текст.ДобавитьСтроку("");      
                       
                   КонецЕсли;
                   
                   Стр = Текст1.ПрочитатьСтроку();
               КонецЦикла;
               
               Попытка
                   //УдалитьФайлы(ИмяФайла
               Исключение
                   Текст.ДобавитьСтроку(ОписаниеОшибки());
               КонецПопытки;  
           Исключение
               Текст.ДобавитьСтроку(ОписаниеОшибки());
           КонецПопытки;  
       КонецЕсли;
41 Demiurg
 
20.11.08
19:14
через кластер будет что-то вроде этого
Соединения = ПолучитьСоединенияИнформационнойБазы();
   Для каждого СоединениеИнформационнойБазы Из Соединения Цикл
       Если ПустаяСтрока(ИмяПользователя()) Тогда Продолжить; КонецЕсли;
       Если СоединениеИнформационнойБазы.Пользователь.Имя = ИмяПользователя() И  СоединениеИнформационнойБазы.ИмяПриложения="1CV8" Тогда
           Если Лев(СтрокаСоединенияИнформационнойБазы(),5)="File=" Тогда
               ФайловыйВариант = Истина;
               ИмяСервераИБ="";
               ИмяБазы = "";
           Иначе
               ФайловыйВариант = Ложь;    
               ПозицияРазделителя = Найти(СтрокаСоединенияИнформационнойБазы(),";");
               ИмяКластера= Сред(СтрокаСоединенияИнформационнойБазы(),7, ПозицияРазделителя-8);
               ОписаниеИБ.Вставить("ИмяСервераИБ",ИмяСервераИБ);
               ИмяИнформационнойБазы = Сред(СтрокаСоединенияИнформационнойБазы(),ПозицияРазделителя+5,СтрДлина(СтрокаСоединенияИнформационнойБазы())-ПозицияРазделителя-5);
               ОписаниеИБ.Вставить("ИмяИнформационнойБазы",СтрЗаменить(ИмяИнформационнойБазы,"""",""));
               ИнформационнаяБаза = ОписаниеИБ.ИмяИнформационнойБазы;
               Пользователь = ИмяПользователя();
           КонецЕсли;    
           Прервать;
       КонецЕсли;
       
   КонецЦикла;
   
   
   Соединитель = Новый COMОбъект("V81.COMConnector");
   АгентСервера = Соединитель.ConnectAgent(ИмяКластера);  
   КластерыСерверов = АгентСервера.GetClusters().Выгрузить();
   ИмяСервераИБВРег = ВРег(ИмяКластера);
   Для Каждого Кластер Из КластерыСерверов Цикл
       Если ВРег(Кластер.HostName) = ИмяСервераИБВРег Тогда
           СерверИнформационнойБазы = Кластер;
           Прервать;
       КонецЕсли;
   КонецЦикла;
   
   АгентСервера.Authenticate(СерверИнформационнойБазы,АдминистраторКластера,ПарольАдминистратораКластера );
   
   ПроцессыCOM = АгентСервера.GetWorkingProcesses(СерверИнформационнойБазы);
   РабочиеПроцессы = ПроцессыCOM.Выгрузить();
   
   РабочийПроцесс = РабочиеПроцессы[0];
   СписокСоединений = РабочиеПроцессы;
   СоединениеСРабочимПроцессом = Соединитель.ConnectWorkingProcess(
   РабочийПроцесс.HostName + ":" + Формат(РабочийПроцесс.MainPort, "ЧГ="));
   
   СоединениеСРабочимПроцессом.AddAuthentication(Пользователь,ПарольПользователя);
   
   // Получение списка информационных баз
   ИнформационныеБазы = СоединениеСРабочимПроцессом.GetInfoBases().Выгрузить();
   
   // Поиск информационной базы с требуемыми параметрами подключения
   ИмяИнформационнойБазыВРег = ВРег(ИмяИнформационнойБазы);
   
   Для Каждого ИБ Из ИнформационныеБазы Цикл
       
       // Если информационная база найдена
       Если ВРег(ИБ.Name) = ВРег(ИмяИнформационнойБазы) Тогда
           
           // Запомнить информационную базу и прекратить поиск
           ИнформационнаяБаза = ИБ.Name;                    
           Прервать;              
       КонецЕсли;
   КонецЦикла;
   ИнформационныеБазы = СоединениеСРабочимПроцессом.GetInfoBases().Выгрузить();    
   Для Каждого ИБ Из ИнформационныеБазы Цикл
       
       // Если информационная база найдена
       Если ВРег(ИБ.Name) = ВРег(ИмяИнформационнойБазы) Тогда
           //р= СоединениеСРабочимПроцессом.Connect(ИБ,"тест","");  
           
           Для шаг = 0 по СписокСоединений.Количество()-1 Цикл
               //                        
               ф=Соединитель.ConnectWorkingProcess(СписокСоединений[шаг].HostName + ":" + Формат(СписокСоединений[шаг].MainPort, "ЧГ="));
               Попытка ф.AddAuthentication(Пользователь,ПарольПользователя);Исключение КонецПопытки;
               
               Соединения = ф.GetInfoBaseConnections(ИБ).Выгрузить();
               
               Для Каждого соед Из Соединения Цикл
                   
                   Если соед.AppID="SrvrConsole" Тогда Продолжить; КонецЕсли;
                   Если соед.AppID="COMConsole" Тогда Продолжить; КонецЕсли;
                   Если соед.AppID="Designer" Тогда Продолжить; КонецЕсли;
                   
                   НоваяСессия = Сессии.Добавить();
                   НоваяСессия.Юзер = соед.UserName;
                   НоваяСессия.Комп = Соед.HostName;
                   НоваяСессия.Сессия1С = соед.ConnID;
                   НоваяСессия.SPID = соед.dbProcInfo;
               КонецЦикла;
               
               
           КонецЦикла;
           //Соединения = СоединениеСРабочимПроцессом.GetInfoBaseConnections(ИБ).Выгрузить();
           
           Прервать;
           
       КонецЕсли;
   КонецЦикла;
42 wPa
 
20.11.08
19:31
(41) Да точно так. Только пользователя и пароль при авторизации на процессе приходится указывать. Поэтому создаю юзера нового с правом администрирования.
43 Demiurg
 
20.11.08
19:33
(42) для текущего пользователя Windows из под которого сидишь - добавь в админы кластера (т.е. виндовая авторизация для админа кластера) и все будет чики-поки
44 Demiurg
 
20.11.08
19:35
(42) а если совсем правильно, то "стучатся" на кластер надо в 2 захода:
1) сначало без авторизации (считаем, что кластер по умолчанию без админов, либо виндовая авторизация админов)
2) если ошибка авторизация, то просим пользователя указать логин и пароль админа интерактивно (и запоминаем его в ИБ)
45 wPa
 
20.11.08
19:55
(44) на процессе без авторизации не пройдет по любому