Отчет на СКД содержит набор данных, который выводится в нескольких группировках. Каждая из группировок фильтрует набор данных (скриншот).
При этом для каждой из группировок задан макет заголовка группировки. Проблема заключается в том, что необходимо выводить этот макет только тогда, когда есть данные для вывода группировки (то есть, не рисовать шапку таблицы тогда, когда нет самой таблицы).
На данный момент заголовок группировки выводится в любом случае, даже если нет отфильтрованных данных набора — получается просто пустая таблица, т.е. шапка без строк.
Поведение повторяется и в случаях, когда не задан макет или фильтр для группировки — то есть дело, по-видимому, в базовой работе движка СКД. Программного доступа к назначению макетов для группировок в зависимости от их содержимого я не нашел, кроме доступа к настройкам компоновщика; однако они работают для всего отчета в целом (например, позволяют программно добавить или убрать шапку).
(3) Armando, а по какому принципу привязка к макету3 и макету4? тоже думал таким путем, но не смог ни к чему привязаться, чтобы отслеживать пустую группировку
(3) Armando, не вполне понял решение. Я создал справочник, который запрашивает набор данных этого отчета, но получается примерно та же картина: шапка все равно отрисовывается при отсутствии данных самой таблицы. Предлагаемый вариант фильтрации вижу в обработчике компоновки, однако пока не понятно, почему он не срабатывает. Пробую.
а с учетом этой обработки и данных которые она выводит - я бы не привязывался жестко к имени макета. Я бы ориентировался имена макетов, которые попадают в поле ЭлементРезультата.Макет при каждом проходе цикла.
Обратил внимание сейчас на это: Например Макет7 - это группировка, Макет8 - содержание группировки, Макет9 - следующая группировка.
так вот, если отслеживать номера выводимых макетов при каждом проходе цикла - то в случае, когда содержание группировки Макет7 - пустое - тогда в цикле после макета 7 - будет выведен макет9.
т.е. получаем номер макета - запоминаем. если смотрим следующий номер макета - если он равен Предыдущий+1, тогда выводим предыдущий. если не равен - тогда предыдущий не выводим. суть такая же как и в (3) но другое место для зацепки
(9) spezc, верно, жестко привязываться к имени макета не надо, ибо он может меняться в зависимости от настроек. В своих отчетах я сначала по имени группировки нахожу имя макета, и уже от него "танцую".
(11) Armando, понял. Осталась проблема с привязкой. Каким образом, отталкиваясь от имени группировки, можно определить имя макета в духе Макет1, Макет2? Т.е. в данном случае мне нужно определить такие имена для своего отчета. Эмпирически определить довольно сложно, их там за полсотни уже перевалило.
попробовал варианты - действительно никак. только при компоновке результата пробегать сформированному табличному документу, и удалять строки по условию (когда есть заголовок, а строка вслед за заголовком группировки пустая). СКД конечно вещь, но со своими нюансами
Интересная штука. к сожалению, для проблемного отчета работать не стало — выдало «Поле объекта не обнаружено (Выражение)» на 160-й строке модуля. Это как-то чинится? Тогда можно было бы попробовать предложенный метод на реальном отчете.
По поводу комментирования модуля отчета — тогда стандартный отчет получится, вот такой:
(12) bytecoded, к сожалению разработка до конца не отлажена( Пришли мне файл своего отчета, поразбираюсь на досуге.
В отчете для группировки "Уровень" указан заголовок. В стандартном случае он выводится.
А с настройками, если у дочерней группировки нет записей, он выводиться не будет.
для проблемного отчета работать не стало — выдало «Поле объекта не обнаружено (Выражение)» на 160-й строке модуля
Можешь написать это в комментарии к разработке (чтоб здесь не оффтопить)? И приложи, пожалуйста, схему СКД. Или напиши какие настройки выполнены влияющие на оформление.
Получилось. Метод в третьем сообщении рабочий (с поправкой на сложность СКД в моем частном случае и требований к ее программной обработке, конечно, но логика та же).