Продолжаю цикл статей о создании семейств арматуры, попадающих в одну спецификацию со стандартной арматурой.
мы создали rfa-семейство в категории «Несущая арматура», а во второй части — разобрали принцип создания спецификации, выводящей нужные параметры.
В этой части рассмотрим принцип создания остальных параметров, необходимых нам в спецификации — названия, массы, количества.
Другой способ — создать текстовый параметр, по «типу», и вручную добавить его к типам арматуры и семейств. Этот способ мне тоже не нравится — он увеличивает вероятность ошибки. Есть вероятность того, что человек создаст новый типоразмер, но забудет изменить параметр наименования — с не очень приятными последствиями.
Я предпочитаю потратить больше сил, но сделать так, чтобы система была устойчива к ошибкам. Параметр наименования — «12 А400» — будем вычислять при помощи формулы, точнее, цепочки из if-ов.
Дополнительных расчетных параметров не надо, так как используется единый общий параметр.
Создаю расчетный параметр «НаименованиеРасчетное», тип данных — текст. Напишу формулу, подставляющую нужный текст в зависимости от параметров «АрмКласс» и «ДиаметрРасчетный»:
if(and(АрмКласс = 240, ДиаметрРасчетный = 6 мм), «Ø6 А240», if(and(АрмКласс = 240, ДиаметрРасчетный = 8 мм), «Ø8 А240», if(and(АрмКласс = 240, ДиаметрРасчетный = 10 мм), «Ø10 А240», if(and(АрмКласс = 240, ДиаметрРасчетный = 12 мм), «Ø12 А240», if(and(АрмКласс = 240, ДиаметрРасчетный = 14 мм), «Ø14 А240», if(and(АрмКласс = 240, ДиаметрРасчетный = 16 мм), «Ø16 А240», if(and(АрмКласс = 240, ДиаметрРасчетный = 18 мм), «Ø18 А240», if(and(АрмКласс = 240, ДиаметрРасчетный = 20 мм), «Ø20 А240», if(and(АрмКласс = 400, ДиаметрРасчетный = 10 мм), «Ø10 А400», if(and(АрмКласс = 400, ДиаметрРасчетный = 12 мм), «Ø12 А400», if(and(АрмКласс = 400, ДиаметрРасчетный = 14 мм), «Ø14 А400», if(and(АрмКласс = 400, ДиаметрРасчетный = 16 мм), «Ø16 А400», if(and(АрмКласс = 400, ДиаметрРасчетный = 18 мм), «Ø18 А400», if(and(АрмКласс = 400, ДиаметрРасчетный = 20 мм), «Ø20 А400», if(and(АрмКласс = 400, ДиаметрРасчетный = 22 мм), «Ø22 А400», if(and(АрмКласс = 400, ДиаметрРасчетный = 25 мм), «Ø25 А400», if(and(АрмКласс = 400, ДиаметрРасчетный = 32 мм), «Ø32 А400», if(and(АрмКласс = 400, ДиаметрРасчетный = 40 мм), «Ø40 А400», «Проверьте формулу»))))))))))))))))))
Выглядит страшно, но работает — как из пушки. Для более удобного создания таких формул можно воспользоваться Notepad++ или программкой от Романа Митина.
Должно получиться что-то такое:
Часть 2 — Масса
Обратите внимание — тут я уже создал параметр расчетной длины, по тому же принципу, что и для диаметра — думаю, разберетесь. Длину и диаметр будем использовать для подсчета массы.
Насчет принципа подсчета — опять же, не претендую на истину. Может быть, у вас есть свои способы подсчета массы. Я пользуюсь теми же if-цепочками — тем же способом, что описывал в статье про ведомость расхода стали, но с использованием хитрого округления.
Создаю расчетный параметр «МассПогМетра», в качестве условия использую «ДиаметрРасчетный»:
if(ДиаметрРасчетный = 6 мм, 0.222, if(ДиаметрРасчетный = 8 мм, 0.395, if(ДиаметрРасчетный = 10 мм, 0.617, if(ДиаметрРасчетный = 12 мм, 0.888, if(ДиаметрРасчетный = 14 мм, 1.208, if(ДиаметрРасчетный = 16 мм, 1.578, if(ДиаметрРасчетный = 18 мм, 1.998, if(ДиаметрРасчетный = 20 мм, 2.465, if(ДиаметрРасчетный = 22 мм, 2.984, if(ДиаметрРасчетный = 25 мм, 3.85, if(ДиаметрРасчетный = 28 мм, 4.83, if(ДиаметрРасчетный = 32 мм, 6.31, if(ДиаметрРасчетный = 36 мм, 7.99, if(ДиаметрРасчетный = 40 мм, 9.865, 0))))))))))))))
Создаю параметр «МассаРасчетная», вычисляю массу стержня через длину и массу погонного метра:
if((МассаПогМетра * ДлинаРасчетная) < 1000 мм, 0.01 * roundup(МассаПогМетра * ДлинаРасчетная / 10 мм), 0.1 * roundup(МассаПогМетра * ДлинаРасчетная / 100 мм))
Благодаря использованию округления через формулы я могу выводить массу с округлением до одного или двух знаков после запятой, а также не получу проблем при подсчете итогов.
Часть 3 — Количество
Тот самый столбец, который задавал нам проблем — и сейчас мы его победим!
Во первых, обратим внимание, что в обычной спецификации арматуры мы используем не параметр «Число», а «Количество» — оно и понятно, ведь объект массива арматуры может быть один, а стержней внутри него — несколько. Построим наши семейства по тому же принципу.
Создаю обычное семейство в «Обобщенной модели» с профилем арматуры, который я буду размножать массивом. Это семейство не следует делать общим! Оно нам нужно только для геометрии:
Загружаю этот хомут в свое семейство категории «Несущая арматура». Не общие семейства, как мы помним, при такой загрузке приобретают в проекте свойства «Родительского» семейства, так что все будет управляться вместе.
Создам общий параметр «АрмКоличество», типа «Целое». Добавлю его к семейству. Создаю массив хомутов с использованием этого параметра:
А вот это семейство уже можно сделать «Общим», если планируется подгружать его в какие-то другие семейства-сборки. Кстати, можно делать каждый стержень и отдельным общим семейством, тогда в параметр «АрмКоличество» надо просто вписывать единицу.
Загружаем семейство в проект. Обратите мнение, что из-за того, что отдельные хомуты — не общие семейства, мы не сможем выбрать их при помощи tab.
Вывожу в спецификацию параметр «АрмКоличество». По тому же принципу, что и для «Диаметра», создаю параметр «КоличествоРасчетное»:
КоличествоРасчетное = if(АрмВыполненаСемейством, АрмКоличество, Количество)
Ну вот у нас есть все основные параметры для того, чтобы собрать спецификацию арматуры. Нужно скрыть-передвинуть столбцы, настроить границы и получить что-то такое:
Тут уже дело техники, расскажу как-нибудь в следующий раз :)
Удачи!