|
Создание СКД из ПостроителяОтчета (УФ) | ☑ | ||
---|---|---|---|---|
0
SashaNox
01.04.14
✎
13:58
|
Добрый день! Необходимо на основе ПостроителяОтчета создать схему компоновки с настройками. Вот накопал на форуме информацию, и все же не могу добиться того чтобы у меня появились доступные поля выбора, отбора, порядка и т.д.
Итак, что я делаю: // процедура исполняется на сервере // КомпоновщикНастроек - реквизит формы //1. создаем схему компоновки данных на основе построителя отчета СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных; //1.0 подготовим построитель отчета ПостроительОтчета = ПодготовитьПостроительОтчета(); //1.1 определяем источник данных для схемы //для наших целей - текущая ИБ Источник = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить(); Источник.Имя = "ЛокальнаяБаза"; Источник.СтрокаСоединения = ""; Источник.ТипИсточникаДанных = "Local"; //1.2 определяем набор данных НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); НаборДанных.Имя = "РаботникиОрганизации"; НаборДанных.ИсточникДанных = "ЛокальнаяБаза"; НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина; НаборДанных.Запрос = ПостроительОтчета.Текст; //1.2.1 добавляем поля Для каждого ДоступноеПоле Из ПостроительОтчета.ДоступныеПоля Цикл ПолеСКД = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); ПолеСКД.Заголовок = ДоступноеПоле.Представление; ПолеСКД.ПутьКДанным = ДоступноеПоле.ПутьКДанным; ПолеСКД.ТипЗначения = ДоступноеПоле.ТипЗначения; ПолеСКД.Поле = ДоступноеПоле.Имя; ПолеСКД.ОграничениеИспользования.Группировка = ДоступноеПоле.Измерение; ПолеСКД.ОграничениеИспользования.Условие = ДоступноеПоле.Отбор; ПолеСКД.ОграничениеИспользования.Поле = ДоступноеПоле.Поле; ПолеСКД.ОграничениеИспользования.Порядок = ДоступноеПоле.Порядок; ПолеСКД.ОграничениеИспользованияРеквизитов.Группировка = ДоступноеПоле.Измерение; ПолеСКД.ОграничениеИспользованияРеквизитов.Условие = ДоступноеПоле.Отбор; ПолеСКД.ОграничениеИспользованияРеквизитов.Поле = ДоступноеПоле.Поле; ПолеСКД.ОграничениеИспользованияРеквизитов.Порядок = ДоступноеПоле.Порядок; Если СтруктураФорматаПолей.Свойство(ДоступноеПоле.Имя) Тогда ПолеСКД.Оформление.УстановитьЗначениеПараметра("Формат", СтруктураФорматаПолей[ДоступноеПоле.Имя]); КонецЕсли; КонецЦикла; //1.3 определяем ресурсы // их нет //2. создаем настройки для схемы НастройкиКомпоновкиДанных = СхемаКомпоновкиДанных.НастройкиПоУмолчанию; //2.1 определяем структуру //2.1.1 добавляем группировку "Номенклатура" ГруппировкаДетальныеЗаписи = НастройкиКомпоновкиДанных.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); АвтоПоле = ГруппировкаДетальныеЗаписи.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); АвтоПоле.Использование = Истина; //2.2 определим выбранные поля Для каждого ВыбранноеПолеПО Из ПостроительОтчета.ВыбранныеПоля Цикл ВыбранноеПоле = НастройкиКомпоновкиДанных.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ВыбранноеПоле.Заголовок = ВыбранноеПолеПО.Представление; ВыбранноеПоле.Использование = Истина; ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(ВыбранноеПолеПО.Имя); КонецЦикла; //2.3 определим отборы Для каждого ПолеОтбораПО Из ПостроительОтчета.Отбор Цикл ЭлементОтбора = НастройкиКомпоновкиДанных.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ПолеОтбораПО.Имя); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных[СтрЗаменить(ПолеОтбораПО.ВидСравнения, " ", "")]; ЭлементОтбора.ПравоеЗначение = ПолеОтбораПО.Значение; ЭлементОтбора.Использование = ПолеОтбораПО.Использование; КонецЦикла; //2.4 загрузим настройки // это результат поисков на форуме, и всевозможных (судя по результату наверное не всевозможных) вариантов // где не посмотри - доступные поля содержат только две папки: Параметры и СистемныеПоля КомпоновщикНастроекСервер = Новый КомпоновщикНастроекКомпоновкиДанных; АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных); КомпоновщикНастроекСервер.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы)); КомпоновщикНастроекСервер.ЗагрузитьНастройки(НастройкиКомпоновкиДанных); КомпоновщикНастроек = КомпоновщикНастроекСервер; //3. готовим макет КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); //4. исполняем макет ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(Макет); ПроцессорКомпоновки.Сбросить(); //5. выводим результат ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; ТаблицаЗначений = Новый ТаблицаЗначений; ПроцессорВывода.УстановитьОбъект(ТаблицаЗначений); ПроцессорВывода.Вывести(ПроцессорКомпоновки); Помоги народ! Убил кучу времени уже! |
|||
1
SashaNox
01.04.14
✎
14:34
|
Вопрос закрыт! Разобрался!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |