В прошлой статье про спецификации я показывал сам инструмент и привёл пример спецификации для воздухораспределителей. Точно по такому же принципу можно собрать спецификацию на остальные штучные изделия: арматуру, фитинги, оборудование.
Для нештучных позиций типа воздуховодов, труб, их гибких вариантов и изоляции подход во многом тот же самый, но есть свои нюансы. Главный из них — необходимость считать длину/площадь/объём элементов, а не их штуки. Кроме того, у воздуховодов размеры могут быть любые и нужно вычислять стенку, а у труб обычно есть фиксированный сортамент.
Давайте посмотрим, как собрать спецификацию для воздуховодов стандартными инструментами. После покажу вариант с Динамо-скриптом и макросами из шаблона АДСК. Для трубы всё аналогично, только проще.
Стандартные инструменты
Прежде, чем составить спецификацию, нужно убедиться, что у нас есть все нужные поля. Конечно, для пустых столбцов, которых у нас довольно много, можно надобавлять системные параметры, которые ничем не заполнены, но это решение ненадёжное. Вдруг в будущем мы туда что-нибудь будем вносить, и тогда придётся менять поля.
Поэтому лучше всего сразу добавить все поля к параметрам проекта. Про них я рассказывал в отдельной статье. Я предпочитаю добавлять ADSK-параметры, чтобы из них и формировать большинство столбцов.
Вкладка «Управление» → Параметры проекта → Добавить → Общий параметр → далее выбираем параметры и добавляем к категории «Воздуховоды».
При добавлении параметров надо сразу решить, будете вы это делать по типу или экземпляру. Если какое-то значение должно быть общим для всех воздуховодов типа, например, единицы измерения, то нужно добавлять по типу. Если может меняться у разных воздуховодов в пределах типа, например, примечание, то по экземпляру.
Обратите внимание на скриншот выше. Когда я выбираю «Экземпляр», то ниже доступны ещё два чекбокса, которые неактивны при «Типе». Это настройки параметра для работы в группах. Когда мы создаём группы в Ревите, то элементы внутри группы меняются синхронно: изменили в одном экземпляре группы, поменялось во всех остальных экземплярах, то же и с параметрами. Про группы я напишу отдельную статью.
Чекбокс «Значения выравниваются для каждого типа группы» означает: если вы зайдёте в группу и отредактируете в ней параметр у одного элемента, например запишите в параметр «ADSK_Наименование» воздуховоду значение «Воздуховод1», то этот параметр заполнится у всех аналогичных воздуховодах во всех остальных группах.
Чекбокс «Значения могу изменяться по экземплярам группы» означает: если вы внесли какие-то изменения в параметр «ADSK_Наименование», то значение поменяется только у того воздуховода, у которого вы меняли параметр, все остальные не изменятся.
В нашем случае оба варианта имеют право на жизнь, всё зависит от сценариев работы, я оставлю первый чекбокс, его потом можно переставить. А вот когда буду добавлять «ADSK_Позиция», то там выберу второй чекбокс, потому что нумерация в группах не обязательно совпадает. То же и с «ADSK_Примечание».
После того, как добавили параметры, давайте сразу заполним постоянные поля: единицы измерения и марку. Поскольку это параметры типа, я выделю любой воздуховод, нажму на «Изменить тип» и в свойствах воздуховода внесу данные. Это нужно повторить для всех типов воздуховодов, если их несколько в проекте.
Из оставшихся параметров нам нужно заполнить наименование и посчитать длину. Начнём с длины.
До этого я добавил параметр «ADSK_Количество», но заполнить его можно только с помощью макросов или скриптов Динамо. Поэтому в стандартном методе будем считать длину через системные параметры. То же касается и «ADSK_Наименование» — заполнить его можно, но только частично. Поэтому наименование мы соберём иным путём, а АДСК-параметр заполним в разделах про макрос и скрипт.
Создаю спецификацию воздуховодов. Выбираю категорию «Воздуховоды», добавляю АДСК-параметры, кроме Количества и Наименования, системные параметры «Длина» и «Размер». Пока что у нас будет спецификация без наименования, его соберём чуть позже.
С длиной два сценария: считать длину фактическую или накинуть запаса. Рассмотрим оба варианта.
Фактическая длина
Чтобы посчитать фактическую длину, ничего особенного делать не надо — просто добавить параметр «Длина». Он системный, Ревит сам считает длину воздуховода. Однако, если настроить спецификацию, как показано выше, и посмотреть на неё, то длина в ней не считается. Этот блогер сволочь, отписываемся от него!
Стойте-стойте, рано. Дело в том, что у Ревита есть одна особенность: всем числовым параметрам, кроме системного параметра «Число», нужно указывать, что их в спецификации нужно суммировать. Делается это на вкладке «Форматирование». Все новички, абсолютно все, забывают об этом и могут часами искать решение.
Казалось бы, что за неудобная фигня, но в этом есть свой смысл. Если такого выбора не будет, то мы не сможем указать Ревиту, что в ячейке нужно показывать не сумму по всем элементам, а значение для одной позиции. Это нужно, например для столбца с массой. Ведь массу мы указываем не для всех элементов, а массу 1 единицы.
Хотя удобнее было бы, чтобы по умолчанию Ревит считал суммы.
Теперь всё считается без запаса, всё как в модели до миллиметра.
Как видите, у круглых воздуховодов нет значка «м» в единицах измерения. Потому что в свойствах круглых воздуховодов, я не выставил это значение. Выставлю его у одной позиции, и буква появится у всех — потому что это параметр типа.
Чтобы перевести длину в метры, выделю столбец с длиной и нажму на кнопку:
Готово.
Длина с запасом
Чтобы накинуть запаса на длину, нужно создать расчётный параметр. В принципе, об этом я уже рассказывал в своей большой статье про спецификации, можете почитать там. Здесь же просто покажу последовательность действий картинками.
На выходе получаю следующее:
Теперь перейдём к наименованию.
Наименование
Здесь у нас сложности, потому что для воздуховодов нужно ещё и толщину стенки посчитать. В стандартном Ревите в ручном режиме определить толщину стенки можно расчётным параметром, но расчётный параметр нельзя добавить в объединённый параметр, которым мы и будем собирать наименование.
Поэтому сделаем колхозно: наименование будет собираться в нескольких столбиках. Наименование будет состоять из 4-х блоков:
[ Воздуховод из оцинкованной стали ] + [ Размер ] + [ Толщина ] + [ класс герметичности ]
Цель — получить вот такой текст:
Воздуховод из оцинкованной стали 500х200, b=0.7
Воздуховод из оцинкованной стали ø200, b=0.5
Воздуховод из оцинкованной стали 600х400, b=0.7, класс герметичности «В»
Для первого блока воспользуемся параметрами типа воздуховодов. Зайду в свойства воздуховодов и напишу там в «Комментарии к типоразмеру» «Воздуховод из оцинкованной стали».
Второй блок Ревит будет формировать сам. Проверьте, чтобы в Настройках ОВиВК у вас был префикс «ø» для круглого воздуховода.
Толщина и класс герметичности будут расчётными параметрами, но текстовыми.
Класс герметичности нужен всем воздуховодам, которые покрыты огнезащитой. Плюс тем, которые не покрыты, но проходят в шахтах или ещё как-нибудь и должны быть герметичными. Про второй вариант я ничего не расскажу, подумайте сами, как это реализовать по аналогии, покажу только для огнезащиты. Собственно, и первый вариант тоже можно реализовать по-разному, я покажу лишь ход мысли, а реализовать можно иначе (например, забить и применять макросы или скрипты).
Добавляю в спецификацию параметры «Ширина», «Высота», «Диаметр» и «Толщина изоляции» и сортирую по нему, чтобы разделить воздуховоды в изоляции от неизолированных. Я знаю, что воздуховоды у меня либо ничем не покрыты, либо покрыты огнезащитой 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 мм"))))
Что делает эта формула:
- Если толщина изоляции равна 10 мм, то назначает толщину 0,9 мм независимо от размера и сечения воздуховода.
- Если толщина изоляции не равно 10 мм, то проверяет, есть ли галочка в параметр «Круглый воздуховод».
- Если есть, то проверяет диаметр. Если он больше 1000 мм, то вносит толщину 0,9 мм, если больше 250 мм, то 0,7 мм, в остальных случаях — 0,5 мм.
- Если воздуховод не круглый и на нём нем изоляции толщиной 10 мм, то прогоняет его по ширине и высоте.
- Если ширина или высота больше 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_Количество» с запасом, который указан в глобальном параметре Запас.
Для выполнения макроса нужно правильно пользоваться типами воздуховодов в шаблоне, чтобы макрос учитывал огнезащиту.
Профит.
Подписаться на обновления блога и получать ссылки на свежие статьи в Телеграм-канале «Блог Муратова про Revit MEP»
Рассказывать друзьям и коллегам про мой блог
всегда и везде, даже без повода, и уходить в закат
Отблагодарить автора
Я много времени уделяю блогу. Теперь можно отблагодарить меня. Это не обязательно, но такой подарок даст сил продолжать.