0. veretennikoff 30 15.03.14 19:06 Сейчас в теме

Внешняя универсальная панель отчетов для управляемых форм (открытый код)

Внешняя универсальная панель отчетов для управляемых форм (открытый код)


Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. Zord 15.04.14 15:47 Сейчас в теме
При открытии выдает

{ВнешняяОбработка.ВнешняяПанельОтчетов.МодульОбъекта(2,29)}: Переменная с указанным именем уже определена (ДополнительныеОтчетыИОбработки)
Перем ПараметрыРегистрации, <<?>>ДополнительныеОтчетыИОбработки, ДополнительныеОтчетыИОбработкиКлиентСервер;
{ВнешняяОбработка.ВнешняяПанельОтчетов.МодульОбъекта(2,61)}: Переменная с указанным именем уже определена (ДополнительныеОтчетыИОбработкиКлиентСервер)
Перем ПараметрыРегистрации, ДополнительныеОтчетыИОбработки, <<?>>ДополнительныеОтчетыИОбработкиКлиентСервер;
2. veretennikoff 30 30.04.14 10:20 Сейчас в теме
(1) Zord, очень странно..
я пробовал на УТ 11, БСП и нескольких самописных - такой ошибки не возникало
напишите хоть какая конфигурация у вас, чтобы я мог проверить
3. veretennikoff 30 13.11.14 17:45 Сейчас в теме
4. ray-xp 18 01.04.19 13:45 Сейчас в теме
Замечательная панель.Однако обнаружил, если отчетов в конфигурации много, например в УПП, то строится медленно из-за перебора всех отчетов конфигурации и проверки вхождения в подсистему, и так для каждой подсистемы .
Подправил процедуру ОбновитьПанельОтчетов
Так работает быстрее
&НаСервере
Процедура ОбновитьПанельОтчетов(Отказ = ложь, ИмяПодсистемы)
	
	Если Элементы.ГруппаОсновная.ПодчиненныеЭлементы.Количество() Тогда
		//Удаляем все вложенные в нее элементы
		ПодчиненныеЭлементыОсновнойГруппы = Элементы.ГруппаОсновная.ПодчиненныеЭлементы;
		КолвоЭлементов = ПодчиненныеЭлементыОсновнойГруппы.Количество();
		Для Сч=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 тогда
		//	Продолжить;
		//КонецЕсли;
		//
		УИ = "ГруппаРаздела_" + СтрокаГруппировки.Группировка;
		Группа = ДобавитьГруппу(УИ, Элементы.ГруппаОсновная, СтрокаГруппировки.ГруппировкаПредставление, Истина);
		ВывестиСслыкиНаВариантыОтчетов(СтрокаГруппировки, Группа);
	КонецЦикла;
	
	//Если СгруппированныйСписокВариантовОтчетов.Строки.Найти("СмТакже", "Группировка") <>  Неопределено Тогда
	//	//Элементы.ГруппаСмТакже.БыстрыйДоступ = Истина;
	//	СтрокаГруппировки = СтрокаГруппировкаСмТакже;
	//	Элементы.ГруппаСмТакжеСпискиОтчетов.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная;
	//	ВывестиСслыкиНаВариантыОтчетов(СтрокаГруппировки, Элементы.ГруппаСмТакжеСпискиОтчетов);
	//КонецЕсли;
	
КонецПроцедуры           
Показать
5. veretennikoff 30 16.04.19 16:27 Сейчас в теме
(4) да, спасибо. Это было давно, я был молод)
наверняка есть, что-то еще, что можно оптимизировать..
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Консультант-аналитик 1С
Рязань
зарплата до 80 000 руб.
Полный день

Программист 1С
Калининград
зарплата от 60 000 руб. до 80 000 руб.
Полный день

Программист 1С
Рязань
зарплата от 90 000 руб.
Полный день

Программист/Cтарший программист 1С
Москва
зарплата от 100 000 руб. до 250 000 руб.
Полный день

Программист 1С
Красноярск
зарплата от 50 000 руб.
По совместительству