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

14.07.21

Разработка - СКД

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

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

 

 

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

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

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

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

 


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

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

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

 

 

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

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

 

 

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

 

 

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

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


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

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

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

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

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

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

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


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

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


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

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

На этом всё!

 

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

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

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

 

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

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

Вступайте в нашу телеграмм-группу Инфостарт

СКД отчёт параметры ПриКомпоновкеРезультата

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    248224    1374    421    

1134

Инструментарий разработчика СКД Программист 1С 8.3 Бесплатно (free)

В этой статье представлен СКДБилдер — общий модуль-обёртка над объектной моделью СКД, который сокращает код в 3-4 раза и делает его читаемым.

29.01.2026    5426    297    shapa_pro    25    

66

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.

29.10.2025    16521    ovetgana    112    

106

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Описан способ заполнения списка доступных значений для полей наборов данных и параметров в схеме компоновки данных для любых конфигураций (с использованием БСП или без).

01.07.2025    9539    krasnoshchekovpavel    5    

67

СКД Программист Стажер 1С:Предприятие 8 Россия Бесплатно (free)

Несколько способов управления формами выбора параметров и отборов СКД.

10.04.2025    8770    Neti    0    

41

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Хорошая отчетная форма - сродни искусству. Есть какое-то невероятное эстетическое удовольствие в том, чтобы разобраться в логике учета и анализируемых показателях, спроектировать архитектуру хранения данных так, чтобы оптимально собрать эти показатели вместе с аналитическими разрезами в запросе, а затем настроить отображение так, чтобы, глядя на результат, сразу было понятно, что это за отчет и какие задачи он призван решать. Система компоновки данных - это моя первая, главная и, наверное, единственная "рабочая" любовь. Ее я использую везде, где только можно и где нельзя тоже. Хочу поделиться с вами некоторыми практическими приемами в работе с отчетами на СКД, которые, надеюсь, будут полезны.

27.02.2025    15772    ovetgana    50    

93

СКД Программист 1С:Предприятие 8 Бесплатно (free)

СКД – инструмент, на базе которого в современных конфигурациях реализованы практически все отчеты. СКД используется в динамических списках, печатных формах и универсальных механизмах. Если построить простейший отчет может каждый разработчик, то с нюансами знакомы далеко не все. Расскажем о неочевидных на первый взгляд приемах, способных значительно повысить качество отчетов.

24.12.2024    13353    Akcium    17    

46

СКД Механизмы типовых конфигураций Запросы Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    9879    AlexeyPROSTO_1C    1    

32
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ixijixi 2138 15.07.21 11:25 Сейчас в теме
Я по другому делаю, если нужно скрыть какие-либо группировки - добавляю в пользовательские настройки
Прикрепленные файлы:
armeec; Date; unknow_user; shima; jobkostya1c_ERP; ilnarefr; tsmult; SagittariusA; insurgut; 0x00; DrAku1a; echo77; olja-ljaaa; +13 Ответить
3. olja-ljaaa 41 15.07.21 12:19 Сейчас в теме
(1)
Здравствуйте!

В статье описана возможность скрытия блоков, состоящих из нескольких реквизитов. Т.е нужно скрывать не один реквизит, а именно блок (набор реквизитов).
Есть ли штатная возможность скрытия именно блока реквизитов?

С уважением, Оля-ля
4. ixijixi 2138 15.07.21 12:21 Сейчас в теме
(3) Скрывается вся группировка (блок по вашему =)) со всеми реквизитами.
TeMochkiN; SagittariusA; 0x00; DrAku1a; echo77; yghmd; olja-ljaaa; +7 Ответить
6. DrAku1a 1790 26.07.21 07:02 Сейчас в теме
(1) В настройках отчета (в дереве группировок - корень) ставим на отборы включать в состав пользовательских настроек и быстрый доступ - в результате пользователю выводится поле со списком группировок, в котором можно их менять местами и включать/выключать отдельные.
ИМХО, удобнее такое давать, а далее- каждый под себя настраивает вариантами (но чаще всего - копируют друг у друга)...
7. 0x00 27.08.21 09:03 Сейчас в теме
(6) Да, тоже вариант
2. olja-ljaaa 41 15.07.21 12:18 Сейчас в теме
5. ixijixi 2138 15.07.21 14:31 Сейчас в теме
8. user1569375 07.09.22 17:20 Сейчас в теме
Нашел способ чуть проще

Для Каждого Эл Из ЭтотОбъект.КомпоновщикНастроек.Настройки.Выбор.Элементы Цикл
		Если Эл.Заголовок = "Выручка и оплата" Тогда
			Эл.Использование = ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[1].Значение;  //Выручка и оплата  
			Продолжить;
		КонецЕсли;
		Если Эл.Заголовок = "Себестоимость" Тогда
			Эл.Использование = ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[2].Значение;  //Себестоиомость
			Продолжить;
		КонецЕсли;	
		Если Эл.Заголовок = "ПроцентНаценки" Тогда
			Эл.Использование = ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[3].Значение;  //ПроцентНаценки
			Продолжить;
		КонецЕсли;
    КонецЦикла;
Показать
t278; triviumfan; evkireev; jobkostya1c_ERP; +4 Ответить
9. olja-ljaaa 41 12.09.22 11:13 Сейчас в теме
(8)Спасибо большое, что поделились.
Возьму на заметку!
10. UPKA 24.01.23 16:37 Сейчас в теме
(8) А можно полностью код модуля объекта посмотреть?
Для отправки сообщения требуется регистрация/авторизация