В этой статье отдельно расскажу про расчётные параметры в спецификациях. О них кратко упоминал в полном гиде по спецификациям для сетевиков, теперь же расскажу чуть подробнее и покажу несколько примеров.
Определение
Начнём с того, что такое расчётные параметры и где они вообще могут пригодиться.
Расчётные параметры — это поля спецификации, в которые можно выводить значения с помощью формул.
Чаще всего эти значения вычисляются на основе значений из других параметров. То есть мы не можем создать спецификацию из ничего, нам всё равно нужны элементы в модели. Помните, одна строка спецификации = один элемент в модели.
Назначение
В сетях расчётные параметры обычно используют для решения двух задач: добавить запас на количество или посчитать расходные материалы, которые не моделируются.
Пример 1. Если нужно добавить запас на длину трубы, то можно взять фактическую длину и в расчётном параметре домножить её на нужный коэффициент.
Пример 2. В расчётной спецификации можно учесть металл для креплений воздуховодов или краску и грунт для труб. В этом случае мы берём существующие элементы, воздуховоды и трубы, и на основе их значений площади через коэффициенты получаем массу креплений или объём краски.
Обе задачи можно решить с помощью формул в расчётных параметрах. Это несложно, примеры покажу в отдельном разделе ниже.
Кроме формул, которые пользователь сам пишет в отдельное поле, есть особый вид формул — проценты. Этот инструмент нужен, чтобы посчитать долю элемента относительно какой-то группы элементов. Например, можно узнать, сколько процентов составляет длина труб 50 диаметра относительно длины всех труб в системе.
Звучит, как довольно бесполезная ерунда, и так оно есть, если использовать инструмент напрямую. Но если немного подшаманить, то процент позволит нам справиться с одной проблемой Ревита — округлением суммы значений, а не каждого отдельного значения.
Когда в Ревите мы что-то округляем в спецификации и потом суммируем значения, то мы видим не округлённую сумму, а сумму округлённых значений.
Например, у нас есть три отрезка трубы: 1230 мм, 4520 мм и 3910 мм. Если накинуть сюда 10 % сверху, перевести в метры и округлить до 1 знака после запятой, то вот что получается. Ревит берёт каждое значение, домножает, округляет и только потом суммирует, получаем:
- 1,23 * 1,1 = 1,353 = 1,4 м;
- 4,52 * 1,1 = 4,972 = 5 м;
- 3,91 * 1,1 = 4,301 = 4,3 м.
- сумма в Ревите 1,4 + 5 + 4,3 = 10,7 м;
- сумма ожидаемая: 1,353 + 4,972 + 4,301 = 10,626 = 10,6 м.
То есть Ревит округлил каждое, потом просуммировал, а мы обычно сначала суммируем, потом округляем полученное значение. Скорее всего эти неточности для вас роли не играют и уходят в «запас», но в некоторых случаях это критично, например при определении площади квартир в ТЭПах, так как это сильно влияет на деньги.
Подобная ситуация должна нас насторожить, потому что — нельзя это отрицать на 100 % — может быть связана с попыткой машин уничтожить нас как биологический вид и установить своё цифровое доминирование в мире. Или нет.
Работу с процентом рассматривали Чубрик и Зуев, я тоже её опишу, но уже на примере воздуховодов и своим языком. Кому какой нравится, тот и выбирайте:
- статья Чубрика;
- статья Зуева;
- моя статья → о, так вы уже в ней, просто читайте дальше.
Практика
Давайте посмотрим, как создавать расчётные параметры и рассмотрим четыре примера с воздуховодами. В первом добавим запас на длину. Во втором — посчитаем массу креплений. В третьем — посмотрим на округление в расчётных параметрах. В четвёртом — сделаем округление суммарной длины через процент.
За основу возьму спецификацию из трёх полей с такими настройками:
Пример 1 — Запас на длину
Перехожу в «Поля» спецификации, нажимаю по значку расчётного параметра. Перевод в Ревите некорректный, написано «Добавить рассчитанный параметр» вместо «Добавить расчётный параметр». Попадаю в окно с настройками.
В данном случае мы будем брать длину трубы и домножать её на коэффициент запаса. Для расчётных параметров важно, чтобы в поля спецификации был добавлен тот параметр, на основе которого ведём расчёт. Сейчас это параметр «Длина». Все параметры, которые собираетесь использовать в формулах в расчётных параметрах, должны быть в полях спецификации.
1 — имя параметра, должно быть уникальным;
2 — выбор типа расчётного параметра, формула или процент, сейчас выбираем формулу;
3 — так как это параметр, то у него есть категория (дисциплина) и тип данных. Очень важно выбирать правильный тип данных, так как он влияет на запись формулы и дальнейшую работу с параметром. Например, если выбрать не «Длина», а оставить число, то нельзя будет менять единицы с миллиметров на метры, так как у чисел нет такой вариативности;
Если работаете с длинами труб, воздуховодов, лотков, коробов, с диаметрами труб и коробов, то выбирайте тип данных «Длина». Если ошибиться с типом данных, это классическая ошибка новичков, то получите предупреждение.
4 — поле для ввода формулы. Можете как вписать всё целиком руками, так и с помощью кнопки «…» справа выбирать из добавленных в спецификацию параметров. Двойной клик по параметру добавляет его в формулу.
Если параметр можно добавить, это не значит, что формула будет с ним работать. Например, нельзя добавить текстовый параметр в условие, но можно добавить в результат, если тип данных «Текст». Посмотрим подробнее во втором примере.
Настроил параметр, добавляю в спецификацию, смотрим, что получилось. Если при нажатии на кнопку ОК не вылезает никаких ошибок, то всё хорошо, параметр работает.
Расчётные параметры суммируются по правилам обычных параметров. Об этом рассказывал в полном гиде по спецификациям. Для расчётных параметров нужно включить вычисление итогов, как и для любого другого параметра, который собираемся суммировать. И точно так же можно поменять единицы измерения на требуемые.
После нехитрых манипуляций, получаем следующее:
Напомню: Ревит взял каждый воздуховод отдельно, умножил его фактическую длину на коэффициент из формулы, а уже после этого суммировал все поля. В данном случае длина с запасом может расходиться с фактической длиной, но несильно — в пределах округления.
Например, если бы поставил округление до 1 знака, то получил в первой строке не 9.57, а 9.6 — относительно 8.7 фактической длины это уже 10,3 % запаса. Это мелочи, которые можно проигнорировать в данном случае.
В спецификации для оформления, чтобы накинуть запас, вы добавите поле с фактическим значением параметра, потом добавите расчётный параметр, укажете тип данных, формулу и посчитаете в нём количество с запасом. Фактическое значение удалять нельзя — придётся скрыть, а расчётное будете выводить как количество на лист.
Пример 2 — Масса креплений
Этот пример похож на первый — нужно на основе площади воздуховодов высчитать массу креплений. Берём площадь, умножаем на коэффициент и получаем количество.
Однако тут есть свой нюанс. Расчётные параметры не формирует строки — это столбцы, а значит мы не сможем в одной сводной спецификации собрать и реальные элементы модели и расчётные значения. Поэтому придётся делать отдельную спецификацию на каждый расходник.
Нужна краска для труб? Отдельная спека. Нужна грунтовка для тех же самых труб? Отдельная спека. Нужен скотч или проволока для монтажа изоляции? Отдельная спека. На всё отдельные спецификации. Неудобно, ну да что поделать, концепция БИМ предполагает, что в модели должен быть элемент с параметрами, нет элемента — нет строки в спецификации.
Поэтому в данном случае нам нужно создать спецификацию на воздуховоды, но при этом оформить её так, чтобы потом можно было присоединить к основной спецификации как будто это одна таблица.
Это значит, что нужно сформировать наименование, единицы измерения и количество. Взять из модели нам их неоткуда, если только в воздуховоды не добавить отдельные параметры с этими значениями. Как правило это излишне, можно обойтись расчётными параметрами. Сейчас покажу девятиграфку, в которой будут считаться крепления.
Создаю новую спецификацию на категорию воздуховодов. Добавляю те поля из воздуховодов, которые подходят для оформления и нужны для расчётов. Тут всего два параметра: имя системы пригодится для сортировки, чтобы узнать массу креплений на каждую систему отдельно, а площадь нужна для расчётного параметра. Если по системам делить не нужно, то можно оставить только площадь.
Теперь нужно сформировать поля для позиции, наименовании, марки, кода продукции, поставщика, единиц измерения, количества, массы 1 единицы и примечания. И всё это будут расчётные параметры.
Поля для позиции, марки, кода продукции, поставщика, массы и примечания будут пустыми. Покажу на примере позиции, остальное по аналогии. Наименование и единицы измерения — фиксированные текстовые значения. Количество — буду считать формулой через площадь.
Чтобы создать пустой столбец, нужно сделать расчётную формулу, выбрать тип данных «Текст», и в формулу вписать две прямые кавычки — "". После этого в спецификации появится пустой столбец, подгоняете его ширину — готово.
Аналогично происходит работа с фиксированными значениями. Нужно выбрать тип данных «Текст» и вписать в кавычках нужный текст. В нашем случае это "Металл для креплений воздуховодов". После добавления такого параметра, в каждой строке появится этот текст.
Подобные расчётные параметры с фиксированными значениями можно использовать для управления высотой строки. Подробнее об этом рассказывал в полном гиде по спецификациям.
В формулах можно использовать условные выражения. Например, можно разнообразить текст в зависимости от ширины воздуховода. У меня в модели прямоугольные воздуховоды ширинами 200 и 400 мм. Напишу вот такую формулу: if(Ширина < 300, "Перфолента для крепления воздуховодов", "Траверсы для крепления воздуховодов"). Само собой, раз использую ширину в формуле, то этот параметр нужно добавить в спецификацию.
У формул есть и свои ограничения, два главных — нельзя использовать текст для условий и «пустые» параметры.
То есть нельзя в условном выражении проводить проверку по текстовому параметру, а также нельзя сравнивать между собой текстовые параметры. Это общее ограничение Ревита, оно касается не только расчётных параметров. Больше узнать про формулы в Ревите можете из отдельного подробнейшего материала.
Под «пустыми» параметрами подразумеваю те, которых нет у конкретного элемента. Например, у прямоугольных воздуховодов нет диаметра, но при этом мы можем добавить в спецификацию этот параметр. Если в формуле написать Ширина + Диаметр, то на выходе получим пустые ячейки. Ревит не будет заменять отсутствующий диаметр на 0, он просто не станет выводить значение в ячейку.
Именно поэтому в шаблонах ADSK версий 1.х было деление на типоразмеры круглых и прямоугольных воздуховодов с огнезащитой и без неё, а также был отдельный параметр проекта с типом данных «Да/Нет» — «Круглый». В шаблоне вычислялась в расчётном параметре толщина стенки воздуховодов. Поскольку она по разному учитывается для круглых и прямоугольных воздуховодов, а также зависит от наличия огнезащиты, то пришлось вводить дополнительные параметры для формул.
Мы не можем сравнивать текстовые параметры вроде типа или имени семейства, зато можем ввести свои числовые параметры или параметры типа «Да/Нет» и уже их анализировать в формулах.
Однако нужно помнить — длина формулы в расчётном параметре ограничена. Не нашёл в интернете ответа, мои тесты показали, что Ревит 2021 сначала зависает, а потом просто закрывается без предупреждения, если длина формулы около 22 тысяч символов. Поэтому писать бесконечные ветвления условий не получится.
Также раньше наблюдалась проблема — если формула очень длинная, то поле с формулой может отображаться пустым. Если выделить формулу и скопировать в буфер, то значение копируется, то есть это именно ошибка отображения. В Ревите 2019.2.6 на мониторе с разрешением 3440х1440 вроде отображается нормально, но раньше такое точно было.
Разобрались с текстовыми данными в расчётных параметрах: сформировали пустые ячейки и ячейки с фиксированными значениями, в том числе с использованием условных выражений. Теперь посчитаем массу креплений. Я верну вариант спецификации с одинаковым текстом, то есть без условия в расчётном параметре.
Для массы креплений возьмём простую формулу: умножение площади на коэффициент 1,5. Нам сейчас не важны точные числа в зависимости от типа материала, периметра и прочих показателей, это вы всё прекрасно сами сможете учесть через условные выражения. Поэтому просто умножим площадь на число.
Помните про тип данных. Я хочу посчитать массу числом, но в формуле использую площадь. Соответственно могу получить ошибку, если напишу всё напрямую:
Площадь воздуховода — это параметр с типом данных «Площадь», а у расчётного параметра тип данных «Число». Соответственно, получаем ошибку. Чтобы её избежать, нужно сократить единицы измерения. Для площади это метры квадратные. Перепишу формулу вот так:
По сути, я сокращаю единицы у площади и тем самым обращаю её в обычное число. В Ревите 2021 при использовании таких простых формул единицы можно не сокращать — Ревит сделает это за вас: если напишу формулу Площадь * 1.5 и нажму ОК, то ошибки не будет. Если формула чуть более сложная, то тут полномочия Ревита всё, сокращать единицы за вас он уже не будет.
Чтобы отредактировать существующий расчётный параметр, нужно выделить его в свойствах спецификации в полях и нажать на карандашик снизу:
В расчётном параметре я получаю массу креплений. Не забывайте, что нужно включать вычисление итогов, чтобы увидеть сумму креплений. Чтобы масса выводилась с одним знаком после запятой, нужно отформатировать единицы и привести их к следующему виду:
Вот и всё. Нужно создать все столбцы, настроить их ширину, скрыть ненужные поля и готово. Аналогично можно посчитать краску, грунтовку, окожушку для изоляции и так далее. Главное, чтобы был подходящий параметр в основном элементе, который есть в модели.
Пример 3 — Округление формулой
Выше рассказывал про особенности округления в Ревите. Давайте посмотрим на примере. У нас есть операторы для округления с помощью формул. Подробнее о них рассказывал в статье о формулах. Если коротко, то есть round — обычное округление, roundup — округление до целого вверх и rounddown — округление до целого вниз.
Такое округление может пригодится, если мы хотим получить в спецификации количество с кратным шагом. Например, нужна длина воздуховодов, кратная 1250 мм, или длина канализационных труб с шагом 500 мм.
Возьмём такой пример: нужно все воздуховоды округлить до длины, кратной 500 мм. Это можно сделать так: поделить длину воздуховода на 500, получим дробное число. Округлим его вверх до ближайшего целого и снова умножим на 500 — получим число, кратное 500. Например, есть длина 1200 мм, делим на 500 — получим 2.4. Округлим вверх, получим 3, умножим на 500 — 1500 в итоге. Работает.
В расчётном параметре это будет выглядеть вот так:
Важно помнить, что функция округления работает только с числами. Длина — это не число, это параметр с типом данных длина. Поэтому в идеале нам нужно сократить единицы измерения, то есть поделить на 500 мм. Тут формула достаточно простая, поэтому можно это не прописывать, Ревит сам сократит. Но в более сложных случаях это нужно делать вручную.
Получаем вот такие значения, слева факт, справа — округление:
Как видите, Ревит округляет каждую позицию в спецификации и при суммировании берёт уже округлённые значения. Это полезно, если мы хотим округлить каждую позицию для закупа и купить всё отрезками, а обрезать по месту на монтаже. Но зачастую нужно округлить не каждую позицию, а сумму.
В этом случае суммарная фактическая длина 11575,4 мм должна превратиться в 12000 мм. Однако Ревит не может в формуле расчётного параметра обрабатывать сразу все значения, он идёт последовательно по каждому элементу. И в каком-то смысле это правильно, БИМ-концепция подразумевает работу с объектами модели, один объект — одно взаимодействие. Так что тут всё правильно, но иногда неудобно.
Как округлить именно сумму, а не отдельные значения, посмотрим в следующем примере.
Пример 4 — Округление через процент
Работа с процентами в расчётных параметрах — хлебушек с маслом для конструкторов и прочих строителей. Можете открыть АДСК-шаблон для разделов КМ или КЖ и посмотреть на расчётные параметры в них — это дичь полная.
Давайте посмотрим, как работает формула с процентом. Цель — округлить сумму, а не отдельные значения в спецификации. Далее буду называть инструмент «процентом».
Вот моя исходная спецификация:
Длина факт — системная длина воздуховодов в метрах. Длина крат — с округлением кратно 500 мм из предыдущего примера.
Создаю новый расчётный параметр. Выбираю «Процент», в поле «Из:» — Длина, в поле «По:» — <Общий итог>. Давайте подробнее остановлюсь на этих полях.
Процент — это доля, то есть мы берём значение параметра, которое указываем в поле «Из:» и делим на значение из поля «По:». В поле «По:» можно выбрать либо сумму значений для нашего параметра, тогда выбираем «По общему итогу», либо любой параметр, по которому производится сортировка в спецификации.
Разберём на примерах. Если я беру значение из «Длина» и вычисляю процент по «Общему итогу», то это расшифровывается так: беру длину каждого воздуховода, делю на суммарную длину всех воздуховодов в спецификации.
В нашем примере в первой позиции стоит воздуховод с длиной 1,8 метров, а суммарная длина — 11,6 метров. 1,8/11,6 = 0,15517, то есть 15,52 %. В спецификации 15,55 %, потому что Ревит делит без округления, берёт 1800 мм и делит на 11575,4 мм. И так будет в каждой строке — берём значение, делим на сумму длин в спецификации, получаем проценты.
За суммарную длину берётся та, что отображается в спецификации. Отфильтрованные строки не учитываются.
Если я изменю настройки спецификации: сделать сортировку по всем системам и включу вычисление итогов по каждой системе, а потом изменю расчётный параметр с процентом так, чтобы длина бралась не по общему итогу, а по имени системы, то получу уже другие проценты.
В этом примере мы берём длину каждого воздуховода и сравниваем с суммарной длиной воздуховодов в пределах системы. В системе «В 1» 31.9 метра воздуховодов. Длина первого воздуховода 2,6 метра. Делим 2,6 на 31,9 — получаем 8,15 %.
Если бы при таких же настройках я оставил в поле «По:» «Общий итог», то Ревит посчитал бы отношение длины одного воздуховода к длине воздуховодов во всём проекте. Когда я меняю основание в поле «По:», то Ревит обращается к сумме значений в пределах отсортированного параметра. Словами сложно, но когда смотрите на цифры в спецификации выше — всё понятно. Вот и смотрите на них.
Вернёмся к нашему примеру. В нём я оставил только воздуховоды 600х400 из одной системы, чтобы было меньше полей. Вот наша спецификация на текущем этапе:
Мы получили отношение фактической длины ко всей длине воздуховодов. Если теперь поделить фактическую длину на процент, то мы получим в каждой строке полную длину воздуховодов. Всё логично: если в системе 5 метров воздуховодов, то воздуховод с длиной 1 метр составляет 20 % от суммарной длины (1 / 5 = 0,2). Если знаем длину воздуховода и его долю в общей длины, то легко получим общую длину: 1 / 0,2 = 5 метров.
Создаю новый расчётный параметр, теперь уже не процент, формулу. И пишу там формулу: Длина / Доля по длине. То есть беру длину каждого воздуховода и делю на его долю в суммарной длине. Ожидаемо получаю суммарную длину в каждой строке.
У нас есть вся длина в каждой строке, и это расчётный параметр. Расчётные параметры можно использовать в формулах других расчётных параметров. Значит, мы можем округлить нужным нам образом суммарную длину воздуховодов, а затем умножить её на процентную долю каждого воздуховода в системе. В итоге мы получим длины, которые «подогнаны» так, чтобы получить нужную сумму длин.
Создаю ещё один расчётный параметр, в котором округляю полную длину воздуховодов по нужной методике — чтобы было кратно 500 мм, — а потом домножаю до процент:
Обратите внимание на сумму длин в последнем столбце — она равна 12 метрам. Специально включил в столбце с фактической длиной миллиметры, чтобы вы могли сравнить. По сути я домножил каждую позицию так, чтобы получилась нужная мне сумма.
Таким образом можно сделать плавное округление и подогнать округление каждой позиции к сумме, а не получать сумму из округлённых значений. Если скрыть вспомогательные столбцы, то получим красивую картину:
Если уберу все фильтры, то получу спецификацию на весь проект и длина каждого воздуховода подстроится так, чтобы на выходе я получил округлённую сумму, а не сумму округлённых.
Давайте подытожим плюсы и минусы расчётных параметров.
Преимущества
Позволяют расширить методы подсчёта на элементы, которых нет в модели. В примерах выше это крепления воздуховодов.
По расчётным параметрам можно сортировать строки спецификации. Не показывал это в статье, но в отличие от объединённых параметров по расчётным можно сортировать.
Можно добавлять фиксированные значения или варьировать их формулой с условием. Кроме условных выражений типа равно, больше, меньше и функций округления, в формулах работают вся базовая арифметика и синусы с косинусами. Число пи можно записать как pi().
Можно настроить плавное округление суммы, а не отдельных значений. Метод с процентом немного замороченный, но он работает и даёт результат.
Недостатки
Отображаются только в спецификации. Эту информацию не видно в параметрах элементов, а значит и в марках значения эти не получите. Однако значения из расчётных параметров можно получать с помощью Revit API. В Динамо это можно сделать с помощью пакета SteamNodes — нод Schedule.GetCalculatedValues.
Нужно добавлять все параметры, которые участвуют в формулах. Их нельзя удалять, нужно скрывать.
Округление работает только с числами. Небольшая проблема, но добавляет рутины в написание формул.
Нельзя обработать параметр по его наличию. Если у элемента нет параметра, has no value, то формула его обрабатывать не будет.
Формулы не работают с текстом, кроме записи фиксированных значений. Общее ограничение Ревита, если знакомы с формулами, то для вас это не сюрприз.
Все полезные ресурсы в одном месте
Видеокурс по семействам трубопроводных фитингов. Подробный 10-часовой курс, в котором научу создавать семейства и поделюсь лайфхаками.
Видеокурс по семействам для вентиляции. Большой курс по созданию оборудования, арматуры, воздухораспределителей и фитингов.
Отблагодарить автора
Если хотите отблагодарить меня, то можете сделать небольшой подарок (именно подарок, такой перевод не облагается налогом). Или подписаться на меня на Бусти.ту и помогать небольшим ежемесячным переводом.
Уведомления о новых статьях
Обновления статей удобно получать в Телеграм-канале «Блог Муратова про Revit MEP». Подписывайтесь и приглашайте коллег. Можно обсудить статью и задать вопросы в специальном чате канала.
Методичка по работе в Ревите
Читайте методичку для проектировщиков: полезный материал, в котором последовательно рассказываю, как создавать модель.
Манифест по разработке семейств для ОВ, ВК, ТМ
Подробная инструкция, как следует разрабатывать семейства для инженерных разделов.
Мини-курс по моделированию ОВ и ВК
В специальный плейлист на Ютубе выкладываю свои ролики по работе в Ревите. Этот курс записывал для студентов, разбираю базовые моменты по моделированию.
Добрый день!
Можно чуть подробнее, чем в статье рассказать, как, например, в спецификации в формуле сложить площади круглого и прямоугольного воздуховода и получить цифру, а не 0 или пустую ячейку?
Не совсем понятно из вашей статьи, как для прямоугольного воздуховода параметр "диаметр" сделать не "пустым" и, соответственно, у круглых параметры "ширина" и "высота"?
Добрый день! Вам нужен критерий для того, чтобы отличить круглый воздуховод от прямоугольного. В статье привожу пример, как это делали в шаблонах АДСК старых версий через дополнительный параметр «Круглый». Соответственно, просто пишите формулу с условием, if(Круглый, Формула площади для круглого, Формула площади для прямоугольного).
В моей статье и не было цели рассказывать, как сделать непустым диаметр прямоугольного воздуховода. Очевидно, что там нет диаметра, поэтому и значения нет. Есть параметр «Размер», можно выводить его.
Добрый день, оставлю комментарий здесь, для будущих поколений. Что можно сделать если "Длина с округлением" в расчетном параметре получается меньше 0,5? в таком случае у нас при округлении до целого получается 0, нам же нужна в таком случае 1, как можно обойти это препятствие?
Добрый день. Ну добавьте в формулу условие, что если значение меньше 0,5, то 1 писать, если больше, обрабатывать, как обычно.
Добрый день! А как потом заполнить созданный параметр "Позиция" в расчете креплений? Ячейки не активны и не получается вписать значения
Добрый день. В такие ячейки нельзя писать значение просто так. Оно пишется внутри формулы и будет одинаковым для каждой позиции.
Либо придумывайте другой параметр отдельный, куда будете позицию писать.