Как мы знаем, при изменении варианта отчета в СКД, происходит и замена всех его настроек, включая параметры, отборы. Это не очень удобно, т.к. при каждом изменении нужно будет вводить его параметры и отборы вручную. Чтобы выполнить сохранение настроек параметров и отборов при изменении варианта отчета напишем несколько нехитрых строк кода. В качестве примера будет взят ШаблонСКД.epf и в нем доработано сохранение параметров и отборов.
Код следующий:
Краткую информация по шаблону СКД смотрим ЗДЕСЬ>>
Код следующий:
Процедура _СменаВариантаНастройки(Элемент)
Для каждого Настройка Из СхемаКомпоновкиДанных.ВариантыНастроек Цикл
Если Элемент.Текст = Настройка.Представление тогда
// 1. сохраняем текущие настройки варианта отчета
ПредыдущиеНастройки = КомпоновщикНастроек.Настройки;
// 2. загружаем новый вариант отчета
КомпоновщикНастроек.ЗагрузитьНастройки(Настройка.Настройки);
// 3. оставляем старые параметры при изменении варианта отчета
ТекущиеНастройки = КомпоновщикНастроек.Настройки;
Для Каждого текЭлемент Из ПредыдущиеНастройки.ПараметрыДанных.Элементы Цикл
текПараметр = ТекущиеНастройки.ПараметрыДанных.Элементы.Найти(текЭлемент.Параметр);
Если НЕ текПараметр = Неопределено Тогда
ЗаполнитьЗначенияСвойств(текПараметр, текЭлемент);
КонецЕсли;
КонецЦикла;
// 4. оставляем старый отбор
текОтбор = КомпоновщикНастроек.Настройки.Отбор.Элементы;
текОтбор.Очистить();
Для Каждого ЭлементОтбора Из ПредыдущиеНастройки.Отбор.Элементы Цикл
нЭлемент = текОтбор.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЗаполнитьЗначенияСвойств(нЭлемент, ЭлементОтбора);
КонецЦикла;
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Для каждого Настройка Из СхемаКомпоновкиДанных.ВариантыНастроек Цикл
Если Элемент.Текст = Настройка.Представление тогда
// 1. сохраняем текущие настройки варианта отчета
ПредыдущиеНастройки = КомпоновщикНастроек.Настройки;
// 2. загружаем новый вариант отчета
КомпоновщикНастроек.ЗагрузитьНастройки(Настройка.Настройки);
// 3. оставляем старые параметры при изменении варианта отчета
ТекущиеНастройки = КомпоновщикНастроек.Настройки;
Для Каждого текЭлемент Из ПредыдущиеНастройки.ПараметрыДанных.Элементы Цикл
текПараметр = ТекущиеНастройки.ПараметрыДанных.Элементы.Найти(текЭлемент.Параметр);
Если НЕ текПараметр = Неопределено Тогда
ЗаполнитьЗначенияСвойств(текПараметр, текЭлемент);
КонецЕсли;
КонецЦикла;
// 4. оставляем старый отбор
текОтбор = КомпоновщикНастроек.Настройки.Отбор.Элементы;
текОтбор.Очистить();
Для Каждого ЭлементОтбора Из ПредыдущиеНастройки.Отбор.Элементы Цикл
нЭлемент = текОтбор.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЗаполнитьЗначенияСвойств(нЭлемент, ЭлементОтбора);
КонецЦикла;
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Комментариев нет :
Отправить комментарий