Найти тему
Блог Вадима Муратова

Revit: таблицы выбора (CSV-таблицы)

Оглавление

Расскажу, как создавать таблицы выбора. Они же — таблицы поиска.

Частично эту тему затрагивал в большой статье про формулы в Ревите.

У меня есть платное видео, в котором подробно показываю, как всё делать на примере разных семейств. Стоимость видео — 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" — это ссылка на имя столбца в таблице выбора, откуда мы будем получать нужные данные.

Выделил жёлтым столбец со значениями L
Выделил жёлтым столбец со значениями 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». Подписывайтесь и приглашайте коллег. Можно обсудить статью и задать вопросы в специальном чате канала.

Читайте методичку для проектировщиков: полезный материал, в котором последовательно рассказываю, как создавать модель.

Мини-курс по моделированию ОВ и ВК

В специальный плейлист на Ютубе выкладываю свои ролики по работе в Ревите. Этот курс записывал для студентов, разбираю базовые моменты по моделированию.