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