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