MCAD Posted March 12, 2021 Report Share Posted March 12, 2021 13 минут назад, dromandon сказал: Судя по всему в той, которая ещё не вышла))) Да Quote Link to comment Share on other sites More sharing options...
Mитька Posted March 16, 2021 Report Share Posted March 16, 2021 В 13.03.2021 в 00:31, MCAD сказал: Да Это 21? Или наработки на 22? Quote Link to comment Share on other sites More sharing options...
MCAD Posted March 16, 2021 Report Share Posted March 16, 2021 8 минут назад, Mитька сказал: Это 21? Или наработки на 22? 21-я Quote Link to comment Share on other sites More sharing options...
MCAD Posted April 12, 2021 Report Share Posted April 12, 2021 К вопросу о использовании комментариев внутри самой таблицы. Комментарии доступны в "Построителе выражений" после создания комментария и закрытия таблицы. После закрытия они появляются в "Инспекторе" и появляются "Построителе выражений". Using cell comments in the same table.dwg 2 Quote Link to comment Share on other sites More sharing options...
MCAD Posted April 30, 2021 Report Share Posted April 30, 2021 В 16.11.2012 в 13:34, Artem_R сказал: MCAD, а не планируется добавить в таблицы функции для работы со строками? Таблицы и так замечательные, а стали бы великолепные. Это увеличило бы возможности вот такой мелкой автоматизации. Оказывается до сих пор актуально: для тех кто не читает справку Добавлено в версии 20.1 в версии 21 ________________ 2 2 Quote Link to comment Share on other sites More sharing options...
MCAD Posted January 1 Report Share Posted January 1 исходник Фабула. Прошедший год, кроме всего прочего, запомнился тем, что многие организации наконец-то закончили этап внедрения BIM (это не мои слова). Видимо, ожидаемо получилось так, что руководство этих организация стало привлекать опытных менеджеров к решению других задач. Ну, и как обычно, в конце года, неожиданно пришла пора выпуска документации. В частности, поднялся вопрос, пронумеровать листы комплекта или как быстро подсчитать количество форматов по тому или иному разделу выполненному разными сотрудниками. Все, представленное ниже, это просто пример. В частном случае блоки, атрибуты обозначения форматов будут отличаться от тех, которыми пользуется в других организациях. Но, надеюсь, что если у Вас возникнет желание, то адаптация под Ваши задачи не займёт много времени. Подготовка шаблона таблицы. Предварительно подготовим таблицу для более удобного использования в платформе nanocad. Добавим «Именованные ячейки» в качестве переменных. H7 – 1-й Раздел H8 – 2-й Раздел H9 – 3-й Раздел H10 – 4-й Раздел H11 – 5-й Раздел H12 – 6-й Раздел В этих переменных мы будем хранить «Марку» раздела. Конечно, можно вводить эти значения непосредственно в выражение, но постараюсь показать наиболее гибкий вариант. J7 – Договор J8 - Разделитель J9 - Предприятие J10- Изделие Формирование отчёта Чертежи одной марки должны располагаться на одной линии (Object.OriginY); 1. В данном примере «Форматы» фильтруются по слою MCAD_ФОРМАТЫ; 2. В колонки «B» и «C» берём значения =rnd(Object."Position Y"/100) и rnd(Object."Position X")) 3. В колонке «С» заранее вводим =count() 4. Теперь мы можем определить, сколько блоков находится в каждом ряду. Для этого открываем диалог «Группировать и объединять» 5. Присвоение чертежам «Марки» происходит на основании индекса строки в столбце “G” как: =iff(off(0;-6)==1;1;iff(off(-1;-5)==off(0;-5);off(-1;0);off(-1;0)+1)) где off(0;-5) объединённая колонка по значению Object."Position Y". Добавляем объединение по «G» 6. Дальнейшее определение марки происходит в колонке «Q», в соответствии с индексом объедения по Object.OriginY и присвоению соответствующего значения переменных This.‘’й-Раздел’’ в виде «Именованная ячейка» как: =Select( off(0;-10)==1;This."1-й Раздел"; off(0;-10)==2;This."2-й Раздел"; off(0;-10)==3;This."3-й Раздел"; off(0;-10)==4;This."4-й Раздел"; off(0;-10)==5;This."5-й Раздел"; off(0;-10)==6;This."6-й Раздел"; TRUE;"Нет раздела") Тут off(0;-10) – колонка “G”, описанная выше; 7. Теперь в колонке “H” мы можем сформировать обозначение =This."Предприятие"+iff(This."Предприятие"=="";"";This."Разделитель")+This."Изделие"+"."+off(0;9)+" (Листы 1..."+off(0;-4)+")" 8. Теперь, когда мы определили, сколько блоков находится в каждом ряду необходимо, пронумеровать их по возрастанию параметра Object."Position X". Для этого в колонку «F» вводим выражение: =iff(off(0;-5)==1;1;iff(off(-1;-4)!=off(0;-4);1;off(-1;0)+1)). Это значит, на самом деле, очень простое действие. Если (iff) ячейка, которая находится (off) в той же строке (0) , на пять колонок влево (-5) равна «1», то пишем «1». Дальше проверяем, если координата «Y » не равна выше стоящей ячейке off(-1;-4)!=off(0;-4) , то ставим «1», если равна, то берём значение верхней ячейки off(-1;0) и прибавляем «1» 9. Определяем порядковый номер страницы в комплекте документации в колонке «М» =iff(This."Отображать номер страницы"==1;off(0;-12)+This."Начальный номер страницы"-1;"") 10. Общее количество страниц начинается с переменной заданной на форме и вычисляется как: iff(This."Отображать номер страницы"==1;row+This."Начальный номер страницы"-1;""); 11. Отображение на чертеже номеров страниц может быть отключено, переменной на форме This."Отображать номер страницы"; дополнительно в колонке «P» добавим проверку для =iff(This."Отображать номер страницы"==TRUE;"Видим";"Скрыт"). Для отображения поля номера страницы. 12. В колонки «I», «J», «K» берём атрибуты блока =Object.NAME_OF_THE_BUILDING =Object.NAMEOFTTHECOMPLEX =Object.NAME_OF_IMAGES Теперь, когда мы определили все необходимые атрибуты, осталось вернуть их значения в блок. В колонку «P»: =ctlSetValue(off(0;1);Object.SHEET_NUMBER)+ctlSetValue(off(0;-1);Object.SHEET_COUNT)+ctlsetValue(off(0;10);Object.DESIGNATION)+ctlsetValue(off(0;11);Object."Выбор1")+ctlSetValue(off(0;8);Object.N_SHEET)+"ctlSetValue" 13. Вид фрагмента основной надписи в первом ряду. 14. Теперь при изменении «Именованной ячейки» H7 (1-й Раздел) или при добавлении, например трёх форматов справа от указанного «Обозначение» пересчитается и листы будут соответствовать нужным значениям 15. Все форматы имеют разный размер, но нам нужно привести их к формату А4. В колонке отчёта «L» вводим: =Select( subLeft(Object."Выбор";9)=="Формат А4";1*iff(subString(Object."Выбор"+" ";10;1)=="x";subString(Object."Выбор";11;1);1); subLeft(Object."Выбор";9)=="Формат А3";2*iff(subString(Object."Выбор"+" ";10;1)=="x";subString(Object."Выбор";11;1);1); subLeft(Object."Выбор";9)=="Формат А2";4*iff(subString(Object."Выбор"+" ";10;1)=="x";subString(Object."Выбор";11;1);1); subLeft(Object."Выбор";9)=="Формат А1";8*iff(subString(Object."Выбор"+" ";10;1)=="x";subString(Object."Выбор";11;1);1); subLeft(Object."Выбор";9)=="Формат А0";16*iff(subString(Object."Выбор"+" ";10;1)=="x";subString(Object."Выбор";11;1);1); TRUE;0) Функция subLeft вернёт только обозначение формата, без кратности Для А3, нужно умножить это значение на 2, для А2 на 4, для А1 на 8 и для А0 на 16. Теперь нужно проверить, если в Object.«Выбор» есть «х» То взять 11-символ из Object.«Выбор» и использовать его в качестве множителя. 16. Добавляем «Итог отчёта» И в колонке: «K» ="Всего листов: "+off(-2;-10) «L» ="Форматов кратно А4: "+" "+summ(section(-1))+" шт." «N» =off(0;-2) Итог Если вы дочитали до этого места то, наверное, уже поняли, что ничего сложного в этом алгоритме нет. Это не программирование как таковое. Вам не нужно ни определять типы данных, ни создавать сложные функции и процедуры. Ничего такого!!! Вам просто нужно мысленно представить каким путём вы достигаете поставленной задачи при обычном проектировании и последовательно реализовать этот алгоритм в виде отчёта. Файл примера можно посмотреть тут 2 Quote Link to comment Share on other sites More sharing options...
MCAD Posted January 10 Report Share Posted January 10 Типовой вопрос: Как значение одного объекта (например блока) учесть в разных колонках отчёта. На чертеже размещены блоки, представляющие из себя «Перекрытия» определенной «Серии». Блоки обладают двумя параметрами «Выбора», «Марка» и «Этаж». Нам нужно подсчитать, сколько блоков, определенной «Марки» размещены по этажам. В примере условно рассмотрено пять этажей и «Подвал», но этот метод позволит Вам расширить возможности отчёта. При необходимости, конечно. 00:14 Открываем заготовку отчета и в меню «Разделы» выбираем «Вставить раздел отчета» 00:22 Нажимаем на «Выбрать исходные объекты» указываем, что нам нужны блоки и, в качестве дополнительного фильтра, задаем «Имя» - «плиты пустотные» 00:36 Последовательно выбирая из контекстного меню , назначаем колонка свойства из атрибутов блока. Колонка «В» - Object."СЕРИЯ" , клонка «С» - Object."МАРКА". В колонке «J» - пишем count(). 01:10 В «Итоге» отчёта вставляем из контекстного меню «Сумма» summ(section(-1)) 01:15 Нажимаем «Группировать и объединять». Перетаскиваем из левой части обозначение колонки «В» и назначаем «Объединять» и «Сортировать по возрастанию». Теперь все ячейки, с одинаковым обозначением «Серии» будут объединены. 01:25 Назначаем для колонки «С» группировку по «Марке». Теперь все строки, объединённые по серии, сгруппированы по «Марке». В колонке «J» автоматически подсчитывается общее количество блоков соответствующей «Марки». 01:36 Временно убираем «Группировку» по «С», чтобы более наглядно продемонстрировать алгоритм подсчёта. 01:40 В колонке «D» вставляем свойство блока (Выбор) «Этаж». В данном случае мы выбрали его из контекстного меню. 01:55 Открываем «Построитель выражений». В этой колонке нам нужно подсчитать, сколько блоков имеют параметр «Этаж» значение «Подвал». Пишем условие, ели значение равно «Подвал», то «1»,если иное значение, то «0» iff(Object."Этаж"=="Подвал";1;0) 02:20 Возвращаем группировку по «С» и видим, что пока мы не получили нужный результат. В колонке появились только значения «0» и «1». 02:28. Снова заходим в «Построитель выражений» и суммируем все значение в сгруппированной строке отчёта. =sum(iff(Object."Этаж"=="Подвал";1;0)) 02:39 Повторяем данное условие для каждого этажа, редактируя значение аргумента Object."Этаж" в зависимости от текущей колонки. 03:30 В данной постановке задача уже решена. Мы имеем возможность подсчитать все «Плиты перекрытия» по этажам, но отображаются все колонки, хотя пока у нас нет «Плит перекрытия» для четвёртого и пятого этажа. Так как мы делаем «универсальный» отчёт, то желательно автоматически скрывать «нулевые» колонки. 03:32 Для этого в «Итоге» отчёта, суммируем значения внутри секции отчёта для колонки «D». 03:33 Открываем «Построитель выражений» и Задаём условие, что если «Итог» колонки равен «0», то и ширина колонки равна «0», иначе назначаем «8» мм. =ctlSetColumnWidth( iff(summ(section(-1))==0;0;8)) 04:02 «Размножаем» данное выражение по колонкам «этажей». Так как ролик делался практически одним дублем и без последующей обработки, то прошу отнестись с пониманием, что иногда приходилось делать откаты ctrl+Z, но это никак не влияет на работу отчёта. 04:32 Теперь колонки с «нулевыми» значениями в «Итоге» отчёта имеют нулевую ширину. 04:45 теперь отчёт практически полностью готов. Но иногда проще и нагляднее, кроме обозначения «Марки», видеть на чертеже «Позицию» вместе длинным обозначением «Марки». Так как это «временный» атрибут, необходимы только в процессе работы и проверки чертежа, дадим проектировщику возможность удобного переключения для его отображения или скрытия. 04:45 Заходим в любую «Скрытую ячейку» и назначаем «Комментарий». В нашем случае это будет ячейка «О2» - «Show Pos» 04:58 В ячейке «N» строки отчёта вводим условие, что если значение в «Комментированной ячейке» равно «1», То пишем «Поз.» + row если нет то «» (пустое значение). =iff(This."Show Pos"==1;"Поз. "+ row;"") 05:41 Теперь нам нужно передать это значение в атрибут блока Object.POSITION. ctlSetValue(off(0;-1);Object.POSITION) Заодно наступим на «грабли» и, получив по лбу при проверке работы отчёта, быстро исправим позже 06:35. 06:18 Проверяем работу отчёта , меняя значение комментированной ячейки. Как мы видим, что у некоторых блоков не меняется значение атрибута POSITION. 06:35 Возвращаемся в редактор и добавляем, =sum(ctlSetValue(off(0;-1);Object.POSITION)) . Теперь значение должно передаваться во все блоки. 07:13 Сохраняем таблицу в базу данных, создав, при необходимости, новую папку в нужном разделе. 07:32 Теперь этот отчёт можно использовать во всех чертежах, где при оформлении документации используются данные блоки «плиты пустотные» 2 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.