From 462fe40e34ac432195b3a7cfbc34d708fa2160d5 Mon Sep 17 00:00:00 2001 From: salexdv Date: Fri, 22 Apr 2022 12:58:07 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B5=D0=B4=D0=B2=D0=B0=D1=80?= =?UTF-8?q?=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0=B0=D1=8F=20=D1=84=D0=B8?= =?UTF-8?q?=D0=BB=D1=8C=D1=82=D1=80=D0=B0=D1=86=D0=B8=D0=B8=20=D0=BE=D0=B1?= =?UTF-8?q?=D1=8A=D0=B5=D0=BA=D1=82=D0=BE=D0=B2=20=D0=BA=D0=BB=D0=B0=D1=81?= =?UTF-8?q?=D1=82=D0=B5=D1=80=D0=B0=20#9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\265\320\275\321\202\320\260\320\274.os" | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git "a/src/model/classes/\320\237\320\276\320\264\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\232\320\220\320\263\320\265\320\275\321\202\320\260\320\274.os" "b/src/model/classes/\320\237\320\276\320\264\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\232\320\220\320\263\320\265\320\275\321\202\320\260\320\274.os" index d2eac0d..05251e2 100644 --- "a/src/model/classes/\320\237\320\276\320\264\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\232\320\220\320\263\320\265\320\275\321\202\320\260\320\274.os" +++ "b/src/model/classes/\320\237\320\276\320\264\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\232\320\220\320\263\320\265\320\275\321\202\320\260\320\274.os" @@ -101,6 +101,10 @@ Для Каждого ТекОписаниеОбъекта Из КэшОписанийОбъектов Цикл + Если НЕ ОбъектСоответствуетПредварительномуФильтру(ТекОписаниеОбъекта, Фильтр) Тогда + Продолжить; + КонецЕсли; + // При необходимости получаем полное описание ИБ или соединения и сохраняем в кэш ЗаполнитьРасширенноеОписаниеОбъекта(ТипОбъекта, ТекОписаниеОбъекта.Значение, Поля, ОбновленныеОписания); @@ -838,3 +842,68 @@ КонецФункции // ТипыОбъектовКластера() #КонецОбласти // СлужебныеПроцедурыИФункции + +#Область ПредварительнаяФильтрацияОбъектов + +// Функция проверяет, относится ли поле к тому списку полей, который может +// использоваться для предварительной фильтрации объектов кластера +// +// Возвращаемое значение: +// Булево - Истина - поле может использоваться для предварительной фильтрации +// +Функция ЭтоПолеПредварительногоФильтраОбъекта(ИмяПоля) + + ПоляПредварительногоФильтра = Новый Соответствие(); + ПоляПредварительногоФильтра.Вставить("ID" , Истина); + ПоляПредварительногоФильтра.Вставить("LABEL" , Истина); + ПоляПредварительногоФильтра.Вставить("AGENT" , Истина); + ПоляПредварительногоФильтра.Вставить("CLUSTER" , Истина); + ПоляПредварительногоФильтра.Вставить("CLUSTER-LABEL", Истина); + ПоляПредварительногоФильтра.Вставить("CLUSTER-HOST" , Истина); + ПоляПредварительногоФильтра.Вставить("CLUSTER-PORT" , Истина); + + Возврат ПоляПредварительногоФильтра[ВРег(ИмяПоля)] <> Неопределено; + +КонецФункции + +// Функция проверяет соответствие значений полей объекта указанному набору сравнений (фильтру) +// результаты сравнений объединяются по "И" +// +// Параметры: +// Объект - Соответствие - проверяемый объект +// Фильтр - Массив из Структура - набор сравнений (фильтр) +// * Оператор - Строка - оператор сравнения +// * Значение - Произвольный - значение для сравнения +// РегистроНезависимо - Булево - Истина - при сравнении на (не)равенство +// +// Возвращаемое значение: +// Булево - Истина - значения полей объекта соответствует фильтру +// +Функция ОбъектСоответствуетПредварительномуФильтру(Объект, Фильтр, РегистроНезависимо = Истина) + + Результат = Истина; + + Если НЕ (ЗначениеЗаполнено(Фильтр) И ТипЗнч(Фильтр) = Тип("Соответствие")) Тогда + Возврат Результат; + КонецЕсли; + + Для Каждого ТекЭлементФильтра Из Фильтр Цикл + Если ЭтоПолеПредварительногоФильтраОбъекта(ТекЭлементФильтра.Ключ) Тогда + Если Объект.Значение[ТекЭлементФильтра.Ключ] = Неопределено Тогда + Результат = Ложь; + Прервать; + КонецЕсли; + Результат = ОбщегоНазначения.ЗначениеСоответствуетФильтру(Объект.Значение[ТекЭлементФильтра.Ключ], + ТекЭлементФильтра.Значение, + РегистроНезависимо); + КонецЕсли; + Если НЕ Результат Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции // ОбъектСоответствуетФильтру() + +#КонецОбласти // ПредварительнаяФильтрацияОбъектов \ No newline at end of file