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