Имя: Пароль:
1C
 
Через COM подключение вытащить список баз в кластере
0 Derectiva
 
03.09.12
20:45
Пишу скрипт для бекапа 1с баз, уперся в то что скрипт должен получить весь список баз в кластере. Хочу вытащить через com соединение.
Подскажите как можно получить список баз в кластере? Или ткните в литературу. Заранее спасибо!
1 Stim
 
03.09.12
21:28
Как посмотреть список баз, зарегистрированных в выбранном кластере?
В приведенном примере (листинг 8.19) производится подключение к агенту сервера, выбирается первый кластер. Для этого кластера получается список информационных баз, который затем обходится в цикле.
Листинг 8.19. Просмотр списка информационных баз
Соединитель = Новый COMObject("V81.COMConnector");

ИмяМашины = "MOBILE-ADS";
Порт = "1540";
СтрокаСоединения = "TCP://" + ИмяМашины + ":" + Порт;

СоединениеСАгентом = Соединитель.ConnectAgent(СтрокаСоединения);
МассивКластеров = СоединениеСАгентом.GetClusters();

// получается первый массив кластера.
ОписаниеКластера = МассивКластеров.GetValue(МассивКластеров.GetLowerBound());

// в случае если определены администраторы кластера, должны быть указаны данные о логине.
СоединениеСАгентом.authenticate(ОписаниеКластера, " ", " ");
   
МассивБаз = СоединениеСАгентом.GetInfoBases(ОписаниеКластера);
МаксимальныйИндекс = МассивБаз.GetUpperBound();

Для ТекущийИндекс = МассивБаз.GetLowerBound() По МаксимальныйИндекс Цикл
   ОписаниеБазы = МассивБаз.GetValue(ТекущийИндекс);
   
   Сообщить(ОписаниеБазы.Descr);
   Сообщить(ОписаниеБазы.Name);
   
КонецЦикла;
2 Stim
 
03.09.12
21:30
Как получить данные по рабочим процессам, запущенным на рабочем сервере кластера?
В приведенном примере (листинг 8.20) производится подключение к агенту сервера, выбирается первый кластер. В этом кластере выбирается первый рабочий сервер и для него получается список рабочих процессов, который затем обходится в цикле.
Листинг 8.20. Просмотр списка рабочих процессов
Соединитель = Новый COMObject("V81.COMConnector");

ИмяМашины = "MOBILE-ADS";
Порт = "1540";
СтрокаСоединения = "TCP://" + ИмяМашины + ":" + Порт;

СоединениеСАгентом = Соединитель.ConnectAgent(СтрокаСоединения);
МассивКластеров = СоединениеСАгентом.GetClusters();

// получается первый массив кластера.
ОписаниеКластера = МассивКластеров.GetValue(МассивКластеров.GetLowerBound());

// в случае если определены администраторы кластера, должны быть указаны данные о логине.
СоединениеСАгентом.authenticate(ОписаниеКластера, " ", " ");

МассивСерверовКластера = СоединениеСАгентом.GetWorkingServers(ОписаниеКластера);

// выбирается самый первый рабочий сервер кластера.
ОписаниеСервераКластера = МассивСерверовКластера.GetValue(МассивСерверовКластера.GetLowerBound());
   
МассивПроцессов = СоединениеСАгентом.GetServerWorkingProcesses(ОписаниеКластера,ОписаниеСервераКластера);
МинимальныйИндекс = МассивПроцессов.GetLowerBound();
МаксимальныйИндекс = МассивПроцессов.GetUpperBound();

Для ТекущийИндекс = МинимальныйИндекс По МаксимальныйИндекс Цикл
   ОписаниеПроцесса = МассивПроцессов.GetValue(ТекущийИндекс);
   
КонецЦикла;    

ОписаниеПроцесса – это COM-объект, обладающий следующими свойствами (рис. 8.3):

Рис. 8.3. Свойства описания процесса
3 Stim
 
03.09.12
21:31
Как получить более подробную информацию по информационной базе?
В приведенном примере (листинг 8.26) производится подключение к агенту сервера, выбирается первый кластер. Для него определяется список рабочих серверов и выбирается первый рабочий сервер. Затем получается список рабочих процессов этого сервера, выбирается первый рабочий процесс и получается информация об информационных базах, зарегистрированных в кластере серверов.
Листинг 8.26. Получение информации по информационной базе
Соединитель = Новый COMObject("V81.COMConnector");

ИмяМашины = "MOBILE-ADS";
Порт= "1540";
СтрокаСоединения = "TCP://" + ИмяМашины + ":" + Порт;

СоединениеСАгентом = Соединитель.ConnectAgent(СтрокаСоединения);
МассивКластеров = СоединениеСАгентом.GetClusters();

// получается первый массив кластера.
ОписаниеКластера = МассивКластеров.GetValue(МассивКластеров.GetLowerBound());

// в случае если определены администраторы кластера, должны быть указаны данные о логине.
СоединениеСАгентом.authenticate(ОписаниеКластера, " ", " ");

МассивСерверовКластера = СоединениеСАгентом.GetWorkingServers(ОписаниеКластера);

// выбирается самый первый рабочий сервер кластера.
ОписаниеСервераКластера = МассивСерверовКластера.GetValue(МассивСерверовКластера.GetLowerBound());
МассивПроцессов = СоединениеСАгентом.GetServerWorkingProcesses(ОписаниеКластера,ОписаниеСервераКластера);

// выбирается самый первый рабочий процесс рабочего сервера.
ОписаниеПроцесса = МассивПроцессов.GetValue(МассивПроцессов.GetLowerBound());

СтрокаСоединения = "TCP://" + ОписаниеПроцесса.HostName + ":" + Формат(ОписаниеПроцесса.MainPort, "ЧГ = ");
СоединениеСПроцессом = Соединитель.ConnectWorkingProcess(СтрокаСоединения);

// вводятся данные пользователя информационной базы.
СоединениеСПроцессом.AddAuthentication(" ", " ");

МассивБаз = СоединениеСПроцессом.GetInfoBases();

Описание информационной базы содержит следующую информацию (рис. 8.5):

Рис. 8.5. Свойства описания информационной базы
4 Stim
 
03.09.12
21:31
ну и хватит пожалуй)
5 Derectiva
 
03.09.12
21:48
Спасибо большое, добрый человек! Очень выручил.
6 Stim
 
03.09.12
21:50
(5) скачай Гапец "Простые примеры разработки"
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший