Я уже рассказывал в блоге о работе с фильтрами. Рекомендую ознакомиться с этой статьёй, здесь же разберём более сложные случаи на примере инженерных систем. В цикле статей будем разбирать системы, состоящие из нескольких имён: приточно-вытяжные системы, подачу и обратку отопления, холодную и горячую воду. По аналогии можно распространить на все похожие системы.
Концепция
Можно выделить два подхода. Первый: делаем фильтры, которые скрывают всё, кроме нужных элементов. Как правило, в этом случае это один фильтр с одним или несколькими критериями. Второй подход — делаем несколько фильтров, по одному на каждую систему или тип системы, и скрываем ими ненужное. У обоих подходов свои плюсы и минусы.
У первого плюс — фильтр всего один, добавили, галочку сняли, получили результат. Минус — он не гибкий, его мало где можно повторно применять. Например, сделали фильтр, который оставляет на виде только систему В1. По факту он пригодится только на виде со схемой, на плане или где-то ещё его не применить, так как вряд ли нам нужен план только с одной системой.
У второго плюс — его можно применять на разных видах. Минус — для изоляции одной системы придётся создавать и добавлять на виды много фильтров. Предположим, на плане нужно оставить только системы канализации. В этом случае можно добавить три фильтра: по одному на каждую из систем водоснабжения В1, Т3, Т4. Скрываем их, остаётся только канализация. Но добавлять надо все эти фильтры.
На схеме же, где нужно оставить только В1, мы добавим три фильтра для Т3, Т4 и К1. В итоге работаем с большим количеством фильтром, но повторно применяем их на разных видах. Кроме того, можно создать более «глобальные» фильтры. Например, один фильтр будет скрывать все системы с водой, второй — все с канализацией, третий — с пожаротушением и так далее.
Первый подход удобнее в моделях с большим количеством разноимённых систем, например для проектов с вентиляцией. Второй — для моделей с небольшим количеством типов систем, например для водоснабжения и канализации или отопления.
Посмотрим на работу с разными подходами.
Пример 0. Фильтр без критериев
Сперва разберём вот такой случай. Мы можем создавать фильтры, выбирать в них категории, но не формировать никаких критериев. Казалось бы, такой фильтр не должен работать, так как мы не задаём условия для отбора элементов. Раз непонятно, как выбирать, то ничего выбирать не нужно.
Но это работает наоборот: если не указывать никакие критерии, Ревит будет выбирать все элементы. По факту мы получаем способ за один раз перекрасить или скрыть разные категории, то есть сделать то же самое, что могли бы сделать в окне видимости/графике, о которой в блоге тоже есть статья. Поэтому для скрытия это вряд ли удобно, а вот чтобы не назначать каждой категории настройки видимости — вариант.
Случай 1. Оставляем только одну подсистему
Вот есть приточно-вытяжная система, рядом ещё одна вытяжная. У приточно-вытяжной имена П1 и В1 соответственно, у вытяжной — В11. Нужно оставить только одну вытяжную из приточно-вытяжной, остальное — скрыть. По сути это обычное скрытие одной системы, но есть один момент — вентустановка.
Так как у неё две системы, приточная и вытяжная, мы уже не можем использовать фильтры по параметру «Имя системы» со строгим оператором «не равно», потому что вентустановка скроется, ведь её значение в «Имя системы» не равно «В1», там как минимум «В1,П1». Если же сделать оператор «не содержит», то вентустановка останется, но могут не скрываться некоторые системы. В нашем случае система В11 содержит в имени текст «В1», поэтому оператор «не содержит» не будет её скрывать.
Получаем деление категорий по значениям параметров. У самой сети всё стандартно, в каждом элементе только одно имя системы. А вот у оборудования количество систем иное и это нужно учитывать. Отсюда несколько вариантов решения.
Самые неприятные: руками назначать всем элементам какое-то значение, по которому потом фильтровать, например дописывать к имени системы два нуля, текст «В100» не содержится в «В1100». Или приточной системе писать П1(п), а в вытяжной — В1(в), то есть вводить суффиксы, которые не будут формировать повторений. «В1(в)» не содержится в «В11», поэтому такие системы будут скрываться без проблем.
Но тут проблема — сами наименования, вряд ли хочется дописывать такие суффиксы-дубли. ПВ1(п) и ПВ1(в) тоже не вариант, так как фильтр будет по критерию «не содержит ПВ1», и тут снова проблема с ПВ11 и подобными именами систем.
Следующий вариант. Раз у нас проблемы с оборудованием, то можно сделать два фильтра: один будет скрывать сетевые элементы по обычному «не равно», а второй — поработает с установкой. Ниже настройки таких фильтров и результаты. Для проверки добавил ещё систему с именем П11.
Для оборудования у нас фильтр на два критерия, которые соединены логической суммой — операцией «ИЛИ». Фильтры на скрытие с ИЛИ лично для меня сложнее, чем обычные фильтры с И. Фильтры на скрытие с ИЛИ будут скрываться все объекты, которые удовлетворяют хотя бы одному из критериев фильтра. Чтобы элемент остался, нужно невыполнение сразу всех условий. Давайте пошагово пройдёмся по логике.
Фильтр берёт элементы, смотрит им в параметр «Имя системы». Если в значении не содержится П1 или В1, то фильтр «помечает» элементы, а затем их скрывает.
В нашей приточно-вытяжной установке в «Имя системы» значение «В1,П1,В1,П1». Что получается: П1 в имени системы содержится, В1 тоже содержится. То есть наша установка оба раза не проходит по критериям фильтра. Значит, он её не будет обрабатывать — не скроет на виде.
У вентилятора из системы В11 в имени системы содержится текст В1 и не содержится П1. Вентилятор проходит по одному критерию: не содержит П1. Так как логическая операция суммирования, то выполнение хотя бы одного условия уже помечает элемент для обработки. А раз фильтр на скрытие, то вентилятор В11 скроется.
С вентилятором П11 ситуация аналогичная, но критерии срабатывают наоборот: содержит П1 (не прошло), не содержит В1 (прошло). Раз хотя бы одно условие выполняется, то фильтр берёт элемент в оборот и скрывает его.
Читатель блога Андрей поделился в комментариях своими знаниями по настройке таких фильтров. Оказалось, что можно сделать всё проще, в один фильтр:
Случай 2. Оставляем всю приточно-вытяжную систему
Здесь ситуация аналогична с оборудованием, однако в некоторых случаях можно обойтись всего одним фильтром. В этом нам помогут операторы «не заканчивается».
Вот у нас системы П1 и В1. Их надо оставить. Системы П2, В2, П11, В11 нужно скрыть. Если в условии такой критерий: значение в «Имя системы» не заканчивается на «П1», то получается, что в сети П1 все элементы заканчиваются на «П1», значит под действие фильтра не попадают. Элементы из П11 попадают под действие фильтра, так как в конце значения «П11» у нас идут два символа «11», а не «П1».
В то же время под этот фильтр попадают элементы из В1, они ведь тоже не заканчиваются на П1. Поэтому нужно добавить второй такой же критерий, но уже для В1. В итоге получаем такие настройки:
Пройдёмся по логике. Фильтр берёт все элементы, смотрит им в «Имя системы». В фильтре два условия и они должны выполняться одновременно. Если хоть одно условие не выполняется, то фильтр пропускает такие элементы из обработки.
Элементы из системы П1 заканчиваются на «П1», поэтому они не проходят по критериям фильтра. Элементы из системы В1 заканчиваются на «В1», поэтому они тоже не проходят. У приточно-вытяжной установки в имени системы тоже на конце есть или «П1», или «В1». Поэтому она исключается из обработки фильтром, то есть не скрывается.
И вот тут надо быть осторожным. Имя системы у оборудования должно быть таким, чтобы оканчиваться хотя бы на какое-то одно имя подключённых вентсистем. Если у установки будет нагреватель или охладитель и вы подключите его в этом же проекте к водяным сетям, то на конце может оказаться имя водяных, а не вентиляционных систем. В этом случае фильтр обработает установку и скроет её.
Но тут можно сделать второй фильтр, который будет работать именно с оборудованием, так что проблема решаемая. Вот результат работы фильтра:
В следующем материале будем разбирать работу с жидкостными системами. Подпишитесь на Телеграм-канал блога, чтобы не пропустить уведомление о выходе новой статьи ⬇️
В оборудовании перечисление систем идет через запятую и фильтровать можно по
Не равно "В1"
И
не содержит "В1,"
И
Не заканчивается ",В1"
Да, тоже вариант. Только я бы делал «не содержит ",В1"». Оно же и не в конце может идти.
Под не содержит ",В1" будет также попадать "П11,В11", поэтому и должно проверяться именно окончание строки для значения с запятой перед именем системы.
Согласен. Но опять же, имя системы может и не оканчиваться на ",В1".
Есть всего три варианта параметра имя системы
когда система у экземпляра только одна - проверка на равенство
не равно "В1"
когда две и более и проверяемая система стоит в начале или в середине и запятая ограничивает ее индекс (П1,В1,П1)-
не содержит "В1,"
проверяемая система стоит в конце ,а запятая не ограничивает ее индекс и стоит в конце-
не оканчивается ",В1"
(хотя возможно вместо первой проверки на равенство достаточно будет отсеивать по не оканчивается "В1")
Итого - фильтр который будет скрывать все элементы систем кроме В1 в том числе и приточно-вытяжную установку с о значением имени системы "П1, В1" или "В1, П1" будет выглядеть так:
Имя системы
Не содержит "В1,"
Не заканчивается "В1"
Да, проверил, так тоже работает. Спасибо!