среда, 28 сентября 2011 г.

Использование СКД вне отчета

Столкнулся с ситуацией когда надо в табличный документ вывести результат выполнения системы компоновки данных - на первый взгляд все просто, но давайте вместе разберемся шаг за шагом.

1. Необходимо получить нужный макет СКД

СхемаКомпоновкиДанных = ПолучитьМакет(ИмяМакетаСКД);

2. Проинициализировать компоновщик настроек.

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

Можно обойтись и без компоновщика, передавая параметры напрямую, но тогда в настройках необходимо их скрыть, и присваивать напрямую
СхемаКомпоновкиДанных.Параметры.Период.Значение = Период

3. Установить параметры компоновщика настроек

Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Период"));
    Если Не Параметр = Неопределено Тогда
        Параметр.Использование = Истина;
        Параметр.Значение = ЗначениеПараметра;
    КонецЕсли;

4. Получить макет компоновки

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

5. Инициировать процессор компоновки данных, процессор вывода и вывести в коллекцию значений или в табличный документ

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

    ЭлементыФормы.ДокументРезультат.Очистить();

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

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

8 комментариев:

  1. Спасибо, не понимал как в обработке передать "Отбор" из СКД в КомпановщикНастроек, статья помогла разобраться.

    ОтветитьУдалить
  2. Константин спасибо огромное!!!

    ОтветитьУдалить
  3. Константин спасибо, но для решения моей задачи данный метод не сработал.

    ОтветитьУдалить
  4. Этот комментарий был удален автором.

    ОтветитьУдалить
  5. 8.2
    Суть задачи. Нужно изменить внешний вид формы отбора для стандартной формы отчета. Для этого создается общая форма и в нее нужно передать настройки. Ваш метод работает, в отладчике в методе общей формы ПриСозданииНаСервере я вижу как передаются в мой компоновщик настройки, но уже вклиентском методе ПриОткрытии часть настроек, а также интересующие меня настройки отбора мистическим образом пропадают.
    Нашел решение вот тут http://www.develplatform.com/2013/05/blog-post_31.html
    Там все тоже самое, за исключением того что сюда ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных); передается не сама СКД а Адрес во временном хранилище.
    Вот мой код:
    Адрес = Параметры.Адрес; //Адрес временного хранилища
    Источник = Новый ИсточникДоступныхНастроекКомпоновкиДанных(Адрес);
    КомпоновщикНастроек.Инициализировать(Источник);
    И о чудо заработало, дальше уже можно накладывать настройки отбора.

    Потратил не мало часов на решение данного вопроса, ваша статься хорошо проиндексирована гуглом, может кто столкнется с вопросом, аналогичным моему и найдет эту страницу, надеюсь буду тоже полезен :)

    ОтветитьУдалить
  6. Спасибо! Очень помогли!

    ОтветитьУдалить
  7. Премного благодарен, что избавили от создания отчёта.

    ОтветитьУдалить