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

Для нештучных позиций типа воздуховодов, труб, их гибких вариантов и изоляции подход во многом тот же самый, но есть свои нюансы. Главный из них — необходимость считать длину/площадь/объём элементов, а не их штуки. Кроме того, у воздуховодов размеры могут быть любые и нужно вычислять стенку, а у труб обычно есть фиксированный сортамент.

Давайте посмотрим, как собрать спецификацию для воздуховодов стандартными инструментами. После покажу вариант с Динамо-скриптом и макросами из шаблона АДСК. Для трубы всё аналогично, только проще.

Стандартные инструменты

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

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

Вкладка «Управление» → Параметры проекта → Добавить → Общий параметр → далее выбираем параметры и добавляем к категории «Воздуховоды».

Пример того, как добавить общий параметр в параметры проекта
Пример того, как добавить общий параметр в параметры проекта

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

Вот настройки для параметра по типу. Добавляю сразу и трубе, и воздуховоду
Вот настройки для параметра по типу. Добавляю сразу и трубе, и воздуховоду
Настройки параметра по экземпляру
Настройки параметра по экземпляру

Обратите внимание на скриншот выше. Когда я выбираю «Экземпляр», то ниже доступны ещё два чекбокса, которые неактивны при «Типе». Это настройки параметра для работы в группах. Когда мы создаём группы в Ревите, то элементы внутри группы меняются синхронно: изменили в одном экземпляре группы, поменялось во всех остальных экземплярах, то же и с параметрами. Про группы я напишу отдельную статью.

Чекбокс «Значения выравниваются для каждого типа группы» означает: если вы зайдёте в группу и отредактируете в ней параметр у одного элемента, например запишите в параметр «ADSK_Наименование» воздуховоду значение «Воздуховод1», то этот параметр заполнится у всех аналогичных воздуховодах во всех остальных группах.

Чекбокс «Значения могу изменяться по экземплярам группы» означает: если вы внесли какие-то изменения в параметр «ADSK_Наименование», то значение поменяется только у того воздуховода, у которого вы меняли параметр, все остальные не изменятся.

В нашем случае оба варианта имеют право на жизнь, всё зависит от сценариев работы, я оставлю первый чекбокс, его потом можно переставить. А вот когда буду добавлять «ADSK_Позиция», то там выберу второй чекбокс, потому что нумерация в группах не обязательно совпадает. То же и с «ADSK_Примечание».

Вот так выглядят все мои параметры для воздуховодов и труб
Вот так выглядят все мои параметры для воздуховодов и труб

После того, как добавили параметры, давайте сразу заполним постоянные поля: единицы измерения и марку. Поскольку это параметры типа, я выделю любой воздуховод, нажму на «Изменить тип» и в свойствах воздуховода внесу данные. Это нужно повторить для всех типов воздуховодов, если их несколько в проекте.

Данные из параметров типа появятся у всех воздуховодов
Данные из параметров типа появятся у всех воздуховодов

Из оставшихся параметров нам нужно заполнить наименование и посчитать длину. Начнём с длины.

До этого я добавил параметр «ADSK_Количество», но заполнить его можно только с помощью макросов или скриптов Динамо. Поэтому в стандартном методе будем считать длину через системные параметры. То же касается и «ADSK_Наименование» — заполнить его можно, но только частично. Поэтому наименование мы соберём иным путём, а АДСК-параметр заполним в разделах про макрос и скрипт.

Создаю спецификацию воздуховодов. Выбираю категорию «Воздуховоды», добавляю АДСК-параметры, кроме Количества и Наименования, системные параметры «Длина» и «Размер». Пока что у нас будет спецификация без наименования, его соберём чуть позже.

Вот эти параметры добавлю для начала
Вот эти параметры добавлю для начала
Сразу настрою сортировку по размеру и сниму галочку «Для каждого экземпляра»
Сразу настрою сортировку по размеру и сниму галочку «Для каждого экземпляра»

С длиной два сценария: считать длину фактическую или накинуть запаса. Рассмотрим оба варианта.

Фактическая длина

Чтобы посчитать фактическую длину, ничего особенного делать не надо — просто добавить параметр «Длина». Он системный, Ревит сам считает длину воздуховода. Однако, если настроить спецификацию, как показано выше, и посмотреть на неё, то длина в ней не считается. Этот блогер сволочь, отписываемся от него!

Стойте-стойте, рано. Дело в том, что у Ревита есть одна особенность: всем числовым параметрам, кроме системного параметра «Число», нужно указывать, что их в спецификации нужно суммировать. Делается это на вкладке «Форматирование». Все новички, абсолютно все, забывают об этом и могут часами искать решение.

Выделяете нужный параметр и указываете в выпадающем меню внизу способ подсчёта
Выделяете нужный параметр и указываете в выпадающем меню внизу способ подсчёта

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

Хотя удобнее было бы, чтобы по умолчанию Ревит считал суммы.

Теперь всё считается без запаса, всё как в модели до миллиметра.

Спецификация воздуховодов
Спецификация воздуховодов

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

Чтобы перевести длину в метры, выделю столбец с длиной и нажму на кнопку:

Укажу метры и 1 знак после запятой
Укажу метры и 1 знак после запятой

Готово.

Длина с запасом

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

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

На выходе получаю следующее:

Спецификация с длиной с запасом
Спецификация с длиной с запасом

Теперь перейдём к наименованию.

Наименование

Здесь у нас сложности, потому что для воздуховодов нужно ещё и толщину стенки посчитать. В стандартном Ревите в ручном режиме определить толщину стенки можно расчётным параметром, но расчётный параметр нельзя добавить в объединённый параметр, которым мы и будем собирать наименование.

Поэтому сделаем колхозно: наименование будет собираться в нескольких столбиках. Наименование будет состоять из 4-х блоков:

[ Воздуховод из оцинкованной стали ] + [ Размер ] + [ Толщина ] + [ класс герметичности ]

Цель — получить вот такой текст:

Воздуховод из оцинкованной стали 500х200, b=0.7

Воздуховод из оцинкованной стали ø200, b=0.5

Воздуховод из оцинкованной стали 600х400, b=0.7, класс герметичности «В»

Для первого блока воспользуемся параметрами типа воздуховодов. Зайду в свойства воздуховодов и напишу там в «Комментарии к типоразмеру» «Воздуховод из оцинкованной стали».

Пример заполнения для прямоугольного воздуховода. Не забудьте сделать то же для остальных типов
Пример заполнения для прямоугольного воздуховода. Не забудьте сделать то же для остальных типов

Второй блок Ревит будет формировать сам. Проверьте, чтобы в Настройках ОВиВК у вас был префикс «ø» для круглого воздуховода.

Управление — Настройки MEP — Настройки ОВиВК
Управление — Настройки MEP — Настройки ОВиВК

Толщина и класс герметичности будут расчётными параметрами, но текстовыми.

Класс герметичности нужен всем воздуховодам, которые покрыты огнезащитой. Плюс тем, которые не покрыты, но проходят в шахтах или ещё как-нибудь и должны быть герметичными. Про второй вариант я ничего не расскажу, подумайте сами, как это реализовать по аналогии, покажу только для огнезащиты. Собственно, и первый вариант тоже можно реализовать по-разному, я покажу лишь ход мысли, а реализовать можно иначе (например, забить и применять макросы или скрипты).

Добавляю в спецификацию параметры «Ширина», «Высота», «Диаметр» и «Толщина изоляции» и сортирую по нему, чтобы разделить воздуховоды в изоляции от неизолированных. Я знаю, что воздуховоды у меня либо ничем не покрыты, либо покрыты огнезащитой 10 мм, либо теплоизоляцией 50 мм. Влияет на что-то только огнезащита, поэтому возьму 10 мм как признак того, что воздуховод должен быть толщиной 0,9 мм независимо от размера.

Размеры у круглых и прямоугольных воздуховодов пишутся по-разному, поэтому нужен критерий для их отличия. Для этого создам параметр проекта «Круглый воздуховод» с типом данных «Да/нет» и сделаю его по типу. Про параметры проекта читайте подробнее в отдельной статье.

Добавляю параметр проекта
Добавляю параметр проекта

Теперь захожу в свойства типа прямоугольного воздуховода и галочку с параметра снимаю.

Снимаю галочку, у круглых оставляю — логично
Снимаю галочку, у круглых оставляю — логично

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

Создаю расчётный параметр
Создаю расчётный параметр

if(Толщина изоляции = 10 мм, "b=0.9 мм", if(Круглый воздуховод, if(Диаметр > 1000 мм, "b=0.9 мм", if(Диаметр > 250 мм, "b=0.7 мм", "b=0.5 мм")), if(or(Ширина > 1000 мм, Высота > 1000 мм), "b=0.9 мм", if(or(Ширина > 300 мм, Высота > 300 мм), "b=0.7 мм", "b=0.5 мм"))))

Что делает эта формула:

  1. Если толщина изоляции равна 10 мм, то назначает толщину 0,9 мм независимо от размера и сечения воздуховода.
  2. Если толщина изоляции не равно 10 мм, то проверяет, есть ли галочка в параметр «Круглый воздуховод».
  3. Если есть, то проверяет диаметр. Если он больше 1000 мм, то вносит толщину 0,9 мм, если больше 250 мм, то 0,7 мм, в остальных случаях — 0,5 мм.
  4. Если воздуховод не круглый и на нём нем изоляции толщиной 10 мм, то прогоняет его по ширине и высоте.
  5. Если ширина или высота больше 1000 мм, то 0,9 мм, если больше 300, то 0,7, в остальных случаях — 0,5 мм.

В итоге получаем столбец, в котором указана толщина металла. Остался последний блок, в котором нужно указать класс герметичности. Поскольку я рассматриваю упрощённый вариант, то сделаю просто: все воздуховоды с огнезащитой (то есть изоляцией толщиной 10 мм) должны быть классом герметичности «В», то я просто допишу к толщине этот текст в формулу. Получится вот так:

if(Толщина изоляции = 10 мм, "b=0.9 мм, класс герметичности «В»", if(Круглый воздуховод, if(Диаметр > 1000 мм, "b=0.9 мм", if(Диаметр > 250 мм, "b=0.7 мм", "b=0.5 мм")), if(or(Ширина > 1000 мм, Высота > 1000 мм), "b=0.9 мм", if(or(Ширина > 300 мм, Высота > 300 мм), "b=0.7 мм", "b=0.5 мм"))))

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

Получаем вот такую красоту:

Куча геморроя, параметров, длинная формула, но мы получили желаемое
Куча геморроя, параметров, длинная формула, но мы получили желаемое

В формулах желательно пользоваться кавычками вот таких типов: « » „ “, а не стандартные, которые вы получаете нажатием shift+2 — "". Эти кавычки в формуле указывают на текстовое значение, поэтому, если вы напишите «"класс герметичности "В""», то Ревит не сможет прочитать формулу и выдаст ошибку. Так что кавычки-ёлочки надо использовать. Это ещё и точки зрения русской типографики правильно. Шифт+2 — это знак дюйма, а не кавычка.

Теперь мы знаем, как получить все блоки. Первые два блока получаем объединением параметров.

Создаю новый объединённый параметр
Создаю новый объединённый параметр
Настраиваю разделители. Просто ставлю пробел после первого параметра
Настраиваю разделители. Просто ставлю пробел после первого параметра
Ставлю объединённый параметр перед толщиной, потом всё подвинем в начало
Ставлю объединённый параметр перед толщиной, потом всё подвинем в начало
Получается вот
Получается вот

Дальше дело техники — нужно скрыть ненужные столбцы (не удалять!), выставить оставшиеся в правильно порядке, задать им ширину, вот и получится спецификация. Конечно, есть загвоздка, как получить 130 мм для наименования, если оно состоит из двух столбцов переменной длины. Но это можете установить опытным путём, я выставил 95 мм для объединённого параметра и 35 для толщины. Шапку сделал редактированием заголовка, подзаголовки скрыл.

В общем, получилось нечто съедобное, пусть и не самое вкусное.

Общий вид спецификации
Общий вид спецификации
Наименование поближе. Класс герметичности портит всю малину
Наименование поближе. Класс герметичности портит всю малину

Это был способ на голом Ревите с помощью стандартных средств.

Скрипт Dynamo

Создаёте спецификацию на параметрах АДСК или копируете из шаблона АДСК ОВ. Все-все параметры нужны. «ADSK_Наименование» и «ADSK_Количество» — по экземпляру.

Читаете мою статью и оттуда же скачиваете скрипт.

Запускаете скрипт в Проигрывателе Динамо.

Получаете готовую красивую спецификацию.

Профит.

Макрос из шаблона ОВ от АДСК

При открытии проекта включите макросы.

Включить макросы
Включить макросы

Перейдите в спецификацию В_ОВ_Круглые воздуховоды или В_ОВ_Прямоугольные воздуховоды. Макрос скопирует значения из второго столбца в третий, то есть объединённый параметр с наименованием в «ADSK_Наименование».

В — префикс для вспомогательных спецификаций
В — префикс для вспомогательных спецификаций
Так выглядит спецификация до заполнения параметра
Так выглядит спецификация до заполнения параметра

Перейдите на вкладку Управление — Диспетчер макросов.

Выделил диспетчер макросов
Выделил диспетчер макросов

Выделите макрос CopeParameters, нажмите справа на «Выполнить».

Выполните макрос
Выполните макрос

Всё, наименования для воздуховодов скопированы.

После выполнения вспомогательная спецификация выглядит так
После выполнения вспомогательная спецификация выглядит так

Результат можно посмотреть в спецификации О_ОВ_Воздуховоды:

А вот так выглядит основная спецификация
А вот так выглядит основная спецификация

Макрос также считает толщину стенки, заносит её в примечание и заполняет параметр «ADSK_Количество» с запасом, который указан в глобальном параметре Запас.

Это длина с запасом, заносится в ADSK_Количество
Это длина с запасом, заносится в ADSK_Количество
Вот отсюда берётся запас на длину
Вот отсюда берётся запас на длину

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

Профит.

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

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

всегда и везде, даже без повода, и уходить в закат

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

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