Цель: реализовать возможность скрывать блок колонок пользователем в отчёте, как показано на рисунках:
Отчёт выполнен на базе схемы компоновки данных (СКД).
Написан запрос, для выборки нужных данных. Он индивидуален, поэтому его нет смысла представлять.
Описание самого "увлекательного" процесса настройки СКД представлено ниже.
В параметры СКД вынесены необходимые параметры:
В данном случае, - Аналитика, ОбъектЭксплуатации и Управленческий.
В настройках СКД отчёт состоит из двух группировок: дополнительной информации и детальных записей.
В дополнительной информации выводится заголовок отчёта, а в детальных записях - его данные.
Обратим внимание, что в настройках отчёта необходимо вывести параметры: Аналитика, Объект эксплуатации и Управленческие аналитики.
Это показана на рисунке:
Зададим первоначальные значения этих параметров. В нашем случае, значение принимает следующий вид: "Ложь".
В детальных записях (вкладка Выбранные поля) выведены колонки отчёта и созданы группы, которые, в зависимости от выбранных пользователем параметров, будут выводиться в отчёт:
Не забываем, что эти параметры необходимо включить в пользовательские настройки:
На этом "увлекательный" процесс закончен. Перейдём к написанию кода для реализации скрытия нужных блоков (полный текст процедур можно найти после описания).
Достаточно много времени заняла отладка кода, чтобы попасть в нужный блок и установить свойство "Использование".
Все манипуляции будут проходить в модуле объекта отчёта, в процедуре "ПриКомпоновкеРезультата".
Итак, что мы делаем:
1) получаем пользовательские настройки элементов и структуры отчёта
ПараметрыОтчета_ЗначениеПараметраНастроекКомпоновкиДанных = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;
ПараметрыОтчета_ГруппировкаКомпоновкиДанных = КомпоновщикНастроек.Настройки.Структура;
2) создаём параметры видимости колонок
ПараметрАналитика = Новый ПараметрКомпоновкиДанных("Аналитика");
ПараметрОбъект = Новый ПараметрКомпоновкиДанных("ОбъектЭксплуатации");
ПараметрУправленческий = Новый ПараметрКомпоновкиДанных("Управленческий");
3) для удобства отладки вынесли названия выводимых заголовков (блоков)
ЗаголовокВыводимойКолонкиАналитики = "Аналитика";
ЗаголовокВыводимойКолонкиОбъект = "ОбъектЭксплуатации";
ЗаголовокВыводимойКолонкиУправленческий = "УправленческиеАналитики";
4) перебираем параметры отчёта, получаем текущие значения видимости и обращаемся именно к нужному блоку отчёта с детальными записями. Если выбираемый блок относится к группе с заголовком "Расшифровки", а именно в этом блоке содержатся скрываемые колонки, то применяем процедуру "ОтображениеБлокаКолонок" для манипуляций с видимостью
Для каждого ПараметрОтчетаКД Из ПараметрыОтчета_ЗначениеПараметраНастроекКомпоновкиДанных Цикл
ВидимостьАналитика = ПараметрыОтчета_ЗначениеПараметраНастроекКомпоновкиДанных.Получить(4).Значение;
ВидимостьОбъект = ПараметрыОтчета_ЗначениеПараметраНастроекКомпоновкиДанных.Получить(5).Значение;
ВидимостьУправленческий = ПараметрыОтчета_ЗначениеПараметраНастроекКомпоновкиДанных.Получить(6).Значение;
Если ТипЗнч(ПараметрОтчетаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") И ПараметрОтчетаКД.Параметр = ПараметрАналитика Тогда
Для каждого ПараметрОтчетаГруппировка ИЗ ПараметрыОтчета_ГруппировкаКомпоновкиДанных Цикл
Если ТипЗнч(ПараметрОтчетаГруппировка) = Тип("ГруппировкаКомпоновкиДанных") И ПараметрОтчетаГруппировка.Имя = "Данные" Тогда
Для Каждого ЭлементыПараметров Из ПараметрОтчетаГруппировка.Выбор.Элементы Цикл
Если ЭлементыПараметров.Заголовок = "Расшифровки" Тогда
ОтображениеБлокаКолонок(ПараметрАналитика,ЗаголовокВыводимойКолонкиАналитики,ВидимостьАналитика,ЭлементыПараметров.Элементы[0]);
ОтображениеБлокаКолонок(ПараметрОбъект,ЗаголовокВыводимойКолонкиОбъект,ВидимостьОбъект,ЭлементыПараметров.Элементы[1]);
ОтображениеБлокаКолонок(ПараметрУправленческий,ЗаголовокВыводимойКолонкиУправленческий,ВидимостьУправленческий,ЭлементыПараметров.Элементы[2]);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
5) манипуляции с видимостью заключаются в том, что в зависимости от установленного значения параметра видимости, свойство "Использование" принимает необходимое значение.
Процедура ОтображениеБлокаКолонок(Параметр,Заголовок,ВидимостьКолонки,ЭлементыПараметров)
//для выбранной колонки отключаем использование
Если ЭлементыПараметров.Заголовок=Заголовок Тогда
ЭлементыПараметров.Использование = ВидимостьКолонки;
Иначе
ЭлементыПараметров.Использование = НЕ ВидимостьКолонки;
КонецЕсли;
КонецПроцедуры
На этом всё!
Полный код реализации:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
ПараметрыОтчета_ЗначениеПараметраНастроекКомпоновкиДанных = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;
ПараметрыОтчета_ГруппировкаКомпоновкиДанных = КомпоновщикНастроек.Настройки.Структура;
//параметры для видимости колонок
ПараметрАналитика = Новый ПараметрКомпоновкиДанных("Аналитика");
ПараметрОбъект = Новый ПараметрКомпоновкиДанных("ОбъектЭксплуатации");
ПараметрУправленческий = Новый ПараметрКомпоновкиДанных("Управленческий");
//названия выводимых колонок в отчёте
ЗаголовокВыводимойКолонкиАналитики = "АналитикаПоСтанциям";
ЗаголовокВыводимойКолонкиОбъект = "ОбъектЭксплуатации";
ЗаголовокВыводимойКолонкиУправленческий = "УправленческиеАналитики";
Для каждого ПараметрОтчетаКД Из ПараметрыОтчета_ЗначениеПараметраНастроекКомпоновкиДанных Цикл
ВидимостьАналитика = ПараметрыОтчета_ЗначениеПараметраНастроекКомпоновкиДанных.Получить(4).Значение;
ВидимостьОбъект = ПараметрыОтчета_ЗначениеПараметраНастроекКомпоновкиДанных.Получить(5).Значение;
ВидимостьУправленческий = ПараметрыОтчета_ЗначениеПараметраНастроекКомпоновкиДанных.Получить(6).Значение;
Если ТипЗнч(ПараметрОтчетаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") И ПараметрОтчетаКД.Параметр = ПараметрАналитика Тогда
Для каждого ПараметрОтчетаГруппировка ИЗ ПараметрыОтчета_ГруппировкаКомпоновкиДанных Цикл
Если ТипЗнч(ПараметрОтчетаГруппировка) = Тип("ГруппировкаКомпоновкиДанных") И ПараметрОтчетаГруппировка.Имя = "Данные" Тогда
Для Каждого ЭлементыПараметров Из ПараметрОтчетаГруппировка.Выбор.Элементы Цикл
Если ЭлементыПараметров.Заголовок = "Расшифровки" Тогда
ОтображениеБлокаКолонок(ПараметрАналитика,ЗаголовокВыводимойКолонкиАналитики,ВидимостьАналитика,ЭлементыПараметров.Элементы[0]);
ОтображениеБлокаКолонок(ПараметрОбъект,ЗаголовокВыводимойКолонкиОбъект,ВидимостьОбъект,ЭлементыПараметров.Элементы[1]);
ОтображениеБлокаКолонок(ПараметрУправленческий,ЗаголовокВыводимойКолонкиУправленческий,ВидимостьУправленческий,ЭлементыПараметров.Элементы[2]);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ОтображениеБлокаКолонок(Параметр,Заголовок,ВидимостьКолонки,ЭлементыПараметров)
//для выбранной колонки отключаем использование
Если ЭлементыПараметров.Заголовок=Заголовок Тогда
ЭлементыПараметров.Использование = ВидимостьКолонки;
Иначе
ЭлементыПараметров.Использование = НЕ ВидимостьКолонки;
КонецЕсли;
КонецПроцедуры
Комментарии, пожелания приветствуются!
С уважением, Оля-ля.