Каталог решений - СКД: скрываем нужные группы (блоки) по требованию пользователя

СКД: скрываем нужные группы (блоки) по требованию пользователя

СКД: скрываем нужные группы (блоки) по требованию пользователя

В наличии

Видимость блоков в определённой группе, регулируемая пользователем в отчёте СКД.

Категория:

Описание

Цель: реализовать возможность скрывать блок колонок пользователем в отчёте, как показано на рисунках:

 

 

Отчёт выполнен на базе схемы компоновки данных (СКД).

Написан запрос, для выборки нужных данных. Он индивидуален, поэтому его нет смысла представлять.

Описание самого "увлекательного" процесса настройки СКД представлено ниже.

В параметры СКД вынесены необходимые параметры:

 

В данном случае, — Аналитика, ОбъектЭксплуатации и Управленческий. 

В настройках СКД отчёт состоит из двух группировок: дополнительной информации и детальных записей.
В дополнительной информации выводится заголовок отчёта, а в детальных записях — его данные.
Обратим внимание, что в настройках отчёта необходимо вывести параметры: Аналитика, Объект эксплуатации и Управленческие аналитики.

Это показана на рисунке:

 

 

 Зададим первоначальные значения этих параметров. В нашем случае, значение принимает следующий вид: "Ложь".

В детальных записях (вкладка Выбранные поля) выведены колонки отчёта и созданы группы, которые, в зависимости от выбранных пользователем параметров, будут выводиться в отчёт:

 

 

Не забываем, что эти параметры необходимо включить в пользовательские настройки:

 

 

На этом "увлекательный" процесс закончен. Перейдём к написанию кода для реализации скрытия нужных блоков (полный текст процедур можно найти после описания).

Достаточно много времени заняла отладка кода, чтобы попасть в нужный блок и установить свойство "Использование".
Все манипуляции будут проходить в модуле объекта отчёта, в процедуре "ПриКомпоновкеРезультата".

Итак, что мы делаем:

1) получаем пользовательские настройки элементов и структуры отчёта

  ПараметрыОтчета_ЗначениеПараметраНастроекКомпоновкиДанных = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;
  ПараметрыОтчета_ГруппировкаКомпоновкиДанных = КомпоновщикНастроек.Настройки.Структура;

2) создаём параметры видимости колонок

  ПараметрАналитика = Новый ПараметрКомпоновкиДанных("Аналитика");
  ПараметрОбъект = Новый ПараметрКомпоновкиДанных("ОбъектЭксплуатации");
  ПараметрУправленческий = Новый ПараметрКомпоновкиДанных("Управленческий");

3) для удобства отладки вынесли названия выводимых заголовков (блоков)     

  ЗаголовокВыводимойКолонкиАналитики = "Аналитика";
  ЗаголовокВыводимойКолонкиОбъект = "ОбъектЭксплуатации";
  ЗаголовокВыводимойКолонкиУправленческий = "УправленческиеАналитики";

    
4) перебираем параметры отчёта, получаем текущие значения видимости и обращаемся именно к нужному блоку отчёта с детальными записями. Если выбираемый блок относится к группе с заголовком "Расшифровки", а именно в этом блоке содержатся скрываемые колонки, то применяем процедуру "ОтображениеБлокаКолонок" для манипуляций с видимостью
 

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

5) манипуляции с видимостью заключаются в том, что в зависимости от установленного значения параметра видимости, свойство "Использование" принимает необходимое значение.

  Процедура ОтображениеБлокаКолонок(Параметр,Заголовок,ВидимостьКолонки,ЭлементыПараметров)
      //для выбранной колонки отключаем использование
      Если ЭлементыПараметров.Заголовок=Заголовок Тогда 
          ЭлементыПараметров.Использование = ВидимостьКолонки;
      Иначе
          ЭлементыПараметров.Использование = НЕ ВидимостьКолонки;
      КонецЕсли;
  КонецПроцедуры

На этом всё!

 

Полный код реализации:
 

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

 

Комментарии, пожелания приветствуются!

С уважением, Оля-ля.

has been added to your cart:
Оформление заказа