Добавить
Уведомления

Простой способ получения отчета для объектов по разным атрибутам в разных колонках

На чертеже размещены блоки, представляющие из себя «Перекрытия» определенной «Серии». Блоки обладают двумя параметрами «Выбора», «Марка» и «Этаж». Нам нужно подсчитать, сколько блоков, определенной «Марки» размещены по этажам. В примере условно рассмотрено пять этажей и «Подвал», но этот метод позволит Вам расширить возможности отчёта. При необходимости, конечно. Тело документа: https://cloud.mail.ru/public/cdZV/u9Jit3omq 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 Теперь этот отчёт можно использовать во всех чертежах, где при оформлении документации используются данные блоки «плиты пустотные»

Иконка канала MCAD
46 подписчиков
12+
67 просмотров
год назад
12+
67 просмотров
год назад

На чертеже размещены блоки, представляющие из себя «Перекрытия» определенной «Серии». Блоки обладают двумя параметрами «Выбора», «Марка» и «Этаж». Нам нужно подсчитать, сколько блоков, определенной «Марки» размещены по этажам. В примере условно рассмотрено пять этажей и «Подвал», но этот метод позволит Вам расширить возможности отчёта. При необходимости, конечно. Тело документа: https://cloud.mail.ru/public/cdZV/u9Jit3omq 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 Теперь этот отчёт можно использовать во всех чертежах, где при оформлении документации используются данные блоки «плиты пустотные»

, чтобы оставлять комментарии