Отчет на СКД содержит набор данных, который выводится в нескольких группировках. Каждая из группировок фильтрует набор данных (скриншот).

При этом для каждой из группировок задан макет заголовка группировки. Проблема заключается в том, что необходимо выводить этот макет только тогда, когда есть данные для вывода группировки (то есть, не рисовать шапку таблицы тогда, когда нет самой таблицы).

На данный момент заголовок группировки выводится в любом случае, даже если нет отфильтрованных данных набора — получается просто пустая таблица, т.е. шапка без строк.

Поведение повторяется и в случаях, когда не задан макет или фильтр для группировки — то есть дело, по-видимому, в базовой работе движка СКД. Программного доступа к назначению макетов для группировок в зависимости от их содержимого я не нашел, кроме доступа к настройкам компоновщика; однако они работают для всего отчета в целом (например, позволяют программно добавить или убрать шапку).
---
bytecoded, смотри файл. Так пойдет?
---
bytecoded, смотри файл. Так пойдет?
---
Armando, а по какому принципу привязка к макету3 и макету4? тоже думал таким путем, но не смог ни к чему привязаться, чтобы отслеживать пустую группировку
---
spezc, у меня разработка есть которая показывает макеты областей и тело макета компоновки http://infostart.ru/public/291878/
---
+(5) вот что покажет для этого отчета
---
Armando, ого! интерестная работа. забрал и плюсанул)
---
Armando, не вполне понял решение. Я создал справочник, который запрашивает набор данных этого отчета, но получается примерно та же картина: шапка все равно отрисовывается при отсутствии данных самой таблицы. Предлагаемый вариант фильтрации вижу в обработчике компоновки, однако пока не понятно, почему он не срабатывает. Пробую.
---
bytecoded, закомментируй весь код модуля отчета. Что получится?
---
а с учетом этой обработки и данных которые она выводит - я бы не привязывался жестко к имени макета. Я бы ориентировался имена макетов, которые попадают в поле ЭлементРезультата.Макет при каждом проходе цикла.
Обратил внимание сейчас на это: Например Макет7 - это группировка, Макет8 - содержание группировки, Макет9 - следующая группировка.

так вот, если отслеживать номера выводимых макетов при каждом проходе цикла - то в случае, когда содержание группировки Макет7 - пустое - тогда в цикле после макета 7 - будет выведен макет9.

т.е. получаем номер макета - запоминаем. если смотрим следующий номер макета - если он равен Предыдущий+1, тогда выводим предыдущий. если не равен - тогда предыдущий не выводим. суть такая же как и в (3) но другое место для зацепки
---
spezc, верно, жестко привязываться к имени макета не надо, ибо он может меняться в зависимости от настроек. В своих отчетах я сначала по имени группировки нахожу имя макета, и уже от него "танцую".
---
Armando, понял. Осталась проблема с привязкой. Каким образом, отталкиваясь от имени группировки, можно определить имя макета в духе Макет1, Макет2? Т.е. в данном случае мне нужно определить такие имена для своего отчета. Эмпирически определить довольно сложно, их там за полсотни уже перевалило.
---
Каким образом, отталкиваясь от имени группировки, можно определить имя макета в духе Макет1, Макет2?
Рекурсивным обходом тела макета компоновки данных. В моем примере это МакетКомпоновки.Тело
---
+(16) потренеруйся сначала на простых отчетах. Понимание быстрее придет.
---
spezc, подскажите, а как вы определили, что Макет7 группировка, Макет8 — содержание группировки, а Макет9 — следующая группировка?
---
```1c
    <?xml version="1.0" encoding="UTF-8"?>
    <DataCompositionSchema xmlns="http://v8.1c.ru/8.1/data-composition-system/schema" xmlns:dcscom="http://v8.1c.ru/8.1/data-composition-system/common" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <dataSource>
    <name>ИсточникДанных1</name>
    <dataSourceType>Local</dataSourceType>
    </dataSource>
    <dataSet xsi:type="DataSetQuery">
    <name>НаборДанных1</name>
    <field xsi:type="DataSetFieldField">
    <dataPath>Количество</dataPath>
    <field>Количество</field>
    </field>
    <field xsi:type="DataSetFieldField">
    <dataPath>Номенклатура</dataPath>
    <field>Номенклатура</field>
    <title xsi:type="v8:LocalStringType">
    <v8:item>
    <v8:lang>ru</v8:lang>
    <v8:content>1111 Номенклатура</v8:content>
    </v8:item>
    </title>
    </field>
    <field xsi:type="DataSetFieldField">
    <dataPath>Склад</dataPath>
    <field>Склад</field>
    <title xsi:type="v8:LocalStringType">
    <v8:item>
    <v8:lang>ru</v8:lang>
    <v8:content>1111 Склад</v8:content>
    </v8:item>
    </title>
    </field>
    <field xsi:type="DataSetFieldField">
    <dataPath>Характеристика</dataPath>
    <field>Характеристика</field>
    <title xsi:type="v8:LocalStringType">
    <v8:item>
    <v8:lang>ru</v8:lang>
    <v8:content>1111 Характеристика</v8:content>
    </v8:item>
    </title>
    </field>
    <dataSource>ИсточникДанных1</dataSource>
    <query>ВЫБРАТЬ
    "Основной" КАК Склад,
    "Ящик" КАК Номенклатура,
    "Красный" КАК Характеристика,
    1 КАК Количество
    {ВЫБРАТЬ
    Склад,
    Номенклатура,
    Характеристика,
    Количество}

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    "Основной",
    "Бокс",
    "Синий",
    3

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    "Розничный",
    "Сумка",
    "Без цвета",
    1
    {ГДЕ
    ("Розничный") КАК Склад,
    ("Сумка") КАК Номенклатура,
    ("Без цвета") КАК Характеристика,
    (1) КАК Количество}</query>
    <autoFillFields>false</autoFillFields>
    </dataSet>
    <totalField>
    <dataPath>Количество</dataPath>
    <expression>Сумма(Количество)</expression>
    </totalField>
    <settingsVariant>
    <dcsset:name>Основной</dcsset:name>
    <dcsset:presentation xsi:type="xs:string">Основной</dcsset:presentation>
    <dcsset:settings xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows">
    <dcsset:selection>
    <dcsset:item xsi:type="dcsset:SelectedItemField">
    <dcsset:field>Количество</dcsset:field>
    </dcsset:item>
    </dcsset:selection>
    <dcsset:outputParameters>
    <dcscor:item xsi:type="dcsset:SettingsParameterValue">
    <dcscor:parameter>РасположениеИтогов</dcscor:parameter>
    <dcscor:value xsi:type="dcscor:DataCompositionTotalPlacement">None</dcscor:value>
    </dcscor:item>
    <dcscor:item xsi:type="dcsset:SettingsParameterValue">
    <dcscor:parameter>ВыводитьОтбор</dcscor:parameter>
    <dcscor:value xsi:type="dcsset:DataCompositionTextOutputType">DontOutput</dcscor:value>
    </dcscor:item>
    </dcsset:outputParameters>
    <dcsset:item xsi:type="dcsset:StructureItemGroup">
    <dcsset:name>ГруппировкаСклад</dcsset:name>
    <dcsset:groupItems>
    <dcsset:item xsi:type="dcsset:GroupItemField">
    <dcsset:field>Склад</dcsset:field>
    <dcsset:groupType>Items</dcsset:groupType>
    <dcsset:periodAdditionType>None</dcsset:periodAdditionType>
    <dcsset:periodAdditionBegin xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionBegin>
    <dcsset:periodAdditionEnd xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionEnd>
    </dcsset:item>
    </dcsset:groupItems>
    <dcsset:order>
    <dcsset:item xsi:type="dcsset:OrderItemAuto"/>
    </dcsset:order>
    <dcsset:selection>
    <dcsset:item xsi:type="dcsset:SelectedItemAuto"/>
    </dcsset:selection>
    </dcsset:item>
    <dcsset:item xsi:type="dcsset:StructureItemGroup">
    <dcsset:name>ГруппировкаНоменклатура</dcsset:name>
    <dcsset:groupItems>
    <dcsset:item xsi:type="dcsset:GroupItemField">
    <dcsset:field>Номенклатура</dcsset:field>
    <dcsset:groupType>Items</dcsset:groupType>
    <dcsset:periodAdditionType>None</dcsset:periodAdditionType>
    <dcsset:periodAdditionBegin xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionBegin>
    <dcsset:periodAdditionEnd xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionEnd>
    </dcsset:item>
    <dcsset:item xsi:type="dcsset:GroupItemField">
    <dcsset:field>Склад</dcsset:field>
    <dcsset:groupType>Items</dcsset:groupType>
    <dcsset:periodAdditionType>None</dcsset:periodAdditionType>
    <dcsset:periodAdditionBegin xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionBegin>
    <dcsset:periodAdditionEnd xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionEnd>
    </dcsset:item>
    </dcsset:groupItems>
    <dcsset:filter>
    <dcsset:item xsi:type="dcsset:FilterItemComparison">
    <dcsset:left xsi:type="dcscor:Field">Номенклатура</dcsset:left>
    <dcsset:comparisonType>Equal</dcsset:comparisonType>
    <dcsset:right xsi:type="xs:string"/>
    </dcsset:item>
    </dcsset:filter>
    <dcsset:order>
    <dcsset:item xsi:type="dcsset:OrderItemAuto"/>
    </dcsset:order>
    <dcsset:selection>
    <dcsset:item xsi:type="dcsset:SelectedItemAuto"/>
    </dcsset:selection>
    <dcsset:outputParameters>
    <dcscor:item xsi:type="dcsset:SettingsParameterValue">
    <dcscor:parameter>ВыводитьОтбор</dcscor:parameter>
    <dcscor:value xsi:type="dcsset:DataCompositionTextOutputType">DontOutput</dcscor:value>
    </dcscor:item>
    </dcsset:outputParameters>
    </dcsset:item>
    <dcsset:item xsi:type="dcsset:StructureItemGroup">
    <dcsset:name>ГруппировкаХарактеристика</dcsset:name>
    <dcsset:groupItems>
    <dcsset:item xsi:type="dcsset:GroupItemField">
    <dcsset:field>Характеристика</dcsset:field>
    <dcsset:groupType>Items</dcsset:groupType>
    <dcsset:periodAdditionType>None</dcsset:periodAdditionType>
    <dcsset:periodAdditionBegin xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionBegin>
    <dcsset:periodAdditionEnd xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionEnd>
    </dcsset:item>
    </dcsset:groupItems>
    <dcsset:order>
    <dcsset:item xsi:type="dcsset:OrderItemAuto"/>
    </dcsset:order>
    <dcsset:selection>
    <dcsset:item xsi:type="dcsset:SelectedItemAuto"/>
    </dcsset:selection>
    </dcsset:item>
    </dcsset:settings>
    </settingsVariant>
    </DataCompositionSchema>
```

возьми вот эту схему СКД, на ней будет намного легче тренироваться и смотреть что происходит в отладчике
---
попробовал варианты - действительно никак. только при компоновке результата пробегать сформированному табличному документу, и удалять строки по условию (когда есть заголовок, а строка вслед за заголовком группировки пустая). СКД конечно вещь, но со своими нюансами
---
Интересная штука. к сожалению, для проблемного отчета работать не стало — выдало «Поле объекта не обнаружено (Выражение)» на 160-й строке модуля. Это как-то чинится? Тогда можно было бы попробовать предложенный метод на реальном отчете.

По поводу комментирования модуля отчета — тогда стандартный отчет получится, вот такой:
---
bytecoded, к сожалению разработка до конца не отлажена( Пришли мне файл своего отчета, поразбираюсь на досуге.

В отчете для группировки "Уровень" указан заголовок. В стандартном случае он выводится.
А с настройками, если у дочерней группировки нет записей, он выводиться не будет.
---
для проблемного отчета работать не стало — выдало «Поле объекта не обнаружено (Выражение)» на 160-й строке модуля
Можешь написать это в комментарии к разработке (чтоб здесь не оффтопить)? И приложи, пожалуйста, схему СКД. Или напиши какие настройки выполнены влияющие на оформление.
---
Получилось. Метод в третьем сообщении рабочий (с поправкой на сложность СКД в моем частном случае и требований к ее программной обработке, конечно, но логика та же).

Armando, spezc — большое спасибо.