Замечательная панель.Однако обнаружил, если отчетов в конфигурации много, например в УПП, то строится медленно из-за перебора всех отчетов конфигурации и проверки вхождения в подсистему, и так для каждой подсистемы .
Подправил процедуру ОбновитьПанельОтчетов
Так работает быстрее
&НаСервере
Процедура ОбновитьПанельОтчетов(Отказ = ложь, ИмяПодсистемы)
Если Элементы.ГруппаОсновная.ПодчиненныеЭлементы.Количество() Тогда
//Удаляем все вложенные в нее элементы
ПодчиненныеЭлементыОсновнойГруппы = Элементы.ГруппаОсновная.ПодчиненныеЭлементы;
КолвоЭлементов = ПодчиненныеЭлементыОсновнойГруппы.Количество();
Для Сч=1 По КолвоЭлементов Цикл
Элементы.Удалить(ПодчиненныеЭлементыОсновнойГруппы.Получить(КолвоЭлементов-Сч));
КонецЦикла;
КонецЕсли;
ТекущаяПодсистема = Неопределено;
Найдена = Ложь;
Для Каждого Подсистема Из Метаданные.Подсистемы Цикл
Найдена = ПроверитьПодсистему(Подсистема, ИмяПодсистемы);
Если Найдена Тогда
ТекущаяПодсистема = Подсистема;
Прервать;
КонецЕсли;
КонецЦикла;
МассивПодсистем = Новый Массив;
НайтиВложенныеПодсистемы(МассивПодсистем,ТекущаяПодсистема);
МассивПодсистем.Добавить(ТекущаяПодсистема);
СделатьИменаУникальными(МассивПодсистем);
МассивЭлементов = Новый Массив;
Для каждого ЭлементГруппыСсылка из Элементы.ГруппаОсновная.ПодчиненныеЭлементы Цикл
Если ЭлементГруппыСсылка.Имя = "КартинкаОтчета" тогда
Продолжить;
КонецЕсли;
МассивЭлементов.Добавить(ЭлементГруппыСсылка);
КонецЦикла;
Для каждого ЭлементГруппыСсылка из Элементы.ГруппаСмТакжеСпискиОтчетов.ПодчиненныеЭлементы Цикл
МассивЭлементов.Добавить(ЭлементГруппыСсылка);
КонецЦикла;
Для каждого ЭлементГруппыСсылка из МассивЭлементов Цикл
Элементы.Удалить(ЭлементГруппыСсылка);
КонецЦикла;
МассивКоманд = Новый Массив;
Для каждого Команда из Команды Цикл
Если Команда.Имя = "ОбщийСписокВариантовОтчетов" тогда
Продолжить;
КонецЕсли;
МассивКоманд.Добавить(Команда);
КонецЦикла;
Для каждого Команда из МассивКоманд Цикл
Если Команда.Имя = "ИзменитьВариантОтображения" ИЛИ Команда.Имя = "Назад" Тогда
Продолжить;
КонецЕсли;
Команды.Удалить(Команда);
КонецЦикла;
СгруппированныйСписокВариантовОтчетов = Новый ДеревоЗначений;
СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Ключ");
СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Представление");
СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Описание");
СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Группировка");
СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("ГруппировкаПредставление");
СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Сортировка");
СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("БыстрыйДоступ");
ТекПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
Для Каждого ПодсистемаИзМассива Из МассивПодсистем Цикл
// уровень 0
СтрокаГруппировкиОтчета = СгруппированныйСписокВариантовОтчетов.Строки.Добавить();
СтрокаГруппировкиОтчета.Группировка = Строка(ПодсистемаИзМассива.ПолноеИмя());
СтрокаГруппировкиОтчета.ГруппировкаПредставление = Строка(ПодсистемаИзМассива.Синоним);
// уровень 1
Запрос = Новый Запрос;
Сч = 1;
ТекстЗапроса = "";
УстановитьПривилегированныйРежим(Истина);
//{{ ray
лСостав = ПодсистемаИзМассива.Состав;
//Для Каждого Отчет Из Отчеты Цикл
Для Каждого лОобъектМД Из лСостав Цикл
Если Лев(лОобъектМД.ПолноеИмя(),3)<>"Отч" Тогда
Продолжить;
КонецЕсли;
Отчет = Отчеты[лОобъектМД.Имя];
//}} ray
ОтчетОбъект = Отчет.Создать();
ПредставлениеОтчета = ОтчетОбъект.Метаданные().Синоним;
ИмяОтчета = СтрЗаменить(Отчет,"ОтчетМенеджер.","");
Если Не ПравоДоступа("Просмотр", ОтчетОбъект.Метаданные(), ТекПользователь) Тогда
Продолжить;
КонецЕсли;
//{{ ray
////отобразим отчеты только входящие в данную подсистему
//Если Не ПодсистемаИзМассива.Состав.Содержит(ОтчетОбъект.Метаданные()) Тогда
// Продолжить;
//КонецЕсли;
//}} ray
Если ОтчетОбъект.СхемаКомпоновкиДанных=Неопределено ИЛИ Не ОтображатьВариантыОтчетов Тогда
ТекстЗапроса = ТекстЗапроса + ?(Сч=1,"ВЫБРАТЬ","ОБЪЕДИНИТЬ ВЫБРАТЬ")+Символы.ПС
+ "#П1"
+ПредставлениеОтчета
+ "#П1"
+?(Сч=1," КАК НаименованиеВарианта,",",")
+Символы.ПС
+ "#П1"
+"Отчет." + ИмяОтчета
+ "#П1"
+?(Сч=1," КАК ПутьКВарианту","")
+Символы.ПС;
Иначе
Для Каждого Вариант Из ОтчетОбъект.СхемаКомпоновкиДанных.ВариантыНастроек Цикл
ТекстЗапроса = ТекстЗапроса + ?(Сч=1,"ВЫБРАТЬ","ОБЪЕДИНИТЬ ВЫБРАТЬ")+Символы.ПС
+ "#П1"
+ПредставлениеОтчета+": " + Вариант.Представление
+ "#П1"
+?(Сч=1," КАК НаименованиеВарианта,",",")
+Символы.ПС
+ "#П1"
+"Отчет." + ИмяОтчета + "\" + Вариант.Имя
+ "#П1"
+?(Сч=1," КАК ПутьКВарианту","")
+Символы.ПС;
Сч = Сч+1;
КонецЦикла;
КонецЕсли;
Сч = Сч+1;
КонецЦикла;
УстановитьПривилегированныйРежим(Ложь);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, """", """""");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#П1", """");
Запрос.Текст = ТекстЗапроса;
Если Запрос.Текст="" Тогда
Продолжить;
КонецЕсли;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ПодСтрокаГруппировкиОтчета = СтрокаГруппировкиОтчета.Строки.Добавить();
ПодСтрокаГруппировкиОтчета.БыстрыйДоступ = Истина;
ПодСтрокаГруппировкиОтчета.Группировка = Выборка.НаименованиеВарианта;
ПодСтрокаГруппировкиОтчета.Ключ = Выборка.ПутьКВарианту;
ПодСтрокаГруппировкиОтчета.Описание = "";
ПодСтрокаГруппировкиОтчета.Представление = Выборка.НаименованиеВарианта;
ПодСтрокаГруппировкиОтчета.Сортировка = Выборка.НаименованиеВарианта;
КонецЦикла;
КонецЦикла;
//// пока не надо
//// на уровень 0 добавим еще одну кнопку
//СтрокаГруппировкиОтчета = СгруппированныйСписокВариантовОтчетов.Строки.Добавить();
//СтрокаГруппировкиОтчета.Группировка = "СмТакже";
//СтрокаГруппировкиОтчета.ГруппировкаПредставление = "См. также";
//СтрокаГруппировкиОтчета.БыстрыйДоступ = Истина;
//СтрокаГруппировкаСмТакже = СтрокаГруппировкиОтчета;
Элементы.ГруппаОсновная.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
Для Каждого СтрокаГруппировки из СгруппированныйСписокВариантовОтчетов.Строки Цикл
//// Пропустить группу "См. также"
//Если Найти(СтрокаГруппировки.Группировка, "СмТакже") > 0 тогда
// Продолжить;
//КонецЕсли;
//
УИ = "ГруппаРаздела_" + СтрокаГруппировки.Группировка;
Группа = ДобавитьГруппу(УИ, Элементы.ГруппаОсновная, СтрокаГруппировки.ГруппировкаПредставление, Истина);
ВывестиСслыкиНаВариантыОтчетов(СтрокаГруппировки, Группа);
КонецЦикла;
//Если СгруппированныйСписокВариантовОтчетов.Строки.Найти("СмТакже", "Группировка") <> Неопределено Тогда
// //Элементы.ГруппаСмТакже.БыстрыйДоступ = Истина;
// СтрокаГруппировки = СтрокаГруппировкаСмТакже;
// Элементы.ГруппаСмТакжеСпискиОтчетов.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная;
// ВывестиСслыкиНаВариантыОтчетов(СтрокаГруппировки, Элементы.ГруппаСмТакжеСпискиОтчетов);
//КонецЕсли;
КонецПроцедуры
Показать