Расскажу, как создавать таблицы выбора. Они же — таблицы поиска.
Частично эту тему затрагивал в большой статье про формулы в Ревите.
У меня есть платное видео, в котором подробно показываю, как всё делать на примере разных семейств. Стоимость видео — 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. Он подгрузится и появится в списке таблиц. Если Ревит обнаружит какие-то ошибки, то выдаст предупреждение.
Также в этом окне можно экспортировать выбранную таблицу или удалить её. Большие таблицы на несколько тысяч строк могут загружать не мгновенно, но далее в семействе работать они будут быстро.
После того, как загрузили таблицу, можно получать данные из неё. Для этого есть специальная формула со своим синтаксисом.
Как писать формулу
Когда в семейство подгружена таблица выбора, то с помощью формулы мы будем ссылаться на неё и извлекать данные.
Формула состоит из нескольких блоков, специально разделю их двумя пробелами:
оператор ( ссылка на таблицу , имя столбца в таблице , значение при ошибке , управляющие параметры через запятую )
- оператор — текст 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(Ссылка А, Ссылка Б, Ссылка В, Управляющие параметры)
Ссылка А — тут имя параметра в таблице выбора. Так как формула распространяется на все типоразмеры, то если написать имя таблицы в кавычках, то во всех типоразмерах Ревит будет ссылаться на одну и ту же таблицу, что не всегда нужно. Если же пользоваться ссылками на параметры семейства, то в разных типоразмерах можно указать разные таблицы.
Ссылка Б — здесь так же можно указать имя текстового параметра семейства, а уже в нём написать имя столбца, в котором ищем нужное значение. Аналогично с именем таблицы в этом случае мы сможем в разных типоразмерах ссылаться на разные столбцы таблицы выбора.
Ссылка В — вписываем имя параметра, откуда берём значение, если в таблице ничего не найдём.
Когда мы пишем имя таблицы или имя столбца в кавычках, то это фиксированная форма записи, но если ссылаемся на параметры, то можем более гибко настраивать подбор значений. Нужно это нечасто, но иногда полезно, особенно если создаём вложенные пустышки — общие вложенные семейства, для которых не делаем геометрию, но выводим в спецификацию.
Кавычки
Раньше полагал, что в таблицах поиска нельзя записать текст с кавычкой. Например, обозначение резьбового фитинга в виде: 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"
Аналогичная проблемы с кавычками может возникнуть при экспорте таблицы из семейства на диск. Об этом следующий пункт.
Параметры Да/Нет
Для параметров с типом данных «Да/Нет» нет своего типа данных в таблицах выбора, поэтому «галочку» в таблицу не засунуть.
Однако это легко обойти, если знать, как работают параметры «Да/Нет». Подробнее об этом можете почитать в статье, как писать формулы. Поскольку галочка ставится в тех случаях, когда выражение в формуле принимает значение «да», а снимается — когда «нет», то можно этим пользоваться.
Создаём столбец с числовым типом данных ##number##general. Вписываем в него нули или единицы, смотря что нужно. А потом в семействе в формуле для параметра «Да/Нет» пишем выражение для size_lookup() и приравниванием его к 1.
Например: size_lookup(Таблица, "YN", 0, ADSK_Диаметр условный) = 1.
В этом примере метод size_lookup() вернёт единицу из столбца с заголовком «YN», если в таблице есть диаметр, а если нет, то вернёт ноль. Далее единица или ноль сравниваются с единицей. Если формула вернула 1, то получаем равенство 1 = 1, то есть истина — галочка ставится. Если формула вернула 0, то получаем неравенство 0 = 1, галочка снимается.
Экспорт из семейства
Там же, куда мы загружаем таблицу выбора, есть опция по их экспорту. Тут есть важный нюанс: при экспорте Ревит заменяет любые разделители на запятую, а если есть парные знаки кавычек, то удаляет одну кавычку из двух.
В результате могут появляться ошибки, если просто экспортировать и тут же импортировать таблицы в семейства. Например, если в столбце с наименованием написали Соединение разъемное 20 х 3/4"", то при использовании в семействе наименование будет выглядеть как Соединение разъемное 20 х 3/4". Однако при экспорте Ревит удалит вторую кавычку из таблицы.
В итоге при повторной загрузке такой таблицы, Ревит будет воспринимать кавычку уже как начало текстовых данных, а не знак дюйма. И будет ошибка. Посмотрите пример на скриншоте, верхняя часть — было перед импортом, нижняя — стало после экспорта:
Поэтому всегда проверяйте таблицу после экспорта. Возможно, всё будет в порядке, но в ряде случаев, как в примере выше, будут неприятные последствия.
Проблема существует вплоть до версии 2021.1.7, в более новых версиях не тестировал.
Запомнить:
- Вторым элементом формулы является ссылка на имя столбца в таблице выбора — его пишем без типа данных и единиц измерения. Пишем только DN, а не DN##PIPE_SIZE##MILLIMETERS.
- Третий элемент формулы — значение, которое возвращает формула, если ничего не найдёт в таблице. Это значение должно быть с тем же типом данных, что и параметр, в который пишем формулу. Если параметр числовой, то в ошибку можно записать только число, нельзя в параметр длины записать ошибку в виде «Не найдено». Числа к числам, текст к тексту.
- Управляющие параметры — это перечисление параметров семейства в том же порядке, в каком идут второй и последующие столбцы в таблице выбора. Тип данных параметра семейства и столбца в таблице должны совпадать. Если в таблице выбора у вас идут параметры длины, угла, площади, то и в формуле нужно указывать соответствующие параметры.
Как лучше разобраться в этом
Практиковаться, много практиковаться. Или купить мой видеокурс по разработке семейств, там эти таблицы буду с нуля создавать несколько раз и разжёвывать каждое действие. Ссылка ниже.
Будет полезно посмотреть мой платный видеоурок. Он длится чуть больше часа, за это время подробно разбираю тему, показываю примеры и рассказываю о том, какие бывают ошибки, с чем они связаны и что с ними делать. Стоимость ролика — 500 ₽, длительность — 1 час 12 минут.
Чтобы купить ролик, пишите:
- на почту bimvadim@bk.ru
- в Телеграм @Vadim_Rafi
Если всё поняли из статьи — можете в благодарность за сэкономленное время задонатить мне по форме ниже и рассказать о блоге коллегам.
Видеокурс по семействам трубопроводных фитингов. Подробный 10-часовой курс, в котором научу создавать семейства и поделюсь лайфхаками.
Видеокурс по семействам для вентиляции. Большой курс по созданию оборудования, арматуры, воздухораспределителей и фитингов.
Обновления статей удобно получать в Телеграм-канале «Блог Муратова про Revit MEP». Подписывайтесь и приглашайте коллег. Можно обсудить статью и задать вопросы в специальном чате канала.
Читайте методичку для проектировщиков: полезный материал, в котором последовательно рассказываю, как создавать модель.
Мини-курс по моделированию ОВ и ВК
В специальный плейлист на Ютубе выкладываю свои ролики по работе в Ревите. Этот курс записывал для студентов, разбираю базовые моменты по моделированию.