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