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