среда, 27 июля 2011 г.

Динамическое добавление полей во внешнем наборе СКД

Система компоновки данных отлично выводит результат группировки таблицу значений, но она не умеет выводить результат таблицы значений. В таком случае можно получить детальные записи, а таблицу значений собрать уже при выводе в другой СКД

Процедура ВывестиНаборДанных(НаборДанных);

    ВнешниеНаборыДанных = Новый Структура;
    ВнешниеНаборыДанных.Вставить("НаборДанных", НаборДанных);

    СхемаКомпоновкиДанныхДляВывода = ПолучитьМакет("МакетДляВывода");
    Настройки = СхемаКомпоновкиДанныхДляВывода.НастройкиПоУмолчанию;

    // {{ динамическое добавление колонок валютных сумм
    Валюты = НаборДанных.Скопировать();
    Валюты.Свернуть("Валюта", "СуммаУпр");
    Валюты.Сортировать("СуммаУпр Убыв");

    Для Каждого Валюта Из Валюты Цикл
        ИмяПоля         = "Сумма" + Валюта.Валюта.Наименование;
        ЗаголовокПоля   = "Сумма, " + Валюта.Валюта.Наименование;

        // добавить в набор данных
        НоваяКолонка = НаборДанных.Колонки.Добавить(ИмяПоля, ОМОбщегоНазначения.ПолучитьОписаниеТиповЧисла(10, 2));

        // добавить в поля данных
        ПоляДанных = СхемаКомпоновкиДанныхДляВывода.НаборыДанных[0].Поля;
        НовоеПолеДанных = ПоляДанных.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
        НовоеПолеДанных.Поле = ИмяПоля;
        НовоеПолеДанных.Заголовок = ЗаголовокПоля;
        НовоеПолеДанных.ТипЗначения = ОМОбщегоНазначения.ПолучитьОписаниеТиповЧисла(10, 2);

        // добавить в ресурсы
        НовоеПолеИтога = СхемаКомпоновкиДанныхДляВывода.ПоляИтога.Добавить();
        НовоеПолеИтога.ПутьКданным = ИмяПоля;
        НовоеПолеИтога.Выражение   = "Сумма(" + ИмяПоля + ")";

        // добавить в настройки
        НовоеПоле = СхемаКомпоновкиДанныхДляВывода.НастройкиПоУмолчанию.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
        НовоеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
        НовоеПоле.Заголовок = ЗаголовокПоля;
        НовоеПоле.Использование = Истина;
    КонецЦикла;

    // переместить ресурсы по порядку
    ЭлементыНастройки = СхемаКомпоновкиДанныхДляВывода.НастройкиПоУмолчанию.Выбор.Элементы;
    Для Каждого ПолеНастройка Из ЭлементыНастройки Цикл
        Если Строка(ПолеНастройка.Поле) = "КатегорияА" Тогда
            ПолеКатегорияА = ПолеНастройка;
        ИначеЕсли Строка(ПолеНастройка.Поле) = "КатегорияВ" Тогда
            ПолеКатегорияВ = ПолеНастройка;
        ИначеЕсли Строка(ПолеНастройка.Поле) = "КатегорияС" Тогда
            ПолеКатегорияС = ПолеНастройка;
        КонецЕсли;
    КонецЦикла;

    ЭлементыНастройки.Сдвинуть(ПолеКатегорияА, ЭлементыНастройки.Количество() - ЭлементыНастройки.Индекс(ПолеКатегорияА));
    ЭлементыНастройки.Сдвинуть(ПолеКатегорияВ, ЭлементыНастройки.Количество() - ЭлементыНастройки.Индекс(ПолеКатегорияВ));
    ЭлементыНастройки.Сдвинуть(ПолеКатегорияС, ЭлементыНастройки.Количество() - ЭлементыНастройки.Индекс(ПолеКатегорияС));

    // заполнить валюты
    Для Каждого Строка Из НаборДанных Цикл
        Строка["Сумма" + Строка.Валюта.Наименование] = Строка.Сумма;
    КонецЦикла;
    // }} динамическое добавление колонок валютных сумм

    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
    ДанныеРасшифровки.Настройки = Настройки;

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

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

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

КонецПроцедуры

1 комментарий:

  1. The Lucky Club: Live Casino Review
    The Lucky Club review covers all luckyclub things live like the roulette table, video poker tables, and video poker rooms. Read our comprehensive review to find out Casino Name: The Lucky ClubCasino: Live CasinoOnline Since: 1997 Rating: 5 · ‎Review by LuckyClub.org

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