Одному отчету может принадлежать несколько схем компоновки данных. Но по какой из них тогда он будет формироваться?

Имеем отчет по продажам:



Добавим в него еще один макет с типом Схема компоновки данных. В схеме опишем какой-нибудь произвольный набор данных и настройки. Ну допустим получение остатка на складах.



Откроем отчет в предприятии и сформируем. Что мы видим? Что отчет сформировался по основной схеме компоновки данных. Как же сделать чтобы отчет формировался по Схеме_2.

Откроем основную форму отчета и добавим кнопку Переключить схему.



Для данной кнопки напишем следующую процедуру-обработчик:

    Список = Новый СписокЗначений;
    Список.Добавить("ОсновнаяСхемаКомпоновкиДанных", "Продажи");
    Список.Добавить("Схема_2", "Остатки");

    ВыбЭлемент = Список.ВыбратьЭлемент();

    Если ВыбЭлемент <> Неопределено Тогда
        СхемаКомпоновкиДанных = ПолучитьМакет(ВыбЭлемент.Значение);
    КонецЕсли;

    //Из схемы возьмем настройки по умолчанию
    Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;

    //Помещаем в переменную данные о расшифровке данных
    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

    //Формируем макет, с помощью компоновщика макета
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

    //Передаем в макет компоновки схему, настройки и данные расшифровки
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
    Настройки, ДанныеРасшифровки);

    //Выполним компоновку с помощью процессора компоновки
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,
    ДанныеРасшифровки);

    //Очищаем поле табличного документа
    Результат = ЭлементыФормы.Результат;
    Результат.Очистить();

    //Выводим результат в табличный документ
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанных
                                                  ВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(Результат);

    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);


Теперь при нажатии на кнопку открывается выбор схемы, после чего происходит формирование отчета.



В дополнение к статье приведу один полезный, на мой взгляд, комент:

Отличный пример!
Но все можно значительно упростить! Если, например, перед формированием отчета по выбраной СКД нужно установить параметры и/или отборы или на форме есть элементы управление, которые связаны с СКД, то можно переопределить предопределенные реквизиты отчета ”СхемаКомпоновкиДанных” и ”КомпоновщикНастроек” на новую СКД. При этом вывод отчета оставить стандартным.

СхемаКомпоновкиДанных = ЭтотОбъект.ПолучитьМакет(””);
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);


P.S. К тому же, если не переопределять ”КомпоновщикНастроек”, то штатные механизмы ”Конструктор настроек…” и ”Настройки…” будут завязаны но основную СКД.

необходимо зарегистрироваться для просмотра ссылки