Как правильно настроить вывод подвала и шапки в отчете СКД, чтобы данные не дублировались?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Проблема 1: Подвал отчета не отображается или игнорируется

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

Нюансы кэширования внешних отчетов. Одной из неочевидных причин является механизм работы 1С с внешними файлами (.erf). Когда вы открываете отчет через меню «Файл — Открыть», платформа может кэшировать старую схему компоновки. Если вы внесли изменения в макет, а отчет не обновился, попробуйте переименовать сам объект отчета в конфигураторе или перезапустить сеанс. Также эффективным методом является регистрация отчета в справочнике «Дополнительные отчеты и обработки», что принудительно заставляет систему перечитать структуру.

Настройка видимости пустой группировки. Если группировка не содержит выбранных полей из набора данных, СКД может посчитать её «пустой» и не выводить вовсе. Чтобы исправить это, выполним следующие шаги:

  1. Перейдем на вкладку Настройки в СКД.
  2. Выберем нашу группировку (например, «Подвал»).
  3. На вкладке Другие настройки найдем параметр Вариант использования группировки.
  4. Установим значение Дополнительная информация. Это укажет системе, что данная ветка предназначена для оформления.
  5. В поле Расположение группировок выберем значение Конец.

Проблема 2: Дублирование подвала или шапки

Часто встречается ошибка, когда текст «Ответственный: ________» выводится после каждой строки отчета. Это происходит из-за неправильной иерархии в дереве настроек. Проанализируем структуру: если ваша группировка «Подвал» находится внутри детальных записей или другой группировки с данными, она будет повторяться для каждой итерации родительской группы.

Правильное расположение группировок:

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

  1. Отчет (корневой элемент)
    1. Заголовок (пустая группировка с макетом шапки)
    2. ОсновнаяГруппировкаДанных (ваша таблица или список)
    3. Подвал (пустая группировка с макетом подписи)

Если же вам нужно вывести информацию в шапке, которая привязана к набору данных, но должна отображаться один раз (например, дата формирования), воспользуемся свойством Количество записей. В настройках конкретной группировки на вкладке «Другие настройки» установим значение 1. Это принудительно ограничит вывод области первой найденной записью.

Работа с макетами: заголовок и подвал

Важно различать типы макетов, которые мы добавляем на закладке Макеты. Рассмотрим подробнее:

Проанализируем ситуацию с выводом параметров (например, ФИО ответственного). Если в макете вы указали параметр Ответственный, но ячейка остается пустой, проверьте вкладку Выбранные поля именно для этой группировки («Подвал»). Даже если поле есть в общем наборе данных, оно должно быть явно добавлено в выбранные поля группировки, чтобы СКД рассчитала его значение для данной области.

Программный метод вывода подвала

В некоторых сложных случаях, когда стандартные настройки макетов СКД не позволяют добиться нужного расположения, мы можем прибегнуть к программному выводу в модуле объекта отчета. Разберем, как это реализовать через процедуру ПриКомпоновкеРезультата.

Этот метод позволяет нам полностью контролировать процесс формирования табличного документа. Посмотрим на пример кода:


Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	// Инициализируем схему и настройки
	Схема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	Настройки = КомпоновщикНастроек.ПолучитьНастройки();
	
	// Компонуем результат
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, ДанныеРасшифровки);
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(Результат);
	
	// Выводим основную часть отчета
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	
	// Теперь программно добавляем область подвала из макета
	МакетОбъект = ПолучитьМакет("МакетОформления"); // Если есть отдельный макет
	ОбластьПодвал = МакетОбъект.ПолучитьОбласть("Подпись");
	
	// Заполняем параметры области, если они есть
	ОбластьПодвал.Параметры.Ответственный = Пользователи.ТекущийПользователь();
	
	// Присоединяем область к итоговому документу
	Результат.Вывести(ОбластьПодвал);
	
КонецПроцедуры

Использование метода Вывести() в конце процедуры гарантирует, что ваша подпись появится ровно один раз в самом низу отчета, независимо от количества строк и сложности иерархии группировок СКД.

Использование Общих итогов для вывода подвала

Еще один профессиональный способ вывода подвала — использование макета для Общих итогов. Рассмотрим этот вариант подробнее:

В СКД есть системная группировка «Общие итоги», которая по умолчанию располагается в конце отчета. Мы можем создать макет именно для подвала общих итогов. Для этого:

  1. На закладке Макеты нажмем «Добавить макет группировки».
  2. В поле «Группировка» оставим пустое значение (что означает общие итоги) или выберем конкретную группировку.
  3. Установим тип макета — Подвал общих итогов.
  4. Укажем область из табличного документа.

Этот способ является наиболее «чистым» с точки зрения методологии СКД, так как не требует создания искусственных пустых группировок-заглушек в структуре настроек.

Подведем итог: для корректного вывода подвала и шапки в СКД необходимо следить за уровнем иерархии группировок, использовать настройки Вариант использования группировки и Количество записей, а также не забывать о возможных проблемах с кэшированием внешних файлов при разработке.

← На главную