Определение параметров СКД при открытии отчета в БСП

1. lopatin 683 18.05.18 15:04 Сейчас в теме
Здравствуйте!

В ЗУП 3.1 пытаюсь понять, как в типовых отчетах определяется параметр КлючВарианта.

Обнаружил, что этот параметр, если проверять его из ФормыОтчета в обработчике события ПередЗагрузкойВариантаНаСервере еще не определен, а в обработчике события ПриЗагрузкеВариантаНаСервере уже определен

проверял при помощи функции

ОтчетыКлиентСервер.ПолучитьПараметр(ЭтотОбъект.Отчет.КомпоновщикНастроек, "КлючВарианта").Значение


В обработчик ПередЗагрузкойВариантаНаСервере передаются настройки в которых параметр КлючВарианта определен.

Как так сделать кто-нибудь может подсказать?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. vadim1011985 100 18.05.18 15:46 Сейчас в теме
(1)
В общих формах есть форма "ФормаОтчета" посмотри событие - ПриСозданииНаСервере

	Если Параметры.Свойство("АвтоТест") Тогда
		Возврат;
	КонецЕсли;
	
	// Определение ключевых параметров отчета.
	РежимРасшифровки = (Параметры.Свойство("Расшифровка") И Параметры.Расшифровка <> Неопределено);
	ПравоВывода = ПравоДоступа("Вывод", Метаданные);
	
	ОтчетОбъект     = РеквизитФормыВЗначение("Отчет");
	ОтчетМетаданные = ОтчетОбъект.Метаданные();
	ОтчетПолноеИмя  = ОтчетМетаданные.ПолноеИмя();
	ПредопределенныеВарианты = Новый СписокЗначений;
	Если ОтчетОбъект.СхемаКомпоновкиДанных <> Неопределено Тогда
		Для Каждого Вариант Из ОтчетОбъект.СхемаКомпоновкиДанных.ВариантыНастроек Цикл
			ПредопределенныеВарианты.Добавить(Вариант.Имя, Вариант.Представление);
		КонецЦикла;
	КонецЕсли;
	
	ВариантыПанелиКлючТекущегоВарианта = " - ";
	Если ЗначениеЗаполнено(Параметры.КлючВарианта) Тогда
		КлючТекущегоВарианта = Параметры.КлючВарианта;
	Иначе
		КлючТекущегоВарианта = ОбщегоНазначения.ХранилищеСистемныхНастроекЗагрузить(ОтчетПолноеИмя + "/КлючТекущегоВарианта", "");
	КонецЕсли;
	Если Не ЗначениеЗаполнено(КлючТекущегоВарианта) И ПредопределенныеВарианты.Количество() > 0 Тогда
		КлючТекущегоВарианта = ПредопределенныеВарианты[0].Значение;
	КонецЕсли;
	
	// Предварительная инициализация компоновщика (если требуется).
	АдресСхемы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "АдресСхемы");
	Если РежимРасшифровки И ТипЗнч(Параметры.Расшифровка) = Тип("ОписаниеОбработкиРасшифровкиКомпоновкиДанных") Тогда
		НовыеНастройкиКД = ПолучитьИзВременногоХранилища(Параметры.Расшифровка.Данные).Настройки;
		АдресСхемы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НовыеНастройкиКД.ДополнительныеСвойства, "АдресСхемы");
	КонецЕсли;
	Если ТипЗнч(АдресСхемы) = Тип("Строка") И ЭтоАдресВременногоХранилища(АдресСхемы) Тогда
		СхемаКомпоновкиДанных = ПолучитьИзВременногоХранилища(АдресСхемы);
		Если ТипЗнч(СхемаКомпоновкиДанных) = Тип("СхемаКомпоновкиДанных") Тогда
			АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, УникальныйИдентификатор);
			Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));
		Иначе
			АдресСхемы = ПоместитьВоВременноеХранилище(ОтчетОбъект.СхемаКомпоновкиДанных, УникальныйИдентификатор);
		КонецЕсли;
	Иначе
		АдресСхемы = ПоместитьВоВременноеХранилище(ОтчетОбъект.СхемаКомпоновкиДанных, УникальныйИдентификатор);
	КонецЕсли;
	
	// Сохранение параметров открытия формы.
	ФормаПараметры = Новый Структура(
		"КлючНазначенияИспользования, КлючПользовательскихНастроек,
		|СформироватьПриОткрытии, ТолькоПросмотр,
		|ФиксированныеНастройки, Раздел, Подсистема, ПодсистемаПредставление");
	ЗаполнитьЗначенияСвойств(ФормаПараметры, Параметры);
	ФормаПараметры.Вставить("Отбор", Новый Структура);
	Если ТипЗнч(Параметры.Отбор) = Тип("Структура") Тогда
		ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ФормаПараметры.Отбор, Параметры.Отбор, Истина);
		Параметры.Отбор.Очистить();
	КонецЕсли;
	
	// Определение настроек отчета.
	ТипОтчетаСтрокой = ВариантыОтчетовКлиентСервер.ТипОтчета(Параметры.Отчет, Истина);
	Если ТипОтчетаСтрокой = Неопределено Тогда
		Информация      = ВариантыОтчетов.СформироватьИнформациюОбОтчетеПоПолномуИмени(ОтчетПолноеИмя);
		Параметры.Отчет = Информация.Отчет;
	КонецЕсли;
	НастройкиОтчета = ВариантыОтчетов.НастройкиФормыОтчета(Параметры.Отчет, КлючТекущегоВарианта, ОтчетОбъект);
	НастройкиОтчета.Вставить("РазрешеноВыбиратьВарианты", Истина);
	НастройкиОтчета.Вставить("СхемаМодифицирована", Ложь);
	НастройкиОтчета.Вставить("ПредопределенныеВарианты", ПредопределенныеВарианты);
	НастройкиОтчета.Вставить("АдресСхемы",   АдресСхемы);
	НастройкиОтчета.Вставить("КлючСхемы",    "");
	НастройкиОтчета.Вставить("Контекстный",  ТипЗнч(ФормаПараметры.Отбор) = Тип("Структура") И ФормаПараметры.Отбор.Количество() > 0);
	НастройкиОтчета.Вставить("ПолноеИмя",    ОтчетПолноеИмя);
	НастройкиОтчета.Вставить("Наименование", СокрЛП(ОтчетМетаданные.Представление()));
	НастройкиОтчета.Вставить("ОтчетСсылка",  Параметры.Отчет);
	НастройкиОтчета.Вставить("Внешний",      ТипЗнч(НастройкиОтчета.ОтчетСсылка) = Тип("Строка"));
	НастройкиОтчета.Вставить("Безопасный",   БезопасныйРежим() <> Ложь);
	ОбновитьИнформациюОВариантеОтчета();
	ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(НастройкиОтчета, ВариантыОтчетов.ПараметрыКлиента());
Показать
3. lopatin 683 18.05.18 16:16 Сейчас в теме
Мне нужно не влезая в код типовой формы определить параметр, не знаю в каких событиях это искать. Мой отчет добавлен в подсистему ВариантыОтчетов и использует эту типовую форму. Я в нем в параметрах СКД добавил параметр КлючВарианта, но когда в модуле объекта ПриКомпоновкеРезультата проверяю этот параметр он пустой. Соответственно его надо определять. Полез смотреть, как делают в типовых отчетах, там в какой-то момент при открытии формы отчета это происходит.
4. lopatin 683 10.06.18 15:58 Сейчас в теме
Нашел, как параметр "КлючВарианта" задается
В типовых отчетах он отмечается, как Ограниченного использования, на вкладке параметры варианта отчета, отображаются ограниченные к использованию параметры и ему задается строковое значение равное имени варианта.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот