diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\232\320\273\320\260\321\201\321\202\320\265\321\200\320\276\320\2741\320\241.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\232\320\273\320\260\321\201\321\202\320\265\321\200\320\276\320\2741\320\241.os" index 46b3a81..3fa3951 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\232\320\273\320\260\321\201\321\202\320\265\321\200\320\276\320\2741\320\241.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\232\320\273\320\260\321\201\321\202\320\265\321\200\320\276\320\2741\320\241.os" @@ -55,7 +55,7 @@ Агент_ИсполнительКоманд = Новый ИсполнительКоманд(ВерсияИлиПутьКУтилитеАдминистрирования); - ПараметрыОбъекта = Новый КомандыОбъекта(Перечисления.РежимыАдминистрирования.Агент); + ПараметрыОбъекта = Новый КомандыОбъекта(Перечисления.РежимыАдминистрирования.Агенты); Если ТипЗнч(Администратор) = Тип("Структура") Тогда Агент_Администратор = Новый Структура("Администратор, Пароль"); @@ -407,21 +407,35 @@ // Функция возвращает описание центрального сервера 1С в виде соответствия, // с вложенными описаниями кластеров и всех дочерних объектов // +// Параметры: +// ИмяПоляКлюча - Строка - имя поля, значение которого будет использовано +// в качестве ключа возвращаемого соответствия +// // Возвращаемое значение: // Соответствие - описание центрального сервера 1С, // включая описания кластеров и всех дочерних объектов // -Функция ОписаниеЦентральногоСервера() Экспорт +Функция ОписаниеЦентральногоСервера(Знач ИмяПоляКлюча = "Имя") Экспорт Описание = Новый Соответствие(); - Описание.Вставить("СервисАдминистрирования", - ПолучитьПоляОбъекта(ЭтотОбъект)); + ПоляОбъекта = Новый Соответствие(); + + Параметры = ПараметрыОбъекта(ИмяПоляКлюча); + + Для Каждого ТекПараметр Из Параметры Цикл + ПоляОбъекта.Вставить(ТекПараметр.Значение[ИмяПоляКлюча], ЭтотОбъект.Получить(ТекПараметр.Ключ)); + КонецЦикла; + + Если ИмяПоляКлюча = "Имя" Тогда + Описание.Вставить("СервисАдминистрирования", ПоляОбъекта); + Иначе + Описание.Вставить("ras", ПоляОбъекта); + КонецЕсли; СписокАдминистраторов = Новый Массив(); Попытка - СписокАдминистраторов = ПолучитьСписокОбъектов(ЭтотОбъект.Администраторы().Список(), - ЭтотОбъект.Администраторы().ПараметрыОбъекта()); + СписокАдминистраторов = ЭтотОбъект.Администраторы().Список(, , ИмяПоляКлюча); Исключение ТекстОшибки = СтрШаблон("Ошибка получения списка администраторов агента: %1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -429,15 +443,15 @@ СписокАдминистраторов.Добавить(СтрШаблон("<%1>", ТекстОшибки)); КонецПопытки; - Описание.Вставить("Администраторы", СписокАдминистраторов); + Описание.Вставить(ПолучитьИмяКоллекцииОбъектов("Агент.Администратор", ИмяПоляКлюча), СписокАдминистраторов); - Описание.Вставить("Кластеры", Новый Массив()); + Описание.Вставить(ПолучитьИмяКоллекцииОбъектов("Кластер", ИмяПоляКлюча), Новый Массив()); Кластеры = Кластеры().Список(); Для Каждого ТекКластер Из Кластеры Цикл - Описание["Кластеры"].Добавить(ОписаниеКластера(ТекКластер)); + Описание[ПолучитьИмяКоллекцииОбъектов("Кластер", ИмяПоляКлюча)].Добавить(ОписаниеКластера(ТекКластер, ИмяПоляКлюча)); КонецЦикла; @@ -449,13 +463,15 @@ // с вложенными описаниями всех дочерних объектов // // Параметры: -// КластерИлиАдрес - Кластер, Строка - объект или адрес кластера 1С +// КластерИлиАдрес - Кластер, Строка - объект или адрес кластера 1С +// ИмяПоляКлюча - Строка - имя поля, значение которого будет использовано +// в качестве ключа возвращаемого соответствия // // Возвращаемое значение: // Соответствие - описание кластера 1С, // включая описания всех дочерних объектов // -Функция ОписаниеКластера(Знач КластерИлиАдрес) Экспорт +Функция ОписаниеКластера(Знач КластерИлиАдрес, Знач ИмяПоляКлюча = "Имя") Экспорт Если ТипЗнч(КластерИлиАдрес) = Тип("Строка") Тогда Кластер = ЭтотОбъект.Кластеры.Получить(КластерИлиАдрес); @@ -463,80 +479,102 @@ Кластер = КластерИлиАдрес; КонецЕсли; - Описание = ПолучитьПоляОбъекта(Кластер); + Описание = Новый Соответствие(); + + Параметры = Кластер.ПараметрыОбъекта(ИмяПоляКлюча); - Описание.Вставить("Администраторы", - ПолучитьСписокОбъектов(Кластер.Администраторы().Список(), - Кластер.Администраторы().ПараметрыОбъекта())); + Для Каждого ТекПараметр Из Параметры Цикл + Описание.Вставить(ТекПараметр.Значение[ИмяПоляКлюча], Кластер.Получить(ТекПараметр.Ключ)); + КонецЦикла; - Описание.Вставить("Серверы", Новый Массив()); + Описание.Вставить(ПолучитьИмяКоллекцииОбъектов("Кластер.Администратор", ИмяПоляКлюча), + Кластер.Администраторы().Список(, , ИмяПоляКлюча)); + + Описание.Вставить(ПолучитьИмяКоллекцииОбъектов("Сервер", ИмяПоляКлюча), Новый Массив()); Серверы = Кластер.Серверы().Список(); Для Каждого ТекСервер Из Серверы Цикл - ПоляОбъекта = ПолучитьПоляОбъекта(ТекСервер); + ПоляОбъекта = Новый Соответствие(); + + Параметры = ТекСервер.ПараметрыОбъекта(ИмяПоляКлюча); + + Для Каждого ТекПараметр Из Параметры Цикл + ПоляОбъекта.Вставить(ТекПараметр.Значение[ИмяПоляКлюча], ТекСервер.Получить(ТекПараметр.Ключ)); + КонецЦикла; + ПоляОбъекта.Вставить("НазначенияФункциональности", - ПолучитьСписокОбъектов(ТекСервер.НазначенияФункциональности().Список())); - Описание["Серверы"].Добавить(ПоляОбъекта); + ТекСервер.НазначенияФункциональности().Список(, , ИмяПоляКлюча)); + Описание[ПолучитьИмяКоллекцииОбъектов("Сервер", ИмяПоляКлюча)].Добавить(ПоляОбъекта); КонецЦикла; - Описание.Вставить("Менеджеры", - ПолучитьСписокОбъектов(Кластер.Менеджеры().Список())); + Описание.Вставить(ПолучитьИмяКоллекцииОбъектов("МенеджерКластера", ИмяПоляКлюча), + Кластер.Менеджеры().Список(, , ИмяПоляКлюча)); + + Описание.Вставить(ПолучитьИмяКоллекцииОбъектов("Сервис", ИмяПоляКлюча), + Кластер.Сервисы().Список(, , ИмяПоляКлюча)); - Описание.Вставить("Сервисы", - ПолучитьСписокОбъектов(Кластер.Сервисы().Список())); + Описание.Вставить(ПолучитьИмяКоллекцииОбъектов("РабочийПроцесс", ИмяПоляКлюча), + Кластер.РабочиеПроцессы().Список(, , ИмяПоляКлюча)); + ИмяСвойства = СтрШаблон("%1.%2", + ПолучитьИмяКоллекцииОбъектов("РабочийПроцесс", ИмяПоляКлюча), + ПолучитьИмяКоллекцииОбъектов("РабочийПроцесс.Лицензия", ИмяПоляКлюча)); + Описание.Вставить(ИмяСвойства, Кластер.РабочиеПроцессы().Лицензии().Список(, , ИмяПоляКлюча)); - Описание.Вставить("РабочиеПроцессы", - ПолучитьСписокОбъектов(Кластер.РабочиеПроцессы().Список())); - Описание.Вставить("РабочиеПроцессы.Лицензии", - ПолучитьСписокОбъектов(Кластер.РабочиеПроцессы().Лицензии().Список(), - Кластер.РабочиеПроцессы().ПараметрыЛицензий())); + Описание.Вставить(ПолучитьИмяКоллекцииОбъектов("ИнформационнаяБаза", ИмяПоляКлюча), + Кластер.ИнформационныеБазы().Список(, , ИмяПоляКлюча)); - Описание.Вставить("ИнформационныеБазы", - ПолучитьСписокОбъектов(Кластер.ИнформационныеБазы().Список())); - Описание.Вставить("Соединения", СоединенияКластера(Кластер)); + Описание.Вставить(ПолучитьИмяКоллекцииОбъектов("Соединение", ИмяПоляКлюча), + СоединенияКластера(Кластер, ИмяПоляКлюча)); - Описание.Вставить("Сеансы", СеансыКластера(Кластер)); - Описание.Вставить("Сеансы.Лицензии", - ПолучитьСписокОбъектов(Кластер.Сеансы().Лицензии().Список(), - Кластер.Сеансы().ПараметрыЛицензий())); + Описание.Вставить(ПолучитьИмяКоллекцииОбъектов("Сеанс", ИмяПоляКлюча), СеансыКластера(Кластер, ИмяПоляКлюча)); + ИмяСвойства = СтрШаблон("%1.%2", + ПолучитьИмяКоллекцииОбъектов("Сеанс", ИмяПоляКлюча), + ПолучитьИмяКоллекцииОбъектов("Сеанс.Лицензия", ИмяПоляКлюча)); + Описание.Вставить(ИмяСвойства, Кластер.Сеансы().Лицензии().Список(, , ИмяПоляКлюча)); - Описание.Вставить("Блокировки", - ПолучитьСписокОбъектов(Кластер.Блокировки().Список())); + Описание.Вставить(ПолучитьИмяКоллекцииОбъектов("Блокировка", ИмяПоляКлюча), + Кластер.Блокировки().Список(, , ИмяПоляКлюча)); - Описание.Вставить("ПрофилиБезопасности", Новый Массив()); + Описание.Вставить(ПолучитьИмяКоллекцииОбъектов("ПрофильБезопасности", ИмяПоляКлюча), Новый Массив()); ПрофилиБезопасности = Кластер.ПрофилиБезопасности().Список(); Для Каждого ТекПрофиль Из ПрофилиБезопасности Цикл - ПоляОбъекта = ПолучитьПоляОбъекта(ТекПрофиль); + ПоляОбъекта = Новый Соответствие(); + + Параметры = ТекПрофиль.ПараметрыОбъекта(ИмяПоляКлюча); + + Для Каждого ТекПараметр Из Параметры Цикл + ПоляОбъекта.Вставить(ТекПараметр.Значение[ИмяПоляКлюча], ТекПрофиль.Получить(ТекПараметр.Ключ)); + КонецЦикла; - ПоляОбъекта.Вставить("Каталоги", - ПолучитьСписокОбъектов(ТекПрофиль.Каталоги().Список())); - ПоляОбъекта.Вставить("COMКлассы", - ПолучитьСписокОбъектов(ТекПрофиль.COMКлассы().Список())); + ПоляОбъекта.Вставить(ПолучитьИмяКоллекцииОбъектов("ПрофильБезопасности.Каталог", ИмяПоляКлюча), + ТекПрофиль.Каталоги().Список(, , ИмяПоляКлюча)); + ПоляОбъекта.Вставить(ПолучитьИмяКоллекцииОбъектов("ПрофильБезопасности.COMКласс", ИмяПоляКлюча), + ТекПрофиль.COMКлассы().Список(, , ИмяПоляКлюча)); - ПоляОбъекта.Вставить("ВнешниеКомпоненты", - ПолучитьСписокОбъектов(ТекПрофиль.ВнешниеКомпоненты().Список())); + ПоляОбъекта.Вставить(ПолучитьИмяКоллекцииОбъектов("ПрофильБезопасности.ВнешняяКомпонента", ИмяПоляКлюча), + ТекПрофиль.ВнешниеКомпоненты().Список(, , ИмяПоляКлюча)); - ПоляОбъекта.Вставить("ВнешниеМодули", - ПолучитьСписокОбъектов(ТекПрофиль.ВнешниеМодули().Список())); + ПоляОбъекта.Вставить(ПолучитьИмяКоллекцииОбъектов("ПрофильБезопасности.ВнешнийМодуль", ИмяПоляКлюча), + ТекПрофиль.ВнешниеМодули().Список(, , ИмяПоляКлюча)); - ПоляОбъекта.Вставить("Приложения", - ПолучитьСписокОбъектов(ТекПрофиль.Приложения().Список())); + ПоляОбъекта.Вставить(ПолучитьИмяКоллекцииОбъектов("ПрофильБезопасности.Приложение", ИмяПоляКлюча), + ТекПрофиль.Приложения().Список(, , ИмяПоляКлюча)); - ПоляОбъекта.Вставить("ИнтернетРесурсы", - ПолучитьСписокОбъектов(ТекПрофиль.ИнтернетРесурсы().Список())); + ПоляОбъекта.Вставить(ПолучитьИмяКоллекцииОбъектов("ПрофильБезопасности.ИнтернетРесурс", ИмяПоляКлюча), + ТекПрофиль.ИнтернетРесурсы().Список(, , ИмяПоляКлюча)); - Описание["ПрофилиБезопасности"].Добавить(ПоляОбъекта); + Описание[ПолучитьИмяКоллекцииОбъектов("ПрофильБезопасности", ИмяПоляКлюча)].Добавить(ПоляОбъекта); КонецЦикла; - Описание.Вставить("СчетчикиРесурсов", - ПолучитьСписокОбъектов(Кластер.СчетчикиРесурсов().Список())); + Описание.Вставить(ПолучитьИмяКоллекцииОбъектов("СчетчикРесурсов", ИмяПоляКлюча), + Кластер.СчетчикиРесурсов().Список(, , ИмяПоляКлюча)); - Описание.Вставить("ОграниченияРесурсов", - ПолучитьСписокОбъектов(Кластер.ОграниченияРесурсов().Список())); + Описание.Вставить(ПолучитьИмяКоллекцииОбъектов("ОграничениеРесурсов", ИмяПоляКлюча), + Кластер.ОграниченияРесурсов().Список(, , ИмяПоляКлюча)); Возврат Описание; @@ -544,10 +582,14 @@ // Функция возвращает список сеансов всех кластеров центрального сервера 1С в виде массива // +// Параметры: +// ИмяПоляКлюча - Строка - имя поля, значение которого будет использовано +// в качестве ключа возвращаемого соответствия +// // Возвращаемое значение: // Массив (Соответствие) - список сеансов // -Функция ВсеСеансы() Экспорт +Функция ВсеСеансы(Знач ИмяПоляКлюча = "Имя") Экспорт ВсеКластеры = Кластеры.Список(); @@ -569,11 +611,13 @@ // // Параметры: // КластерИлиАдрес - Кластер, Строка - объект или адрес кластера 1С +// ИмяПоляКлюча - Строка - имя поля, значение которого будет использовано +// в качестве ключа возвращаемого соответствия // // Возвращаемое значение: // Массив (Соответствие) - список сеансов кластера 1С // -Функция СеансыКластера(Знач КластерИлиАдрес = Неопределено) Экспорт +Функция СеансыКластера(Знач КластерИлиАдрес = Неопределено, Знач ИмяПоляКлюча = "Имя") Экспорт Если НЕ ЗначениеЗаполнено(КластерИлиАдрес) Тогда Возврат ВсеСеансы(); @@ -585,16 +629,20 @@ Кластер = КластерИлиАдрес; КонецЕсли; - Возврат ПолучитьСписокОбъектов(Кластер.Сеансы().Список()); + Возврат Кластер.Сеансы().Список(, , ИмяПоляКлюча); КонецФункции // СеансыКластера() // Функция возвращает список соединений всех кластеров центрального сервера 1С в виде массива // +// Параметры: +// ИмяПоляКлюча - Строка - имя поля, значение которого будет использовано +// в качестве ключа возвращаемого соответствия +// // Возвращаемое значение: // Массив (Соответствие) - список соединений // -Функция ВсеСоединения() Экспорт +Функция ВсеСоединения(Знач ИмяПоляКлюча = "Имя") Экспорт ВсеКластеры = Кластеры.Список(); @@ -615,12 +663,14 @@ // Функция возвращает список соединений кластера 1С в виде массива // // Параметры: -// КластерИлиАдрес - Кластер, Строка - объект или адрес кластера 1С +// КластерИлиАдрес - Кластер, Строка - объект или адрес кластера 1С +// ИмяПоляКлюча - Строка - имя поля, значение которого будет использовано +// в качестве ключа возвращаемого соответствия // // Возвращаемое значение: // Массив (Соответствие) - список соединений кластера 1С // -Функция СоединенияКластера(Знач КластерИлиАдрес = Неопределено) Экспорт +Функция СоединенияКластера(Знач КластерИлиАдрес = Неопределено, Знач ИмяПоляКлюча = "Имя") Экспорт Если НЕ ЗначениеЗаполнено(КластерИлиАдрес) Тогда Возврат ВсеСоединения(); @@ -632,7 +682,7 @@ Кластер = КластерИлиАдрес; КонецЕсли; - Возврат ПолучитьСписокОбъектов(Кластер.Соединения().Список()); + Возврат Кластер.Соединения().Список(, , ИмяПоляКлюча); КонецФункции // СоединенияКластера() @@ -640,38 +690,24 @@ #Область СлужебныеМетоды -Функция ПолучитьСписокОбъектов(Знач Список, Знач Параметры = Неопределено) - - СписокОбъектов = Новый Массив(); - - Для Каждого ТекОбъект Из Список Цикл - СписокОбъектов.Добавить(ПолучитьПоляОбъекта(ТекОбъект, Параметры)); - КонецЦикла; - - Возврат СписокОбъектов; - -КонецФункции // ПолучитьСписокОбъектов() - -Функция ПолучитьПоляОбъекта(Знач ОбъектКластера, Знач Параметры = Неопределено) - - ПоляОбъекта = Новый Соответствие(); +// Функция возвращает имя коллекции объектов по имени типа, из указанного поля ключа +// +// Параметры: +// ИмяТипа - Строка - имя типа объектов кластера +// ИмяПоляКлюча - Строка - имя поля, значение которого будет возвращено +// в качестве имени коллекции +// +// Возвращаемое значение: +// Строка - имя коллекции объектов +// +Функция ПолучитьИмяКоллекцииОбъектов(Знач ИмяТипа, Знач ИмяПоляКлюча = "Имя") - ИспользоватьПараметрыОбъекта = (Параметры = Неопределено); - Если ИспользоватьПараметрыОбъекта Тогда - Параметры = ОбъектКластера.ПараметрыОбъекта(); + Если ИмяПоляКлюча = "Имя" Тогда + ИмяПоляКлюча = "ИмяКоллекции"; КонецЕсли; - Для Каждого ТекПараметр Из Параметры Цикл - Если ИспользоватьПараметрыОбъекта Тогда - Ключ = ТекПараметр.Ключ; - Иначе - Ключ = ТекПараметр.Значение.ИмяРАК; - КонецЕсли; - ПоляОбъекта.Вставить(ТекПараметр.Значение.ИмяРАК, ОбъектКластера.Получить(Ключ)); - КонецЦикла; - - Возврат ПоляОбъекта; + Возврат ТипыОбъектовКластера.ТипОбъекта(ИмяТипа)[ИмяПоляКлюча]; -КонецФункции // ПолучитьПоляОбъекта() +КонецФункции // ПолучитьИмяКоллекцииОбъектов() #КонецОбласти // СлужебныеМетоды \ No newline at end of file