Управление выводом шапки таблицы СКД

Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
1. bytecoded 26 20.10.14 08:08 Сейчас в теме
Отчет на СКД содержит набор данных, который выводится в нескольких группировках. Каждая из группировок фильтрует набор данных (скриншот).

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

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

Поведение повторяется и в случаях, когда не задан макет или фильтр для группировки — то есть дело, по-видимому, в базовой работе движка СКД. Программного доступа к назначению макетов для группировок в зависимости от их содержимого я не нашел, кроме доступа к настройкам компоновщика; однако они работают для всего отчета в целом (например, позволяют программно добавить или убрать шапку).
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
3. Armando 1399 20.10.14 12:26 Сейчас в теме
(1) bytecoded, смотри файл. Так пойдет?
Прикрепленные файлы:
УправлениеВыводомШапкиТаблицыСКД.erf
wizard.ilmir02; bytecoded; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Armando 1399 20.10.14 12:26 Сейчас в теме
(1) bytecoded, смотри файл. Так пойдет?
Прикрепленные файлы:
УправлениеВыводомШапкиТаблицыСКД.erf
wizard.ilmir02; bytecoded; +2 Ответить
4. spezc 782 20.10.14 12:51 Сейчас в теме
(3) Armando, а по какому принципу привязка к макету3 и макету4? тоже думал таким путем, но не смог ни к чему привязаться, чтобы отслеживать пустую группировку
5. Armando 1399 20.10.14 12:53 Сейчас в теме
(4) spezc, у меня разработка есть которая показывает макеты областей и тело макета компоновки http://infostart.ru/public/291878/
6. Armando 1399 20.10.14 13:01 Сейчас в теме
+(5) вот что покажет для этого отчета
Прикрепленные файлы:
7. spezc 782 20.10.14 13:07 Сейчас в теме
(5) Armando, ого! интерестная работа. забрал и плюсанул)
8. bytecoded 26 20.10.14 13:11 Сейчас в теме
(3) Armando, не вполне понял решение. Я создал справочник, который запрашивает набор данных этого отчета, но получается примерно та же картина: шапка все равно отрисовывается при отсутствии данных самой таблицы. Предлагаемый вариант фильтрации вижу в обработчике компоновки, однако пока не понятно, почему он не срабатывает. Пробую.
Прикрепленные файлы:
10. Armando 1399 20.10.14 14:02 Сейчас в теме
(8) bytecoded, закомментируй весь код модуля отчета. Что получится?
9. spezc 782 20.10.14 13:12 Сейчас в теме
а с учетом этой обработки и данных которые она выводит - я бы не привязывался жестко к имени макета. Я бы ориентировался имена макетов, которые попадают в поле ЭлементРезультата.Макет при каждом проходе цикла.
Обратил внимание сейчас на это: Например Макет7 - это группировка, Макет8 - содержание группировки, Макет9 - следующая группировка.

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

т.е. получаем номер макета - запоминаем. если смотрим следующий номер макета - если он равен Предыдущий+1, тогда выводим предыдущий. если не равен - тогда предыдущий не выводим. суть такая же как и в (3) но другое место для зацепки
bytecoded; +1 Ответить
11. Armando 1399 20.10.14 14:04 Сейчас в теме
(9) spezc, верно, жестко привязываться к имени макета не надо, ибо он может меняться в зависимости от настроек. В своих отчетах я сначала по имени группировки нахожу имя макета, и уже от него "танцую".
15. bytecoded 26 20.10.14 14:28 Сейчас в теме
(11) Armando, понял. Осталась проблема с привязкой. Каким образом, отталкиваясь от имени группировки, можно определить имя макета в духе Макет1, Макет2? Т.е. в данном случае мне нужно определить такие имена для своего отчета. Эмпирически определить довольно сложно, их там за полсотни уже перевалило.
16. Armando 1399 20.10.14 14:33 Сейчас в теме
(15)
Каким образом, отталкиваясь от имени группировки, можно определить имя макета в духе Макет1, Макет2?

Рекурсивным обходом тела макета компоновки данных. В моем примере это МакетКомпоновки.Тело
bytecoded; +1 Ответить
17. Armando 1399 20.10.14 14:36 Сейчас в теме
+(16) потренеруйся сначала на простых отчетах. Понимание быстрее придет.
14. bytecoded 26 20.10.14 14:17 Сейчас в теме
(9) spezc, подскажите, а как вы определили, что Макет7 группировка, Макет8 — содержание группировки, а Макет9 — следующая группировка?
18. spezc 782 20.10.14 14:45 Сейчас в теме
<?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>
Показать


возьми вот эту схему СКД, на ней будет намного легче тренироваться и смотреть что происходит в отладчике
bytecoded; +1 Ответить
2. spezc 782 20.10.14 09:30 Сейчас в теме
попробовал варианты - действительно никак. только при компоновке результата пробегать сформированному табличному документу, и удалять строки по условию (когда есть заголовок, а строка вслед за заголовком группировки пустая). СКД конечно вещь, но со своими нюансами
12. bytecoded 26 20.10.14 14:05 Сейчас в теме
Интересная штука. к сожалению, для проблемного отчета работать не стало — выдало «Поле объекта не обнаружено (Выражение)» на 160-й строке модуля. Это как-то чинится? Тогда можно было бы попробовать предложенный метод на реальном отчете.

По поводу комментирования модуля отчета — тогда стандартный отчет получится, вот такой:
Прикрепленные файлы:
13. Armando 1399 20.10.14 14:15 Сейчас в теме
(12) bytecoded, к сожалению разработка до конца не отлажена( Пришли мне файл своего отчета, поразбираюсь на досуге.

В отчете для группировки "Уровень" указан заголовок. В стандартном случае он выводится.
А с настройками, если у дочерней группировки нет записей, он выводиться не будет.
19. Armando 1399 20.10.14 16:12 Сейчас в теме
(12)
для проблемного отчета работать не стало — выдало «Поле объекта не обнаружено (Выражение)» на 160-й строке модуля

Можешь написать это в комментарии к разработке (чтоб здесь не оффтопить)? И приложи, пожалуйста, схему СКД. Или напиши какие настройки выполнены влияющие на оформление.
20. bytecoded 26 21.10.14 13:17 Сейчас в теме
Получилось. Метод в третьем сообщении рабочий (с поправкой на сложность СКД в моем частном случае и требований к ее программной обработке, конечно, но логика та же).

Armando, spezc — большое спасибо.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот