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