diff --git a/.gitignore b/.gitignore
index 5ddbfac..736e1d7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,4 @@
-.vscode/launch.json
+.vscode/launch.json
sonarlint.json
\.sonar/
@@ -6,3 +6,5 @@ test-reports/
coverage/
*.ospx
tests/fixtures/ПараметрыТестирования.txt
+
+oscript_modules
\ No newline at end of file
diff --git a/lib.config b/lib.config
index 702695e..2484864 100644
--- a/lib.config
+++ b/lib.config
@@ -16,6 +16,7 @@
+
diff --git a/src/lib.config b/src/lib.config
index e26e1f3..88205b7 100644
--- a/src/lib.config
+++ b/src/lib.config
@@ -16,6 +16,7 @@
+
diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\320\276\320\275\320\275\320\260\321\217\320\221\320\260\320\267\320\260.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\320\276\320\275\320\275\320\260\321\217\320\221\320\260\320\267\320\260.os"
index 6748c10..5122544 100644
--- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\320\276\320\275\320\275\320\260\321\217\320\221\320\260\320\267\320\260.os"
+++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\320\276\320\275\320\275\320\260\321\217\320\221\320\260\320\267\320\260.os"
@@ -87,7 +87,7 @@
ЗаполнитьПараметрыИБ(ТекОписание);
ИБ_Сеансы = Новый Сеансы(Кластер_Агент, Кластер_Владелец, ЭтотОбъект);
- ИБ_Соединения = Новый Соединения(Кластер_Агент, Кластер_Владелец, , ЭтотОбъект);
+ ИБ_Соединения = Новый Соединения(Кластер_Агент, Кластер_Владелец, Неопределено, ЭтотОбъект);
МоментАктуальности = ТекущаяУниверсальнаяДатаВМиллисекундах();
diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\276\320\265\320\264\320\270\320\275\320\265\320\275\320\270\320\265.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\276\320\265\320\264\320\270\320\275\320\265\320\275\320\270\320\265.os"
new file mode 100644
index 0000000..43f49d9
--- /dev/null
+++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\276\320\265\320\264\320\270\320\275\320\265\320\275\320\270\320\265.os"
@@ -0,0 +1,193 @@
+Перем Объект_Ид;
+Перем Объект_Параметры;
+Перем ПараметрыОбъекта;
+
+Перем Кластер_Агент;
+Перем Кластер_Владелец;
+Перем Процесс_Владелец;
+Перем ИБ_Владелец;
+
+Перем ПериодОбновления;
+Перем МоментАктуальности;
+
+Перем Лог;
+
+// Конструктор
+//
+// Параметры:
+// АгентКластера - АгентКластера - ссылка на родительский объект агента кластера
+// Кластер - Кластера - ссылка на родительский объект кластера
+// Процесс - Процесс - ссылка на родительский объект процесса
+// ИБ - ИнформационнаяБаза - ссылка на родительский объект информационной базы
+// Соединение - Строка, Соответствие - идентификатор или параметры соединения
+//
+Процедура ПриСозданииОбъекта(АгентКластера, Кластер, ИБ, Соединение, Процесс = Неопределено)
+
+ Кластер_Агент = АгентКластера;
+ Кластер_Владелец = Кластер;
+ ИБ_Владелец = ИБ;
+ Процесс_Владелец = Процесс;
+
+ ПараметрыОбъекта = Новый ПараметрыОбъекта("connection");
+
+ Если ТипЗнч(Соединение) = Тип("Соответствие") Тогда
+ Объект_Ид = Соединение["connection"];
+ Служебный.ЗаполнитьПараметрыОбъекта(ЭтотОбъект, Объект_Параметры, Соединение);
+ МоментАктуальности = ТекущаяУниверсальнаяДатаВМиллисекундах();
+ Иначе
+ Объект_Ид = Соединение;
+ МоментАктуальности = 0;
+ КонецЕсли;
+
+ ПериодОбновления = 60000;
+
+КонецПроцедуры // ПриСозданииОбъекта()
+
+// Функция возвращает ИД объекта
+//
+// Возвращаемое значение:
+// Строка - идентификатор объекта
+//
+Функция Ид() Экспорт
+
+ Возврат Объект_Ид;
+
+КонецФункции // Ид()
+
+// Процедура получает данные от сервиса администрирования кластера 1С
+// и сохраняет в локальных переменных
+//
+// Параметры:
+// ОбновитьПринудительно - Булево - Истина - принудительно обновить данные (вызов RAC)
+// - Ложь - данные будут получены если истекло время актуальности
+// или данные не были получены ранее
+//
+Процедура ОбновитьДанные(ОбновитьПринудительно = Ложь) Экспорт
+
+ Если Служебный.ТребуетсяОбновление(Объект_Параметры,
+ МоментАктуальности, ПериодОбновления, ОбновитьПринудительно) Тогда
+
+ ОбновитьДанныеОбъекта();
+
+ КонецЕсли;
+
+ МоментАктуальности = ТекущаяУниверсальнаяДатаВМиллисекундах();
+
+КонецПроцедуры // ОбновитьДанные()
+
+// Процедура получает данные соединения от сервиса администрирования кластера 1С
+// и сохраняет в локальных переменных
+//
+Процедура ОбновитьДанныеОбъекта() Экспорт
+
+ ПараметрыЗапуска = Новый Массив();
+ ПараметрыЗапуска.Добавить(Кластер_Агент.СтрокаПодключения());
+
+ ПараметрыЗапуска.Добавить("connection");
+ ПараметрыЗапуска.Добавить("list");
+
+ ПараметрыЗапуска.Добавить(СтрШаблон("--cluster=%1", Кластер_Владелец.Ид()));
+ ПараметрыЗапуска.Добавить(Кластер_Владелец.СтрокаАвторизации());
+
+ Если НЕ Процесс_Владелец = Неопределено Тогда
+ ПараметрыЗапуска.Добавить(СтрШаблон("--process=%1", Процесс_Владелец.Получить("process")));
+ КонецЕсли;
+
+ Если НЕ ИБ_Владелец = Неопределено Тогда
+ ПараметрыЗапуска.Добавить(СтрШаблон("--infobase=%1", ИБ_Владелец.Ид()));
+ ПараметрыЗапуска.Добавить(СтрШаблон(ИБ_Владелец.СтрокаАвторизации()));
+ КонецЕсли;
+
+ Кластер_Агент.ВыполнитьКоманду(ПараметрыЗапуска);
+
+ МассивРезультатов = Кластер_Агент.ВыводКоманды();
+
+ Если МассивРезультатов.Количество() = 0 Тогда
+ Возврат;
+ КонецЕсли;
+
+ Служебный.ЗаполнитьПараметрыОбъекта(ЭтотОбъект, Объект_Параметры, МассивРезультатов[0]);
+
+КонецПроцедуры // ОбновитьДанныеОбъекта()
+
+// Функция возвращает коллекцию параметров объекта
+//
+// Параметры:
+// ИмяПоляКлюча - Строка - имя поля, значение которого будет использовано
+// в качестве ключа возвращаемого соответствия
+//
+// Возвращаемое значение:
+// Соответствие - коллекция параметров объекта, для получения/изменения значений
+//
+Функция ПараметрыОбъекта(ИмяПоляКлюча = "ИмяПараметра") Экспорт
+
+ Возврат ПараметрыОбъекта.Получить(ИмяПоляКлюча);
+
+КонецФункции // ПараметрыОбъекта()
+
+// Функция возвращает значение параметра соединения 1С
+//
+// Параметры:
+// ИмяПоля - Строка - Имя параметра соединения
+// ОбновитьПринудительно - Булево - Истина - обновить список (вызов RAC)
+//
+// Возвращаемое значение:
+// Произвольный - значение параметра соединения 1С
+//
+Функция Получить(ИмяПоля, ОбновитьПринудительно = Ложь) Экспорт
+
+ ОбновитьДанные(ОбновитьПринудительно);
+
+ Если НЕ Найти(ВРег("Ид, process"), ВРег(ИмяПоля)) = 0 Тогда
+ Возврат Объект_Ид;
+ КонецЕсли;
+
+ ЗначениеПоля = Объект_Параметры.Получить(ИмяПоля);
+
+ Если ЗначениеПоля = Неопределено Тогда
+
+ ОписаниеПараметра = ПараметрыОбъекта("ИмяПоляРАК").Получить(ИмяПоля);
+
+ Если НЕ ОписаниеПараметра = Неопределено Тогда
+ ЗначениеПоля = Объект_Параметры.Получить(ОписаниеПараметра["ИмяПараметра"]);
+ КонецЕсли;
+ КонецЕсли;
+
+ Возврат ЗначениеПоля;
+
+КонецФункции // Получить()
+
+// Процедура отключает соединение в кластере 1С
+//
+Процедура Отключить() Экспорт
+
+ ПараметрыЗапуска = Новый Массив();
+ ПараметрыЗапуска.Добавить(Кластер_Агент.СтрокаПодключения());
+
+ ПараметрыЗапуска.Добавить("connection");
+ ПараметрыЗапуска.Добавить("list");
+
+ ПараметрыЗапуска.Добавить(СтрШаблон("--cluster=%1", Кластер_Владелец.Ид()));
+ ПараметрыЗапуска.Добавить(Кластер_Владелец.СтрокаАвторизации());
+
+ Если НЕ Процесс_Владелец = Неопределено Тогда
+ ПараметрыЗапуска.Добавить(СтрШаблон("--process=%1", Процесс_Владелец.Получить("process")));
+ КонецЕсли;
+
+ ОтборИБ = Новый Соответствие();
+ ОтборИБ.Вставить("infobase", ИБ_Владелец.Ид());
+
+ СписокИБ = Кластер_Владелец.ИнформационныеБазы().Список(ОтборИБ);
+ Если НЕ СписокИБ.Количество() = 0 Тогда
+ ПараметрыЗапуска.Добавить(СтрШаблон(СписокИБ[0].СтрокаАвторизации()));
+ КонецЕсли;
+
+ Кластер_Агент.ВыполнитьКоманду(ПараметрыЗапуска);
+
+ Лог.Отладка(Кластер_Агент.ВыводКоманды(Ложь));
+
+ ОбновитьДанные(Истина);
+
+КонецПроцедуры // Отключить()
+
+Лог = Логирование.ПолучитьЛог("ktb.lib.irac");
\ No newline at end of file
diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\276\320\265\320\264\320\270\320\275\320\265\320\275\320\270\321\217.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\276\320\265\320\264\320\270\320\275\320\265\320\275\320\270\321\217.os"
index 8f3000a..326fbb5 100644
--- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\276\320\265\320\264\320\270\320\275\320\265\320\275\320\270\321\217.os"
+++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\276\320\265\320\264\320\270\320\275\320\265\320\275\320\270\321\217.os"
@@ -63,7 +63,13 @@
Кластер_Агент.ВыполнитьКоманду(ПараметрыЗапуска);
- Элементы.Заполнить(Кластер_Агент.ВыводКоманды());
+ МассивРезультатов = Кластер_Агент.ВыводКоманды();
+
+ МассивПроцессов = Новый Массив();
+ Для Каждого ТекОписание Из МассивРезультатов Цикл
+ МассивПроцессов.Добавить(Новый Соединение(Кластер_Агент, Кластер_Владелец, ИБ_Владелец, ТекОписание, Процесс_Владелец));
+ КонецЦикла;
+ Элементы.Заполнить(МассивПроцессов);
Элементы.УстановитьАктуальность();