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С и бухучета
Санкт-Петербург
По совместительству

Ведущий программист 1С
Омск
зарплата от 70 000 руб. до 110 000 руб.
Полный день

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

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

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