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