Передача параметров в вложенную схему не составляет проблем. После того, как создали вложенную схему заходим в настройки и заполняем значения параметров из параметров данных владельца.
После этого в настройке варианта отчета добавляем вложенный отчет. Параметры заполняются автоматически настройками, выполненными на предыдущем шаге.
С помощью этого механизма можно настраивать контекстно-зависимые отчеты, если в значение параметра выбрать реквизит родительского отчета.
Можно сразу здесь настраивать значения параметров без предварительной настройки.
С передачей отбора сложнее и так не получиться. Я решил задачу с помощью процедуры ПриКомпоновкеРезультата()
Текст процедуры:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
ВложеннаяСхема = Неопределено;
СтруктураСКД = КомпоновщикНастроек.Настройки.Структура;
//Сначала убеждаемся, что в варианте отчета есть вложенная схема с нужным наименованием
Для каждого ЭС из СтруктураСКД Цикл
Если ТипЗНЧ(ЭС) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") И ЭС.ИдентификаторОбъекта = "Корректировки" Тогда
ВложеннаяСхема = ЭС;
КонецЕсли;
КонецЦикла;
//ЕСли вложенной схемы нет, то дальше СКД сама работает
Если ВложеннаяСхема = Неопределено Тогда
Возврат;
КонецЕсли;
//Значение отбора сможем получить в пользовательских настройках, но там нет ЛевоеЗначение,
//поэтому формируем соотвествие из настроек отбора по идентификатору чтобы потом определить левое значение
ЭлементыОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы;
ЛевыеЗначения = Новый Соответствие();
Для Каждого ЭлементОтбора из ЭлементыОтбора Цикл
ЛевыеЗначения.Вставить(ЭлементОтбора.ИдентификаторПользовательскойНастройки,ЭлементОтбора.ЛевоеЗначение);
КонецЦикла;
//Перебираем пользовательские настройки и начинаем заполнять отбор вложенной схемы если:
// тип пользовательской настройки = ЭлементОтбораКомпоновкиДанных и элемент отбора используется
ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;
Для каждого настройкаОтбора из ПользовательскиеНастройки Цикл
Если ТипЗНЧ(настройкаОтбора)= Тип("ЭлементОтбораКомпоновкиДанных") Тогда
//Чтобы не зациклилось проверяем на заполненность ИдентификаторПользовательскойНастройки, а в создаваемых элементах отбора это свойство не заполняем.
Если настройкаОтбора.Использование И ЗначениеЗаполнено(настройкаОтбора.ИдентификаторПользовательскойНастройки) Тогда
//Создаем в настройках вложенной схемы элемент отбора и заполняем его
НовыйЭлементОтбора =ВложеннаяСхема.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЗаполнитьЗначенияСвойств(НовыйЭлементОтбора, настройкаОтбора,"ВидСравнения,Использование,ПравоеЗначение");
НовыйЭлементОтбора.ЛевоеЗначение = ЛевыеЗначения.Получить(настройкаОтбора.ИдентификаторПользовательскойНастройки);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
|