Расскажу про формулы, типы данных и некоторые нюансы работы с ними. Во всём Ревите одинаковый синтаксис формул, то есть то, как их нужно писать: что в семействах, что в расчётных полях спецификации.

Если не нравятся мои статьи и кто-то силой заставляет вас читать их, то разорвите отношения с этим абьюзером и идите почитайте справку про формулы на сайте Автодеска. Там всё сухо, строго и не будет полезных плюшек и примеров.

Типы данных

Прежде, чем говорить о формулах, важно разобраться с типами данных. Когда вы создаёте любой параметр, то указываете его тип данных. Типов очень много, иногда они меняются при смене версии Ревита, что вызывает проблемы, но основные типы данных просты и понятны: число, целое, текст, длина, площадь, объём, угол и так далее.

Типы данных делятся на несколько категорий. В 2021 версии добавилась категория «Инфраструктура», до этого её не было. По сути это дополнительная группировка типов данных по дисциплинам.

Категории типов данных
Категории типов данных

После выбора нужной категории будет доступен ещё один выпадающий список, где выбирается сам тип данных. Со временем вы запомните, где что находится, но в целом всё логично: в общем — общие для всех параметры, инженерка — в инженерных категориях, для КР — своя категория.

Это список типов в категории «Общие» в версии до 2021
Это список типов в категории «Общие» в версии до 2021
Это список типов в 2021 версии. Лучше бы что-нибудь важное сделали
Это список типов в 2021 версии. Лучше бы что-нибудь важное сделали

Некоторые типы данных могут называться одинаково, например «Давление» есть и в категории «Трубопроводы», и в «ОВК». Это всё равно разные типы данных, пусть даже и единицы измерения одинаковые. То, что мы видим, — просто названия для человека, внутри программы у этих параметров свои названия, они отличаются.

Тип данных нельзя изменить после создания параметра. При этом есть строгие различия: «Число» — это любые дробные числа, «Целое» — только целые, а «Длина» хоть и выглядит как число, по факту им не является. Если создадите числовой параметр и параметр длины, то их нельзя просто взять и приравнять — нужно будет либо сократить либо домножить на единицы.

Мы можем приравнять друг к другу числовое и целочисленные параметры, но тогда формат чисел будет меняться. Например, если взять дробное число 7.343 и приравнять параметр с ним в целочисленный параметр, то значение автоматически округлится и запишется как целое число 7.

Если попытаться в параметр с типом данных «Число» приравнять параметр с типом данных «Длина», то получим окно с ошибкой «Несовместимые единицы».

Приравнял Длину и Дробное число, получил ошибку
Приравнял Длину и Дробное число, получил ошибку
Сократил единицы длины (поделил на 1 мм) и всё стало работать нормально
Сократил единицы длины (поделил на 1 мм) и всё стало работать нормально

Это важный аспект, который регулярно вылезает в формулах. Несмотря на такие неудобства, есть и плюсы. Ревит не только выдаёт ошибки, но и понимает, как меняются типы данных. Если перемножить две длины, то получим площадь. Соответственно, если брать два параметра с типом данных «Длина» и перемножать их в третьем параметре, то у него должен быть тип данных «Площадь».

Или ещё лучше: если есть параметр с типом данных «Воздушный поток» (расход воздуха) и параметр с типом данных «Площадь» (живое сечение воздухораспределителя), то можно поделить их в третьем параметре с типом данных «Скорость» и получим скорость в живом сечении.

При этом необязательно вводить дополнительные коэффициенты, Ревит поймёт, что это скорость, независимо от того, в каких единицах в формулу приходят расход и площадь. Литры в секунду или кубометры в час, квадратные метры или миллиметры, результат всё равно посчитается и округлится в метрах в секунду.

Однако в практике вы гораздо чаще будете сталкиваться с ограничениями, а не удобствами, потому что на первые обращаете больше внимания. Хороший эволюционный механизм, который помог предкам выжить, а вам начать работу в Ревите.

Единицы измерения

Один и тот же тип данных можно измерять по-разному. Длина может быть в метрах или миллиметрах, расход — в литрах в секунду или кубометрах в час, несущая способность — в килограммах силы на квадратный метр или в мегапаскалях.

Единицы измерения в редакторе семейств и в проекте могут отличаться, но они никак не влияют друг на друга. Если в семействе единицы измерения длины в метрах, а в проекте — в миллиметрах, то ничего страшного. В проекте единицы из семейства просто пересчитаются. Поэтому настраивайте единицы в редакторе так, как вам удобно для формул.

Сделать это можно на вкладке «Управление» в команде «Единицы проекта».

Единицы измерения тоже делятся на категории.
Единицы измерения тоже делятся на категории.

В окне можно выбрать единицы, настроить округление и обозначение. Всё, как в проекте.

Опасные единицы измерения. Не советую пользоваться единицами расхода «литры в минуту» и «галлоны в минуту». Как только попытаетесь поменять расход, Ревит выдаст ошибку:

Непонятна природа ошибки, скорее всего она возникает только в русской версии программы
Непонятна природа ошибки, скорее всего она возникает только в русской версии программы

Подобные единицы могут использоваться в семействах для канализации или в скачанных зарубежных семействах. Если нужны литры в минуту, то лучше добавить числовой параметр, а в других формулах использовать коэффициенты для перевода.

Если знаете ещё «опасные» единицы, пишите в комментарии.

Перейдём к формулам. Сгруппирую их по блокам, сначала покажу форму записи — синтаксис, — и приведу примеры из практики.

Арифметика

Все базовые операции доступны и вполне понятны. Не забывайте про типы данных. В примере ниже взял два параметра с типом «Длина» и преобразовал через формулы.

Арифметические формулы
Арифметические формулы

Важно! В Ревите нельзя складывать строки. Хотя такое действие и существует в программировании, но в редактор семейств его не внесли. Это очень усложняет работу с наименованиями и печалит всех начинающих.

Когда мы делим два параметра с одинаковым типом данных, то единицы сокращаются и получаем число. Мы можем брать числа и добавлять к ним любые единицы измерения: достаточно домножить на единицу с нужным типом данных.

Домножил число на 1 мм — получил длину
Домножил число на 1 мм — получил длину

В русской версии программы не работает натуральный логарифм. Чтобы обойти ограничение, используйте метод из другой моей статьи.

Чтобы извлечь кубический корень или любой другой неквадратный корень, можете пользоваться возведением в дробную степень: A ^ (1/3).

Пример

Сокращение и добавление единиц выручает, когда работаем с коэффициентами, особенно безразмерными. Например, нужно вычислить потери давления через Kvs клапана. Kvs — это расход при давлении в 1 бар, то есть единицы (м³/ч)/√Па. В результате, если брать расход через клапан, делить на Kvs и возводить в квадрат, то получатся Паскали.

Но в Ревите нет таких единиц, поэтому просто поделить и возвести в квадрат не получится. Оптимально будет сделать вот такую формулу:

Формула для расчёта потерь давления. Просто домножил на нужную единицу
Формула для расчёта потерь давления. Просто домножил на нужную единицу

Перед этим поменял единицы измерения расхода на кубометры в час, а давление — в бары. Благодаря этому формула становится сильно короче. Если же поменять единицы измерения, то Ревит сам подставит коэффициенты для перевода и пересчитает значения.

Ревит всё пересчитал
Ревит всё пересчитал

Если добавить параметр «Kvs» с типом данных «Число», то придётся добавлять больше коэффициентов перевода, что менее удобно.

Приходится числовой параметр превращать в расход
Приходится числовой параметр превращать в расход

Заранее продумывайте, какие те или иные типы данных скажутся на формулах, ведь изменить единицы после создания уже не получится. Придётся удалять параметр и создавать заново с правильным типом.

Числа и текст

В формулах можно использовать число Пи, экспоненту, модуль числа, а также задавать параметру неизменяемое число. В справке, которую привёл в начале статьи, есть ошибка: написано, что exp(x) возводит число 10 в степень x. Это не так, команда работает с числом Е и возводит в степень именно его.

Числовые формулы
Числовые формулы

Запись формулы в виде exp(n) означает возведение числа Е в степень n. Если в скобках указать 1, то получите просто число Е. С числом Пи немного иначе, нужно написать пустые скобки и программа поймёт, что это не имя параметра, а математическая константа.

В формуле для модуля числа можно использовать вложенные формулы. Это общая особенность любых формул. Например, можно написать abs(A – B), где A и B — параметры, и, если результат будет отрицательный, то Ревит запишет модуль, то есть положительное значение.

Если вы пишите конкретное число в формулу, то блокируете параметр. Пользователь в проекте не сможет изменить это значение, оно всегда будет равно конкретному числу. Можно писать арифметические выражения, их результат тоже число, поэтому будет блокировать параметр. Целые по-прежнему будут округлять результаты до целых, даже если результат дробный.

Важно! Когда вы пишите формулу с числами, вы блокируете параметр во всех типоразмерах семейства. Если у вас есть «Типоразмер 1» и в нём числовой параметр «А», который приравняли к 10, то и в «Типоразмер 2» значение параметра «А» тоже будет равно 10. Если измените в одном типоразмере число в формуле, то оно изменится во всех типоразмерах сразу.

Также блокировать параметры можно текстовыми значениями. Для этого в поле формулы нужно написать текст в кавычках. Если кавычка — часть вашего текста, а не ограничитель текстовой формулы, то нужно перед кавычкой поставить знак обратной косой черты «».

Текст тоже блокирует параметр, его нельзя будет изменить в проекте
Текст тоже блокирует параметр, его нельзя будет изменить в проекте

Если написать текст в двойных кавычках ""текст в двойных кавычках"", то Ревит выдаст ошибку:

Ошибка двойных кавычек
Ошибка двойных кавычек

Блокировать параметры текстом можно по разным причинам, самая очевидная — запрет на редактирование в проекте. Но также это можно делать из соображений единообразия. Наверное, больше половины проектировщиков и БИМ-менеджеров пишет «шт» вместо «шт.», «м.» вместо «м» и самое ужасное — «длинна» вместо «длина». С безграмотностью нужно бороться.

В русской типографике не используются прямые кавычки — "текст в прямых кавычках". Это знак дюйма, в русском языке используют кавычки-ёлочки — «текст в кавычках-ёлочках» и реже кавычки-лапки — „текст в кавычках-лапках“. Правильные кавычки можно легко ставить с помощью специальной клавиатурной раскладки Ильи Бирмана.

Про сокращения можно прочитать в справочнике Мильчина.

Если нужно, чтобы значения в формулах менялись в зависимости от типоразмера семейства, то лучше писать в формулы не прямые значения, а значения из параметров типа.

Раз параметры могут меняться в типоразмерах, то и значения формул тоже будут меняться
Раз параметры могут меняться в типоразмерах, то и значения формул тоже будут меняться

Старайтесь не использовать имена параметров с дефисом и имена, которые совпадают с единицами измерения. В первую очередь это касается типов данных, в которых используются числа. Длина, площадь, напряжение, дробное — речь про них и подобные параметры.

Знак дефиса Ревит воспринимает как минус, а имена, совпадающие с единицами измерения, как единицы измерения, а не переменные. Из самых очевидных примеров — русская буква «В». Она совпадает с единицами измерения напряжения — Вольтами. Из-за этого Ревит не даст создать параметр «В», но другие позволит, например на «Па» ругаться не будет.

Если дефис всё же нужен, тогда в формулах имена таких параметров нужно брать в квадратные скобки. В этом случае Ревит поймёт, что это всё имя параметра, а не арифметическое выражение.

Стоит избегать таких имён параметров
Стоит избегать таких имён параметров

Идём дальше.

Тригонометрия

Всё по классике: синусы, косинусы, тангенсы и их арк-вариации. Для угла есть свой тип данных, помните об этом. Форма записи тангенса не совсем привычна — tan, а не tg. Арк-вариации пишутся как a+вариация. Ниже всё видно.

Примеры формул с тригонометрией. Переменная А = 100, Неизменяемое число = 6
Примеры формул с тригонометрией. Переменная А = 100, Неизменяемое число = 6

Котангенс обидели, оператор под него не выделили, так что делите 1 на тангенс.

Формулы с синусами и косинусами выручают, когда нужно работать с треугольниками и окружностями. Например, расставить болты и гайки у фланца. Круговой массив работает неудобно, а вот через синус и косинус вычислить положения можно точно и гибко.

Пример использования тригонометрических формул
Пример использования тригонометрических формул

Округления

Есть три оператора для округления:

  1. round — округление до целого по обычным правилам округления;
  2. roundup — округление до ближайшего большего целого, или округление вверх;
  3. rounddown — округление до ближайшего меньшего целого, или округление вниз.
Примеры округления числа
Примеры округления числа

Важно! Округление работает только с числами. Если вам нужно округлить длину или ещё что-то, то нужно внутри формулы в скобках сократить единицы измерения, а потом домножить на них за пределами формулы, чтобы соблюсти тип данных. Например, вот округление длины:

round(Длина / 1 мм) * 1 мм

Округление работает только до целых, но что делать, если нужно округлить числа до нескольких знаков после запятой? Здесь помогут несложные арифметические преобразования, смотрите примеры на скриншоте ниже.

Округление до заданного количества знаков после запятой
Округление до заданного количества знаков после запятой

Учитывайте эту особенность в работе Ревита и Динамо.

Понравилась статья?

Подпишитесь на мой канал в Телеграме «БЛОГ МУРАТОВА ПРО REVIT MEP». В нём выкладываю ссылки на новые статьи и делюсь полезной информацией. В специальном чате можно задать вопросы по Ревиту и пообщаться с коллегами.

Вот такие новости выкладываю на канале один-два раза в неделю
Вот такие новости выкладываю на канале один-два раза в неделю

Логические и булевы значения

В формулах можно использовать логические выражения. Часто они используются в условиях, о которых будет ниже.

Логические операторы — and, or, not.

  • And — одновремённость выполнения всех перечисленных условий.
  • Or — выполнение хотя бы одного условия из перечисленных.
  • Not — отрицание, обратное значение параметра.

Булевы выражения — истина/ложь, или true/false, представлены в виде отдельного типа данных «Да/нет». Выглядят такие параметры как галочка включено/выключено.

Галочка стоит — Да, не стоит — Нет
Галочка стоит — Да, не стоит — Нет

С помощью логических операторов можно комбинировать разные булевы выражения.

Например, нужно менять видимость элементов: либо видно один, либо другой. Создаём два параметра «Да/нет»: один для видимости первого элемента, второй параметр — для второго. Управлять видимостью можно с помощью только одного параметра: если у первого параметра стоит галочка, то у второго выключена, если у первого выключена, то у второго автоматически появляется.

Один параметр управляет сразу двумя
Один параметр управляет сразу двумя

Бывает более сложная задача — когда нужно менять три галочки. Не надо выдумывать всякие сложные формулы: когда вариантов больше двух, используйте выпадающие списки, про них есть отдельная статья в блоге. Это удобнее с точки зрения интерфейса.

Ниже пример того, как можно работать с оператором AND.

Как работает оператор AND
Как работает оператор AND

Оператор OR более снисходительный, он включит галочку, если хотя бы у одного параметра будет значение «ДА».

Как работает оператор OR
Как работает оператор OR

Эти операторы мы затронем и в следующей подтеме.

Условные выражения

В Ревите можно использовать условие ЕСЛИ, как в Экселе. Синтаксис, в принципе, почти одинаковый.

Условное выражение в Экселе
Условное выражение в Экселе

В Ревите формула для условного выражения выглядит так:

if(«Условие», «Значение, если условие выполняется», «Значение, если не выполняется»)

Условием могут выступать:

  • сравнения параметров (больше, меньше, равно);
  • параметры с типом данных «Да/нет», Да — условие выполняется, Нет — не выполняется;
  • параметры с логическими операторами.

Значениями могут быть числа, текст, другие параметры и другие условные выражения.

Сравнения параметров

Несколько примеров.

Если А больше В, то пишем А, если нет, то В
Если А больше В, то пишем А, если нет, то В
Если разница В и А отрицательна, то пишем ноль, в остальных случаях пишем разницу — то есть вставляем формулу внутрь условной формулы
Если разница В и А отрицательна, то пишем ноль, в остальных случаях пишем разницу — то есть вставляем формулу внутрь условной формулы
Пример условного выражения в текстовом параметре
Пример условного выражения в текстовом параметре

Результатом условного выражения всегда должно быть значение с единицами измерения параметра, в который пишем формулу. Если у параметра тип данных «Число» и вы пишите формулу if(A > B, A, "не учитывать"), то Ревит выдаст вам ошибку «Несовместимые единицы». Потому что при невыполнении условия A > B вы пытаетесь в числовой параметр засунуть текст.

Также имейте в виду, что нельзя сравнивать текстовые параметры. В этом случае Ревит выдаст ошибку «Неверное использование логических выражений». Ревит не умеет сравнивать текстовые параметры, хотя в программировании это стандартная задача.

Сравнить два текстовых параметры не получится
Сравнить два текстовых параметры не получится

Поэтому обычно делают сравнение двух числовых параметров, а в результирующие значения выводят текстовые параметры.

Сравниваю два параметра с типом данных длина, на результат подаю текстовые параметры, сам параметр с текстом — тоже текстовый, соответствие единиц сохраняется
Сравниваю два параметра с типом данных длина, на результат подаю текстовые параметры, сам параметр с текстом — тоже текстовый, соответствие единиц сохраняется

Параметры «Да/нет»

В качество условия может быть значения параметра с типом данных «Да/нет». Если галочка есть — условие выполняется. Если нет — не выполняется. В этом случае условие записывается просто как имя параметра.

Пока галочки нет, условие не выполняется и формула возвращает значение 0
Пока галочки нет, условие не выполняется и формула возвращает значение 0

По сути предыдущий метод со сравнением тоже возвращал значение «Да/нет», но непрямым путём для пользователя. А тут мы непосредственно говорим «да» или «нет».

Также в формулы для параметров типа «Да/нет» можно вписывать сравнения «больше», «меньше», «равно» и их результатом будут галочки.

Если значениях двух параметров равны, тогда галочка появится, иначе — нет
Если значениях двух параметров равны, тогда галочка появится, иначе — нет

Дальше будет про логические выражения, их тоже можно использовать, чтобы получать галочки в параметрах.

Логические выражения

В качестве условия можно использовать выражения AND, OR, NOT. Сами по себе они ничего не могут, но в сцепке с параметрами дают классные возможности.

Например, среди операторов сравнения нет «больше или равно», «меньше или равно» и «не равно». Но иногда пользоваться ими удобнее и тут выручают логические операции.

Пример использования логического оператор not в условии
Пример использования логического оператор not в условии

В примере выше с помощью NOT мы получили оператор «меньше или равно» и сделали это отрицанием оператора «больше». Не больше — значит или меньше, или равно.

Сравните синтаксис с буквальной записью «меньше или равно»:
if(or(A < B, A = B), A, B).

Тут используется оператор OR, но с ним запись длиннее — проще ошибиться.

Ещё пример использования:

Условное выражение с оператором AND
Условное выражение с оператором AND

В данном случае пока у обоих параметров не будет галочек, Ревит не запишет в параметр «Длина» значение 100.

Схожим методом можно пользоваться для вывода предупреждений в семействах. Например, есть элемент, у которого длина должна быть в диапазоне от 500 до 2000 мм. Мы можем выводить предупреждения, если длина неверная.

Формула для вывода предупреждений
Формула для вывода предупреждений

Есть два параметра с галочками и параметр с длиной. Первый параметр «Выводить предупреждения» разрешает либо запрещает показывать предупреждения. Галочка есть — предупреждения будут выводиться. Нет галочки — не будут, даже если ошибка есть. Этот сценарий на скриншоте выше и показал.

Вторая галочка управляет видимостью предупреждения. Обычно это текст модели, на видимость которого повесили параметр «Да/нет». И предупреждения выводятся только при совпадении ряда условий: предупреждения разрешено выводить (первая галочка) и есть нарушение в геометрии, о котором нужно известить (длине вне диапазона).

Поэтому тут использую сочетание логических выражений. AND заставляет соблюдать два условия: разрешение на вывод предупреждений и ошибка длины. А OR перебирает возможные ошибки длины: если длина меньше или больше указанных чисел, то в обоих случаях это ошибка.

Также можно делать вложенные условия. Схематично это выглядит так:

if(Условие 1, А, Б), где А и Б могут быть другими условиями. Например, нужно сформировать наименование элемента по диаметру, пусть это будет полиэтиленовый отвод. Есть три диаметра: 16, 20 и 25. Наименование через формулу будет выглядеть так:

if(Диаметр = 16, "Отвод полиэтиленовый ø16", if(Диаметр = 20, "Отвод полиэтиленовый ø20, "Отвод полиэтиленовый ø25")).

Здесь вместо значения при невыполнении условия подставлена новая формула с условием. Всю формулу можно прочитать как алгоритм:

  1. Берём отвод, смотрим диаметр;
  2. Если он равен 16, то пишем в параметр текст «Отвод полиэтиленовый ø16»;
  3. Если диаметр не равен 16, то проверяем, равен ли он 20;
  4. Если да, то пишем «Отвод полиэтиленовый ø20»;
  5. Во всех остальных случаях, независимо от диаметра, пишем «Отвод полиэтиленовый ø25».

Минус формулы в том, что если у отвода диаметр 32, то в наименовании всё равно будет 25. Если мы предусмотрели формулами так, чтобы это было невозможно, то ничего страшного, такой ситуации просто не будет. Но если нужно предупредить пользователя, то формулу можно чуть удлинить на одно условие:

if(Диаметр = 16, "Отвод полиэтиленовый ø16", if(Диаметр = 20, "Отвод полиэтиленовый ø20, if(Диаметр = 25, "Отвод полиэтиленовый ø25", "Отвод не найден")))

Теперь, если у отвода окажется диаметр вне диапазона 16, 20, 25, мы получим текст с предупреждением в наименовании.

Для подобных формул есть простое правило: сколько условий IF в формуле, столько скобок в конце. Однако не спутайте такую формулу с формулой вида:

IF(Условие 1, IF(Условие 2, ДА2, НЕТ2), IF(Условие 3, ДА3, НЕТ3)).

Тут три оператора IF, но в конце только две скобки, потому что первая скобка — конец условного выражения, которое мы пишем, если Условие 1 не выполнилось, а вторая — закрывающая скобка для всей формулы. Выделил их цветом, чтобы было понятно. Условие 2 целиком находится внутри выражения, которое мы пишем при выполнении Условия 1, поэтому на количество скобок в конце не влияет.

Формулы с условиями используются достаточно часто, поэтому потренируйтесь и разберитесь с ними.

Формулы для поиска по таблицам

В семействах можно пользоваться таблицами поиска. Ещё они называются таблицы выбора или лукап-таблицы. В общем, они нужны, чтобы забирать значения из CSV-таблиц, которые подгружаются в семейства.

У менять есть отдельное видео про то, как создавать такие таблицы и писать формулы под них. Видео платное, но цена символическая — 500 ₽. Никакая статья не сравнится с тем, как я, захлёбываясь слюной, упоительно вещаю про таблицы на протяжении двух с лишним часов.

Синтаксис самой формулы схематично выглядит так:

size_lookup(LT, CN, NF, RP1, RP2, RP3, ..., RPn), где

  • size_lookup — оператор, который говорит Ревиту, что ща буит мясо это формула для обращения к csv-таблице;
  • LT — сюда нужно вписать или имя csv-таблицы в кавычках, или имя параметра, в который вы вписали имя таблицы. Расширение указывать в обоих случаях не надо.
  • CN — имя столбца в csv-файле, в котором содержится искомое значение. В имени не нужно указывать тип данных и единицы измерения, только имя. Про кодировку типа данных и единиц будет в следующей подчасти.
  • NF — значение, которое Ревит подставит в параметр, если не найдёт совпадений в таблице поиска. Помните, чтобы здесь должны быть подходящие единицы, например нельзя в числовой параметр засунуть текст.
  • RP1, RP2, RP3, ..., RPn — имена управляющих параметров из семейства. Их может быть несколько, поэтому они перечисляются через запятую и обязательно в том же порядке, в каком соответствующие им значения идут в CSV-файле.

Пример

Нужно сформировать наименование тройника.

Входные данные:

  • Файл CSV называется на диске «Тройник_Наименование.csv»;
  • В файле CSV наименование находится в столбце с именем TEE_NAME##OTHER##.
  • Если подходящее значение не найдено, в параметр с наименованием нужно написать «Сорян, дядя, не получилось».
  • На наименование тройника влияет каждая точка подключения, то есть все три диаметра важны. Имена параметров семейства, содержащие значения диаметров, называются DN1, DN2 и DN3.

При таких входных формула будет выглядеть так:

size_lookup("Тройник_Наименование", "TEE_NAME", "Сорян, дядя, не получилось", DN1, DN2, DN3).

Ещё раз обращу внимание:

  1. Если пишите название csv-файла, то не указывайте расширение «.csv»;
  2. У имени столбца не пишите типа данных (в примере отбрасываю решётки и OTHER);
  3. Текст ошибки пишу в кавычках, потому что это текст в формуле;
  4. Диаметры перечисляю по-порядку и это имена параметра в семействе, а не имена столбцов в csv-таблице, они не обязательно должны совпадать.

Алгоритм тут такой: Ревит залезет в таблицу CSV, найдёт столбец с именем TEE_NAME — тут он будет искать значение для наименования. Далее он смотрит на параметры в семействе и их значения. Берёт значение из DN1 и ищет его во втором столбце CSV-таблицы. Если нашёл, то берёт значение DN2 и ищет в третьем столбце, потом то же с DN3. Если нашёл все три значения, то получаем совпадение — из ячейки напротив в столбце TEE_NAME забирает текст и вписывает в параметр.

Если совпадений по трём диаметрам не получится, то формула вернёт текст «Сорян, дядя, не получилось».

Если вкратце, то работает так. Нужны подробности — покупайте большое и понятное видео, для этого пишите в телеграм @Vadim_Rafi или на почту bimvadim@bk.ru. Все, кто купил, остались довольны.

Типы данных в каталогах типоразмеров и таблицах поиска

Поскольку у параметров есть типы данных и единицы измерения, то это где-то можно увидеть. Чаще всего с ними вы сталкиваетесь, когда работаете с каталогами типоразмеров и таблицами поиска. Про каталоги типоразмеров есть отдельная классная статья, почитайте.

Если экспортировать типоразмеры из семейства, то получите TXT-файл, в первой строке которого будут перечислены имена параметров, их тип данных и единицы измерения. Для этого в семействе нажмите «Файл» → «Экспорт» → «Типоразмеры в семействе».

Экспорт типоразмеров из семейства
Экспорт типоразмеров из семейства
Вот так выглядит содержимое TXT-файла
Вот так выглядит содержимое TXT-файла
А вот так пользователь видит параметры в Ревите
А вот так пользователь видит параметры в Ревите

В Экселе данные из TXT-файла выглядят более понятно

Если преобразовать запятые в разделители столбцов, то выглядит яснее
Если преобразовать запятые в разделители столбцов, то выглядит яснее

Давайте разберём несколько примеров. Форма записи в общем случае такая: Имя параметра_две решётки_Тип данных_две решётки_Единицы.

Вот для примера параметр «Угол». Здесь имя — «Угол», тип данных — ROTATION_ANGLE, единицы измерения — DEGREES. Это Ревит 2021, до него было иначе: ##ANGLE##DECIMAL DEGREES.

Другой пример — потери давления воздуха и жидкости. Вроде бы для нас одно и то же — Паскали, но для Ревита это два разных типа данных. Для воздуха — HVAC_PRESSURE, а для жидкости — PIPING_PRESSURE. Поэтому нужно внимательно обходится с данными.

Самый популярный набор типов данных: текст, длина и дробное число. Для длины тип данных — LENGTH, единицы обычно — MILLIMETERS. Для текста и чисел, что целых, что дробных, тип данных один — OTHER.

Важно! Для чисел есть свой тип данных и он используется в CSV-таблицах поиска. Тип данных — ##NUMBER##GENERAL.

Именно его нужно использовать для целых и дробных чисел в таблицах поиска. В каталогах типоразмеров — файлах TXT — нужно использовать только OTHER. Такое вот несоответствие.

Если вы будете грузить в семейство таблицу, в которой будут неправильные типы данных, то Ревит выдаст две ошибки (гружу таблицу TXT, в которой неправильные тип данных и единицы измерения у углового параметра).

Первая ошибка про тип данных
Первая ошибка про тип данных
Вторая ошибка
Вторая ошибка

А если загрузить таблицу CSV с ошибкой в параметрах, то вот такую:

Ругается на таблицу CSV с неправильными данными
Ругается на таблицу CSV с неправильными данными

Поэтому за параметрами нужно следить. Единицы измерения менее важны: если в таблице они отличаются от того, что есть в семействе, то значения просто пересчитаются на единицы семейства.

Две самые частые ошибки:

  1. Вы грузите таблицу CSV, в которой есть числовые параметры с типом данных ##OTHER## вместо ##NUMBER##GENERAL.
  2. Вы пытаетесь засунуть текстовое значение в числовой параметр.

Неважно, как вы напишите тип данных и единицы — заглавными или строчными, Ревит поймёт. Что other, что OTHER — одно и то же.

Разное про формулы

♦ Если меняете имя параметра, то оно автоматически меняется во всех формулах. Даже если добавите дефис в название (не делайте так), то квадратные скобки появятся сами.

♦ Если удаляете параметр, который присутствует в формуле, то удалится и параметр, и формула. При этом Ревит ничего не скажет, просто удалит. Будьте внимательны.

♦ При работе с температурой надо учитывать пару моментов.

  1. Для Ревита просто температура и разница температур — разные типы данных. Имейте это в виду, когда создаёте параметр для температурного напора.
  2. Если используете для ввода температуры параметр с типом данных «Число», то не получится просто домножить на 1 °С, чтобы перевести данные в температуру. Формула более сложная:
    T (°C) = Температура_Число / 1 1/°C + 0 °C. Здесь 1/°C — особая единица измерения, градус в минус первой степени.
  3. Если нужно температуру перевести в число, то формула для сокращения единиц ещё менее предсказуемая:
    Температура_Число = (Температура_Градусы - 0 °C) / (1 K - 0 K).
    Кельвины Ревит сам переведёт в градусы Цельсия, просто с Кельвинами запись короче.

Ну и само собой, для категории данных «Трубопроводы» своя температура, для «ОВК» — своя.

Работа с температурой
Работа с температурой

♦ Если приравнять один параметр к другому и нажать «Применить», а потом удалить формулу, то значение, которое было в формуле, останется во всех типоразмерах.

Например, у вас есть параметр «Изготовитель», он уже правильно заполнен во всех типоразмерах. Вам нужно перенести значение в параметр «ADSK_Завод-изготовитель». Напишите в формулу напротив параметра «ADSK_Завод-изготовитель» слово «Изготовитель» без кавычек, нажмите «Применить» и удалить «Изготовитель» — значения останутся.

♦ Деление на ноль запрещено. Причины понятны, но часто это становится причиной ошибки, когда в семействе есть несколько типоразмеров.

Например, у вас семейство с двумя типоразмерами. Вы добавляете три числовых параметра, например «Длина», «Число» и «Деление». По умолчанию их значения равны нулю. Заполняете данные, в «Длину» пишите 100, в «Число» — 2.

В параметр «Деление» пишите формулу: Длина / Число. И получаете ошибку.

Revit: как писать формулы
Revit: как писать формулы

Если бы вы забыли поменять значение в параметр «Число» и там бы остался нуль, то получили бы ошибку «Деление на ноль», что вполне логично. Но в данном случае ошибка совсем не понятная: какая такая таблица, что ещё не так с формулой?

Ответ простой — у вас есть два типа, вы пишите формулу в первом типе, меняете значения длины и числа, всё нормально, а вот во втором типе эти значения не изменились и получается, что делите на ноль. Вот и ошибка. Придётся удалить формулу, ввести корректные значения и только тогда прописать формулу.

Повторяю! В таблицах CSV тип данных для целых и дробных — ##NUMBER##GENERAL, а в таблицах TXT — OTHER.

Всё! Спасибо, что дочитали материал. Поделись им с коллегами по Ревиту, помогите им разобраться с этой темой.

Видеокурс по семействам трубопроводных фитингов. Подробный 10-часовой курс, в котором научу создавать семейства и поделюсь лайфхаками.

Обновления статей удобно получать в Телеграм-канале «Блог Муратова про Revit MEP». Подписывайтесь и приглашайте коллег. Можно обсудить статью и задать вопросы в специальном чате канала.

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

Бесплатные обзоры ваших моделей

Раз в две недели провожу «Ревит-линчи» — разбираю файлы семейств и проектов пользователей и отвечаю на вопросы по Ревиту и БИМ-технологиям. Дату и ссылку на Ревит-линч публикую в Телеграм-канале. Приходите, там интересно.

Отблагодарить автора

Я много времени уделяю блогу и разработке семейств. Если хотите отблагодарить меня, то можете сделать небольшой подарок (именно подарок, такой перевод не облагается налогом).