|
СКД: Инициализация СКД созданной программно. Свойство "параметры | ☑ | ||
---|---|---|---|---|
0
fedbka
29.06.12
✎
08:45
|
Доброе утро, уважаемые коллеги.
Пожалуйста, подскажите, каким образом можно проинициализировать СКД созданую программно на подобию того, как это делает конструктор схемы компоновки данных. Поясню суть задачи. Есть некий справочник, в элементах которого, в определенном реквизите, содержится текст запроса (текст запроса разный и заранее не известный - от самых простых до сложных). Необходимо при открытии элемента справочника создавать схему компоновки данных и предоставлять пользователю инструменты (элементы диалога) для редактирования значений параметров запроса. Не получается без открытия конструктора схемы компоновки данных предоставить пользователю элемент диалога для редактирования параметров запроса, так как не нашел способа проинициализоровать созданную программно схему компоновки данных. Свойство "Параметры" схемы компоновки данных не заполнено, и не нашел способа программно простым способом заполнить данное свойство. Но если открыть схему компоновки данных в конструкторе компоновки данных, ничего не изменяя, сразу закрыть конструктор, то свойство параметры заполняется. Подскажите, каким способо можно выполнить аналогичное действие без открытия схемы компоновки данных в конструкторе. Поясню на примере следующего программного кода ваполняющего программное создание схемы компоновки данных: // Инициализирует схему компоновки данных, компоновщик настроек компоновки данных и макет компоновки данных согласно // переданных параметров // Процедура ИницализироватьСхемуНастройкиМакетКомпоновки(СхемаКомпоновкиДанных, КомпоновщикНастроек, МакетКомпоновкиДанных, НастройкиКомпоновщика = Неопределено, ТекстЗапросаКомпоновки = "") // Создадим новую схему компоновки данных СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных; ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить(); ИсточникДанных.Имя = "ИсточникДанных1"; ИсточникДанных.ТипИсточникаДанных = "Local"; НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); НаборДанных.Имя = "НаборДанных1"; НаборДанных.ИсточникДанных = ИсточникДанных.Имя; НаборДанных.Запрос = ТекстЗапросаКомпоновки; КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); // Заполним выбранные поля структуры схемы компоновки данных Для Каждого ДоступноеПоле из КомпоновщикНастроек.Настройки.ДоступныеПоляВыбора.Элементы Цикл // не включаем в выбранные поля системные и служебные поля Если ДоступноеПоле.Поле = Новый ПолеКомпоновкиДанных("СистемныеПоля") ИЛИ ДоступноеПоле.Поле = Новый ПолеКомпоновкиДанных("ПараметрыДанных") Тогда Продолжить; КонецЕсли; ВыбранноеПоле = СхемаКомпоновкиДанных.НастройкиПоУмолчанию.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ЗаполнитьЗначенияСвойств(ВыбранноеПоле, ДоступноеПоле); ВыбранноеПоле.Использование = Истина; КонецЦикла; // Добавим группировку "Детальные записи" Группировка = СхемаКомпоновкиДанных.НастройкиПоУмолчанию.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); Группировка.Использование = Истина; ПолеГруппировки = Группировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); ПолеГруппировки.Использование = Истина; // Если сейчас посмотреть на значение свойства "Параметры" переменной СхемаКомпоновкиДанных, // то мы увидим что оно пустое. // загрузим в настройки компоновщика настройки схемы компоновки Если ЗначениеЗаполнено(НастройкиКомпоновщика) Тогда КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКомпоновщика); КомпоновщикНастроек.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.ПроверятьДоступность); Иначе КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); КонецЕсли; КонецПроцедуры // ИницализироватьСхемуНастройкиМакетКомпоновки // Однако если мы выполним вызов конструктора схемы компоновки данных // Процедура КоманднаяПанельТекстЗапросаОткрытьСхемуКомпоновкиДанных(Кнопка) Конструктор = Новый КонструкторСхемыКомпоновкиДанных; Конструктор.УстановитьСхему(мСхемаКомпоновкиДанныхПроизвольногоЗапроса); Конструктор.Редактировать(ЭтаФорма); КонецПроцедуры // КоманднаяПанельТекстЗапросаОткрытьСхемуКомпоновкиДанных() // ЕСЛИ посмотрим на значение параметры схемы компоновки данных после закрытия конструктора // (никаких изменений в конструкторе не вносилось, сразу же закрыли окно) // Процедура ОбработкаВыбора(ЗначениеВыбора, Источник) Если ТипЗнч(Источник) = Тип("КонструкторСхемыКомпоновкиДанных") Тогда мСхемаКомпоновкиДанныхПроизвольногоЗапроса = Источник.ПолучитьСхему(); // ЕСЛИ СЕЙЧАС ПОСМОТРИМ НА СВОЙСТВО ПАРАМЕТРЫ - ТЕМИ ПАРАМЕТРАМИ КОТОРЫЕ ВСТРЕЧАЮТСЯ В ЗАПРОСЕ. // КАК ЭТО СДЕЛАТЬ ПРОГРАММНО БЕЗ ВЫЗОВА КОНСТРУКТОРА СХЕМЫ КОМПОНОВКИ ДАННЫХ // Снимаем ограничение использования параметров Для Каждого Параметр из мСхемаКомпоновкиДанныхПроизвольногоЗапроса.Параметры Цикл Параметр.ОграничениеИспользования = Ложь; КонецЦикла; КомпоновщикНастроекПроизвольногоЗапроса.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(мСхемаКомпоновкиДанныхПроизвольногоЗапроса)); КомпоновщикНастроекПроизвольногоЗапроса.ЗагрузитьНастройки(мСхемаКомпоновкиДанныхПроизвольногоЗапроса.НастройкиПоУмолчанию); мМакетКомпоновкиДанныхПроизвольногоЗапроса= ПолучитьМакетКомпоновкиДанных(мСхемаКомпоновкиДанныхПроизвольногоЗапроса, КомпоновщикНастроекПроизвольногоЗапроса.ПолучитьНастройки()); НаборДанных = мСхемаКомпоновкиДанныхПроизвольногоЗапроса.НаборыДанных.Найти("НаборДанных1"); Если НаборДанных <> Неопределено Тогда ТекстЗапроса = НаборДанных.Запрос; УстановитьТекстЗапросаВЭлементеФормы(); КонецЕсли; КонецЕсли; КонецПроцедуры // ОбработкаВыбора() |
|||
1
fedbka
29.06.12
✎
15:41
|
Неужели никто программно не создавал СКД и не заполнял её параметры?
P.S. Или я слишком не понятно написал? |
|||
2
zinch
29.06.12
✎
16:12
|
[Не получается без открытия конструктора схемы компоновки данных предоставить пользователю элемент диалога для редактирования параметров запроса] - создай отчет. Заполняй скд из справочника и открывай его программно.
|
|||
3
fedbka
29.06.12
✎
16:28
|
(2) Не прокатит. Схема то программно создана - элемент формы связанный с компоновщиком настроек не покажет их так как свойство "Видимость" в коллекции "ДоступныеПараметры..." свойства "Настройки" установлено будетв Ложь (доступ только чтение).
|
|||
4
fedbka
29.06.12
✎
17:09
|
(0) Прошу прощения коллеги за большое количество текста, вопрос снят.
После инициализации компоновщика настроек на основе схемы компоновки данных, созданной программной на базе текста запроса с параметрами, в компоновщике настроек данные параметры доступны и их нужно программно добавить с схему компоновки данных (Свойство "Параметры"). КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); ПараметрыДанныхКомпоновщикаНастроек = КомпоновщикНастроек.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы; // Заполним список параметров схемы компоновки данных по данным доступных параметрок компоновщика настроек Для Каждого ПараметрКомпоновщика ИЗ ПараметрыДанныхКомпоновщикаНастроек Цикл ПараметрСхемыКомпоновкиДанных = СхемаКомпоновкиДанных.Параметры.Добавить(); ЗаполнитьЗначенияСвойств(ПараметрСхемыКомпоновкиДанных, ПараметрКомпоновщика); ПараметрСхемыКомпоновкиДанных.ВключатьВДоступныеПоля = Ложь; ПараметрСхемыКомпоновкиДанных.Имя = ПараметрКомпоновщика.Заголовок; ПараметрСхемыКомпоновкиДанных.ОграничениеИспользования = Ложь; КонецЦикла; КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); После этого элемент формы связанный с компоновщиком настроек (Настройки.ПараметрыДанных) отображает и позволяет редактировать параметры. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |