Порывшись с нете однозначного решения как это сделать не нашел, поэтому предлагаю свой версию доработки:
// Установить или снять блокировку информационной базы,
// исходя из значений реквизитов обработки.
//
Процедура ВыполнитьУстановку() Экспорт
Блокировка = Новый БлокировкаСеансов;
Блокировка.Начало = НачалоДействияБлокировки;
Блокировка.Конец = ОкончаниеДействияБлокировки;
Блокировка.Сообщение = СоединенияИБ.СформироватьСообщениеБлокировки(Сообщение, КодРазрешения);
Блокировка.Установлена = БлокировкаУстановкиСоединенийВключена;
Блокировка.КодРазрешения = КодРазрешения;
УстановитьБлокировкуСеансов(Блокировка);
ТекСтруктураИмен = МастерПроцедурыСервера.ВозвратСтруктурыИменСервераИБазы();
ИмяСервера = ТекСтруктураИмен.ИмяСервера;
ИмяБазы = ТекСтруктураИмен.ИмяБазы;
Коннектор = Новый COMОбъект("v82.COMConnector");
Агент = Коннектор.ConnectAgent(ИмяСервера);
Кластеры = Агент.GetClusters();
Для каждого Кластер из Кластеры Цикл
АдминистраторКластера = "COMConnector";
ПарольКластера = "COMConnector";
Агент.Authenticate(Кластер, , );
Процессы = Агент.GetWorkingProcesses(Кластер);
Для каждого Процесс из Процессы Цикл
Порт = Процесс.MainPort;
// теперь есть адрес и порт для подключения к рабочему процессу
РабПроц = Коннектор.ConnectWorkingProcess(ИмяСервера + ":" + СтрЗаменить(Порт, Символы.НПП, ""));
РабПроц.AddAuthentication("ИмяПользователя", "ПарольПользователя");
ИнформационнаяБаза = "";
Базы = РабПроц.GetInfoBases();
Для каждого База из Базы Цикл
Если НРег(База.Name) = НРег(ИмяБазы) Тогда
База.ScheduledJobsDenied = БлокировкаУстановкиСоединенийВключена;
РабПроц.UpdateInfoBase(База);
ИнформационнаяБаза = База;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Коннектор = Неопределено;
Агент = Неопределено;
Кластеры = Неопределено;
КонецПроцедуры
// исходя из значений реквизитов обработки.
//
Процедура ВыполнитьУстановку() Экспорт
Блокировка = Новый БлокировкаСеансов;
Блокировка.Начало = НачалоДействияБлокировки;
Блокировка.Конец = ОкончаниеДействияБлокировки;
Блокировка.Сообщение = СоединенияИБ.СформироватьСообщениеБлокировки(Сообщение, КодРазрешения);
Блокировка.Установлена = БлокировкаУстановкиСоединенийВключена;
Блокировка.КодРазрешения = КодРазрешения;
УстановитьБлокировкуСеансов(Блокировка);
ТекСтруктураИмен = МастерПроцедурыСервера.ВозвратСтруктурыИменСервераИБазы();
ИмяСервера = ТекСтруктураИмен.ИмяСервера;
ИмяБазы = ТекСтруктураИмен.ИмяБазы;
Коннектор = Новый COMОбъект("v82.COMConnector");
Агент = Коннектор.ConnectAgent(ИмяСервера);
Кластеры = Агент.GetClusters();
Для каждого Кластер из Кластеры Цикл
АдминистраторКластера = "COMConnector";
ПарольКластера = "COMConnector";
Агент.Authenticate(Кластер, , );
Процессы = Агент.GetWorkingProcesses(Кластер);
Для каждого Процесс из Процессы Цикл
Порт = Процесс.MainPort;
// теперь есть адрес и порт для подключения к рабочему процессу
РабПроц = Коннектор.ConnectWorkingProcess(ИмяСервера + ":" + СтрЗаменить(Порт, Символы.НПП, ""));
РабПроц.AddAuthentication("ИмяПользователя", "ПарольПользователя");
ИнформационнаяБаза = "";
Базы = РабПроц.GetInfoBases();
Для каждого База из Базы Цикл
Если НРег(База.Name) = НРег(ИмяБазы) Тогда
База.ScheduledJobsDenied = БлокировкаУстановкиСоединенийВключена;
РабПроц.UpdateInfoBase(База);
ИнформационнаяБаза = База;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Коннектор = Неопределено;
Агент = Неопределено;
Кластеры = Неопределено;
КонецПроцедуры
No comments:
Post a Comment