Расскажу, как создавать таблицы выбора. Они же — таблицы поиска.
Частично эту тему затрагивал в большой статье про формулы в Ревите.
У меня есть платное видео, в котором подробно показываю, как всё делать на примере разных семейств. Стоимость видео — 500 ₽
Зачем нужны
Таблицы выбора — это файл формата CSV, который можно загрузить в семейство, чтобы извлекать из него значения параметров.
Наиболее часто они применяются в инженерных семействах, но и в строительных также приносят немало пользы. Например, почти любые семейства фитингов трубопроводов или прокатные материалы с сортаментом по ГОСТ будут содержать таблицы выбора.
Таблицы выбора удобны тем, что зная одно или несколько значений, мы можем получить все остальные. Например, у нас есть стальной отвод. Это изделие по ГОСТ, у него строго определённый сортамент и в рамках одного исполнения всё управляется диаметром и углом отвода.
Соответственно, можно создать такую таблицу выбора, которая будет выдавать нам наименование отвода, его вес и другие характеристики из ГОСТ по выбранному диаметру и углу. Поменяли диаметра или угол — автоматически поменялись наименование, вес и так далее.
То же самое можно написать с формулой IF, однако такая формула будет очень длинной и оттого сложной. Таблицы выбора компактнее, работают быстрее, в них проще управлять данными, чем в формуле с IF.
Помимо основного назначения, есть и второй сценарий их использования. В Ревите мы можем передавать данные только из родительского во вложенное семейство, обратного потока данных нет. Тем не менее в ряде случаев нам нужно управлять родительским в зависимости от того, какие значения принимают параметры во вложенном.
Без скриптов Динамо или плагинов решить эту задачу нельзя, но можно создать таблицу выбора, которая по значению параметра в родительском семействе выдаст информацию о вложенном. Направление потока данных это не изменит, однако так мы получим хотя бы какую-то информацию. Само собой, для этого придётся в родительском продублировать некоторые параметры вложенного и связать их между собой.
Итак, таблицы выбора нужны, чтобы быстро получать все необходимые данные на основе хотя бы одного параметра. Работают они только с загружаемыми семействами.
Как создать
Проще всего таблицы выбора создавать в Экселе. Это и быстрее, и нагляднее, а уже потом сохранить в CSV.
Такая таблица по сути состоит из двух зон: первая строка содержит имена параметров и их типы данных с единицами измерений, все последующие — строки с информацией по конкретным типоразмерам.
По факту это всё тот же каталог типоразмеров, о нём можете прочитать отдельную статью.
Однако в таблицах выбора некоторые типы данных отличаются. В первую очередь это касается числовых типов данных, углов, Да/Нет. Подобные различия появились — по-моему — с 2019 версии программы, для углов — с 2021.
В каталоге типоразмеров тип данных для чисел — ##OTHER##. В таблицах выбора тип данных для чисел — ##NUMBER##GENERAL. Все типы данных можете посмотреть в Гугл-таблице, которую подготовили Сергей Ковылин и Максим Похомов, вам нужна вкладка «Database Identifiers_Revit 2021».
Первая строка всегда состоит из пустой ячейки и ячеек с заполненными параметрами и типами данных с единицами измерения. Пустая ячейка, на скриншоте выше это ячейка А1, — служит для заголовка столбца с именами типоразмеров и указателем знака-разделителя. Остальные ячейки в этой строке кодируют имена параметров и типы данных.
В общем случае запись такая: имя — две решётки — тип данных — две решётки — единицы измерения. Например, запись в ячейке A2 расшифровывается так: параметр с именем DN, с типом данных PIPE_SIZE (размер трубопровода), единицы измерения — миллиметры.
Чтобы получить имена параметров и типы данных с единицами измерения, проще всего экспортировать типоразмеры из семейства, а потом открыть полученный файл или его содержимое в Экселе. Подробнее — в статье про каталоги типоразмеров.
Дальше в строках указываете данные. В первом столбце всегда указывают данные в текстовом виде. Даже если вобьёте числа, Ревит будет видеть эти данные как текст. Поэтому сюда можно вписать наименование, артикул или что-нибудь такое.
До 2019 версии текстовые данные можно было вносить исключительно в первый столбец таблицы выбора. Поэтому приходилось делать по несколько таблиц, если в семейство нужно подгрузить разные текстовые поля. Например, чтобы заполнить наименование, марку и артикул текстовыми данными, приходилось делать три таблицы CSV.
Порядок столбцов критически важен для правильной работы таблицы выбора. Первым всегда идёт столбец с текстом — это как бы имена типоразмеров. Далее все столбцы можно условно поделить на две группы: столбцы с «управляющими параметрами» и столбцы с «данными».
Это моя терминология, не официальная.
- Управляющие параметры — те параметры, по которым Ревит будет искать данные. Эти параметры должны обязательно идти первыми в таблице. Именно на них в дальнейшем мы будем ссылаться в формуле для получения данных и ссылаться будем в том порядке, в каком они указаны в таблице выбора.
- Данные — прочие параметры, которые мы будем получать из таблицы. Они могут идти в любом порядке.
Если геометрия элемента и его наименование зависят от 2 параметров, то управляющими будут два параметра. Если 5 параметров — то пять. При этом для одних данных может быть несколько управляющих параметров, а для каких-то — меньше.
Даже если у вас только один параметр зависит сразу от многих параметров, вам придётся все эти многие параметры выписать в таблицу, начиная со второго столбца, и уже после них указывать всё остальное.
Например, у двери на наименование могут влиять ширина, высота, сторона открывания, наличие или отсутствие стекла — вот четыре управляющих параметра. А площадь проёма зависит только от ширины и высоты — два управляющих параметра. Раз для наименования нужно 4 параметра, то всех их нужно выписать в начало таблицы. Примерно так:
Нет особой разницы, как вы будете называть столбцы с управляющими параметрами. А вот для прочих параметров имена важны, так как их будет нужно указывать в формулах. Можно использовать кириллицу, однако до версии 2021.1 вся кириллица при экспорте таблицы выбора из семейства удаляется, остаются только цифры и латиница.
Поэтому обычно все столбцы называю на латинице. Если нужно экспортировать таблицы выбора из версий до 2021.1, можете воспользоваться плагином, который написал один из членов русскоязычного сообщества.
После заполнения таблицы с данными, их нужно сохранить в формате CSV. Можете экспортировать из Экселя в этот формат, можете придумывать свои способы. Я иду дедовским методом: выделяю все ячейки таблицы → открываю Блокнот → вставляю данные → заменяю длинные пробелы на запятые → сохраняю → меняю расширение с txt на csv.
Важно. До Ревита 2021.1 кодировка таблицы выбора должна быть ANSI. Это особенно важно, если в ней есть текст на кириллице, кодировка UTF-8 выдаст вам иероглифы. Не все символы поддерживаются, например нельзя использовать знак диаметра ø, а знак градуса ° — можно. Чтобы поменять кодировку, пересохраните из блокнота файл CSV и в окне сохранения укажите кодировку.
С Ревита 2021.1 можно использовать кодировку UTF-16 LE, в этой кодировке можно сохранить в том числе знак диаметра ø и кириллицу. Поэтому с этой версии мы можем закладывать знак диаметра в таблицы выбора, и они не будут в семействе заменяться на букву «О», как это было раньше.
После этого таблицу можно загружать в семейство.
Знаки-разделители
В файле CSV можно использовать разные знаки-разделители. По ним Ревит понимает, где какой столбец. Доступны 3 знака: запятая, точка с запятой и символ прямой черты |.
Поскольку знак запятой или точки с запятой может использоваться в наименованиях или других текстовых параметрах, то может возникнуть конфликт. Если мы выбрали запятую как разделитель, то запятая в столбце с наименованиями будет для Ревита не частью текста, а разделителем. В итоге количество заголовков в таблице и столбцов с данными не совпадёт, мы получим сообщение об ошибке.
В этом случае нужно брать текст с запятой в кавычки. Тогда Ревит поймёт, что запятая внутри кавычек является частью текста, а не разделителем. То же самое с остальными знаками.
В принципе, деление через | является более универсальным, так как этот знак редко бывает частью текста. Я использую именно этот знак-разделитель и очень доволен им.
Как загрузить в семейство
Откройте редактор семейств. Зайдите в окно типоразмеров. Справа внизу будет кнопка «Управление таблицами выбора». Нажмите по ней, далее выберите «Импорт» и укажите файл csv. Он подгрузится и появится в списке таблиц. Если Ревит обнаружит какие-то ошибки, то выдаст предупреждение.
Также в этом окне можно экспортировать выбранную таблицу или удалить её. Большие таблицы на несколько тысяч строк могут загружать не мгновенно, но далее в семействе работать они будут быстро.
После того, как загрузили таблицу, можно получать данные из неё. Для этого есть специальная формула со своим синтаксисом.
Ограничения по размеру
Опытным путём установил, что при количестве строк в таблице около 100 000 Ревит можно нормально работать с семейством: в проекте оно достаточно быстро работает и перестраивается, пусть и не мгновенно.
При 200 000 строк семейство начинает тормозить при редактировании: любое выдавливание или опорная плоскость строятся с тормозами. При этом в проекте семейство всё ещё работает, хотя и перестраивается заметно дольше, чем при 100 тысячах строк.
Старайтесь не грузить в семейства таблицы выбора с количеством строк больше 100 тысяч.
Как писать формулу
Когда в семейство подгружена таблица выбора, то с помощью формулы мы будем ссылаться на неё и извлекать данные.
Формула состоит из нескольких блоков, специально разделю их двумя пробелами:
оператор ( ссылка на таблицу , имя столбца в таблице , значение при ошибке , управляющие параметры через запятую )
- оператор — текст size_lookup, по нему Ревит понимает, что будем обращаться к файлу таблицы выбора;
- скобки — всё содержимое под оператором size_lookup заключается в скобки;
- ссылка на таблицу — либо имя параметра с типом данных «Текст», в котором написано имя файла таблицы выбора без расширения, либо имя файла таблицы выбора в кавычках, тоже без расширения, то есть «.csv» писать не надо;
- имя столбца в таблице — либо ссылка на текстовый параметр с именем столбца, либо имя столбца в кавычках. Имя столбца — это та часть заголовка столбца, что идёт до первых двух знаков решётки. Если отмотаете наверх, где даю крупный скриншот с заголовком, имя параметра — жёлтая область, вот этот текст и используется;
- значение при ошибке — если Ревит не нашёл подходящее значение в таблице выбора, то формула всё равно должна что-то выдать. Поэтому здесь мы пишем значение, которое формула вернёт, если в таблице ничего не нашлось. Важно, что значение должно быть с тем же типом данных, что и параметр, нельзя в числовые параметры писать текстовые данные;
- управляющие параметры через запятую — тут перечисляем через запятую все нужные управляющие параметры точно в том же порядке, в каком они идут в таблице выбора. Важно! Здесь нужно писать не имена параметров из таблицы выбора, а имена параметров в семействе.
Поясню ещё раз про управляющие параметры. Управляющие параметры в таблице — это несколько столбцов со второго. Управляющие параметры в семействе — это параметры самого семейства. Когда мы в формуле перечисляем управляющие параметры, то мы пишем имена параметров из семейства, а не из таблицы.
Именно поэтому так важен порядок этих параметров. Ревит будет сопоставлять управляющие параметры семейства с управляющими параметрами из таблицы. Первый управляющие параметр сопоставляется с параметром из второго столбца таблицы, второй — с третьим и так далее.
Рассмотрим пример формулы, выделил её зелёным.
size_lookup(LT, "L", 38 мм, ADSK_Диаметр условный, VG_d1, Угол)
LT — это ссылка на параметр семейства, его выделил на скриншоте жёлтым. В этом параметре текстом записано имя таблицы.
"L" — это ссылка на имя столбца в таблице выбора, откуда мы будем получать нужные данные.
38 мм — это значение, которое вернёт формула, если ничего не найдёт в таблице выбора. Например, если будет указан диаметр или угол вне диапазона таблицы выбора, в этом случае в параметре семейства "L" будет значение 38 мм.
ADSK_Диаметр условный, VG_d1, Угол — управляющие параметры, и это именно параметры семейства, а не имена столбцов. Поскольку в таблице выбора у меня идут друг за другом сначала условный диаметр, потом наружный, а затем угол, то в таком же порядке их и перечисляю.
Давайте посмотрим, как в параметре «L» получилось значение «40». Мы указали в формуле таблицу, сослались на столбец с именем «L». У нас три управляющих параметра. «ADSK_Диаметр условный» имеет значение 15, так как он указан первым, то Ревит ищет это значение во втором столбце таблицы выбора. Находит.
Далее берёт значение из параметра «VG_d1», ищет в третьем столбце таблицы. Находит. Потом берёт значение из параметра «Угол», ищет в таблице. Выделил на скриншоте ниже все три найденные значения. Они находятся в одной строке. Теперь Ревит смотрит, какое значение у столбца «L» в этой же строке — это 40 мм — и возвращает его как результат формулы. Вот так мы получаем 40 мм в параметр из таблицы.
Обратите внимание на формулу в параметре «D» — наружном диаметре.
size_lookup(LT, "D", VG_d1 + 8 мм, ADSK_Диаметр условный)
Здесь почти всё то же самое, но есть два исключения. Первое — в значении для ошибки не фиксированное число, а формула «VG_d1 + 8 мм» — так тоже можно, мы можем генерировать значения на основе других параметров. Можно использовать и более сложные формулы, например условные выражения с IF или даже вкладывать другую формулу size_lookup.
Второе — здесь всего один управляющий параметр, а не три. Тут нет ошибки, потому что наружный диаметр никак не зависит от угла, он зависит только от условного диаметра. Поэтому достаточно обратиться к значению одного параметра, чтобы получить наш искомый.
Можно ссылаться на самый первый столбец. Для этого синтаксис формулы будет таким:
size_lookup(LT, "", "текст ошибки", Управляющие параметры)
Здесь первые кавычки — ссылка на заголовок в таблице выбора. Поскольку он пустой, потому ставим кавычки одна за другой — так кодируется пустой текст. Далее указываем значение, если ничего не нашли, тут можно либо написать текст в кавычках, либо дать ссылку на параметр семейства.
Заметьте, хотя данные и выглядят как числа, Ревит будет воспринимать их текстом, поэтому и в значении для ошибки тоже текст. Обращение к первому столбцу — единственный случай, когда управляющие параметры в таблице выбора идут после искомого.
По сути вся наша формула — это просто набор ссылок на параметры. Можно переделать формулу вот так:
size_lookup(Ссылка А, Ссылка Б, Ссылка В, Управляющие параметры)
Ссылка А — тут имя параметра в таблице выбора. Так как формула распространяется на все типоразмеры, то если написать имя таблицы в кавычках, то во всех типоразмерах Ревит будет ссылаться на одну и ту же таблицу, что не всегда нужно. Если же пользоваться ссылками на параметры семейства, то в разных типоразмерах можно указать разные таблицы.
Ссылка Б — здесь так же можно указать имя текстового параметра семейства, а уже в нём написать имя столбца, в котором ищем нужное значение. Аналогично с именем таблицы в этом случае мы сможем в разных типоразмерах ссылаться на разные столбцы таблицы выбора.
Ссылка В — вписываем имя параметра, откуда берём значение, если в таблице ничего не найдём.
Когда мы пишем имя таблицы или имя столбца в кавычках, то это фиксированная форма записи, но если ссылаемся на параметры, то можем более гибко настраивать подбор значений. Нужно это нечасто, но иногда полезно, особенно если создаём вложенные пустышки — общие вложенные семейства, для которых не делаем геометрию, но выводим в спецификацию.
Параметры Да/Нет
Для параметров с типом данных «Да/Нет» нет своего типа данных в таблицах выбора, поэтому «галочку» в таблицу не засунуть.
Однако это легко обойти, если знать, как работают параметры «Да/Нет». Подробнее об этом можете почитать в статье, как писать формулы. Поскольку галочка ставится в тех случаях, когда выражение в формуле принимает значение «да», а снимается — когда «нет», то можно этим пользоваться.
Создаём столбец с числовым типом данных ##number##general. Вписываем в него нули или единицы, смотря что нужно. А потом в семействе в формуле для параметра «Да/Нет» пишем выражение для size_lookup() и приравниванием его к 1.
Например: size_lookup(Таблица, "YN", 0, ADSK_Диаметр условный) = 1.
В этом примере метод size_lookup() вернёт единицу из столбца с заголовком «YN», если в таблице есть диаметр, а если нет, то вернёт ноль. Далее единица или ноль сравниваются с единицей. Если формула вернула 1, то получаем равенство 1 = 1, то есть истина — галочка ставится. Если формула вернула 0, то получаем неравенство 0 = 1, галочка снимается.
Если вам необходимо использовать параметры «Да/Нет» прямо внутри формулы, то её также нужно «превращать» в число. То есть в самой таблице CSV у вас будет столбец-число, в нём 0 и 1. Пусть в семействе есть параметр «Галочка» с типом «Да/Нет», вам нужно его использовать в формуле. Тогда синтаксис такой: вместо самого параметр «Галочка» вы пишите условие: if(Галочка, 1, 0). Таким образом будет параметр превращать в число.
Кавычки
Раньше полагал, что в таблицах поиска нельзя записать текст с кавычкой. Например, обозначение резьбового фитинга в виде: 3/4"
Если просто так написать подобный текст, то Ревит «съест» кавычку. Поэтому раньше я записывал такое со знаками одинарных кавычек — апострофов. Получалось визуально очень похоже: 3/4''. Шрифт сайта коверкает кавычки, но можете проверить в Ревите сами. Но для машины это разные знаки, и это плохо.
Существует способ, который позволяет записать текст просто с обычной кавычкой. Вот так выглядит форма записи: "3/4"""
Если нужно записать текст с несколькими кавычками, то форма записи такая:
- "1/2""x1/2""" будет выглядеть в Ревите как 1/2"x1/2"
- "1/2""x1/2""x1/2""" будет выглядеть как 1/2"x1/2"x1/2"
Аналогичная проблемы с кавычками может возникнуть при экспорте таблицы из семейства на диск. Об этом следующий пункт.
Экспорт из семейства
Там же, куда мы загружаем таблицу выбора, есть опция по их экспорту. Тут есть важный нюанс: при экспорте Ревит заменяет любые разделители на запятую, а если есть парные знаки кавычек, то удаляет одну кавычку из двух.
В результате могут появляться ошибки, если просто экспортировать и тут же импортировать таблицы в семейства. Например, если в столбце с наименованием написали Соединение разъемное 20 х 3/4"", то при использовании в семействе наименование будет выглядеть как Соединение разъемное 20 х 3/4". Однако при экспорте Ревит удалит вторую кавычку из таблицы.
В итоге при повторной загрузке такой таблицы, Ревит будет воспринимать кавычку уже как начало текстовых данных, а не знак дюйма. И будет ошибка. Посмотрите пример на скриншоте, верхняя часть — было перед импортом, нижняя — стало после экспорта:
Поэтому всегда проверяйте таблицу после экспорта. Возможно, всё будет в порядке, но в ряде случаев, как в примере выше, будут неприятные последствия.
Проблема существует вплоть до версии 2021.1.7, в более новых версиях не тестировал.
Запомнить:
- Вторым элементом формулы является ссылка на имя столбца в таблице выбора — его пишем без типа данных и единиц измерения. Пишем только DN, а не DN##PIPE_SIZE##MILLIMETERS.
- Третий элемент формулы — значение, которое возвращает формула, если ничего не найдёт в таблице. Это значение должно быть с тем же типом данных, что и параметр, в который пишем формулу. Если параметр числовой, то в ошибку можно записать только число, нельзя в параметр длины записать ошибку в виде «Не найдено». Числа к числам, текст к тексту.
- Управляющие параметры — это перечисление параметров семейства в том же порядке, в каком идут второй и последующие столбцы в таблице выбора. Тип данных параметра семейства и столбца в таблице должны совпадать. Если в таблице выбора у вас идут параметры длины, угла, площади, то и в формуле нужно указывать соответствующие параметры.
Как лучше разобраться в этом
Практиковаться, много практиковаться. Или купить мой видеокурс по разработке семейств, там эти таблицы буду с нуля создавать несколько раз и разжёвывать каждое действие. Ссылка ниже.
Будет полезно посмотреть мой платный видеоурок. Он длится чуть больше часа, за это время подробно разбираю тему, показываю примеры и рассказываю о том, какие бывают ошибки, с чем они связаны и что с ними делать..
Если всё поняли из статьи — можете в благодарность за сэкономленное время задонатить по всплывающей форме.
Видеокурс по семействам трубопроводных фитингов. Подробный 10-часовой курс, в котором научу создавать семейства и поделюсь лайфхаками.
Видеокурс по семействам для вентиляции. Большой курс по созданию оборудования, арматуры, воздухораспределителей и фитингов.
Обновления статей удобно получать в Телеграм-канале «Блог Муратова про Revit MEP». Подписывайтесь и приглашайте коллег. Можно обсудить статью и задать вопросы в специальном чате канала.
Мини-курс по моделированию ОВ и ВК
В специальный плейлист на Ютубе выкладываю свои ролики по работе в Ревите. Этот курс записывал для студентов, разбираю базовые моменты по моделированию.