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