![]() |
![]() |
![]() |
|
8.2 Как вытащить отбор программно созданной СКД на форму? | ☑ | ||
---|---|---|---|---|
0
Bugmenot
22.03.10
✎
13:57
|
В 8.1 можно было делать удобный отбор элементов из произвольного источника, т.е. на форму вытаскивалось табличное поле с типом Построитель.Отбор и затем делалось примерно так:
Построитель.Текст="ВЫБРАТЬ Ссылка ИЗ Справочник."+Источник; Построитель.ЗаполнитьНастройки(); После чего пользователь получал возможность устанавливать нужные ему отборы в форме, а программист мог легко получить список элементов, удовлетворяющих отбору: Построитель.Выполнить(); СписокЭлементов=Построитель.Результат.Выгрузить(); А вот как все это провернуть в 8.2, используя СКД?... У меня никак не получается заполнить доступные поля отбора, там пусто... Вот код: &НаСервере Процедура ИнициализироватьНастройки(Источник) ОписаниеМетаданных="Справочник.Номенклатура"; СКД = Новый СхемаКомпоновкиДанных; ИД = СКД.ИсточникиДанных.Добавить(); ИД.Имя = "Источник"; ИД.ТипИсточникаДанных = "Local"; НаборДанных = СКД.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); НаборДанных.Имя = "Запрос"; НаборДанных.Запрос="ВЫБРАТЬ * ИЗ " + ОписаниеМетаданных; НаборДанных.ИсточникДанных="Источник"; НаборДанных.АвтоЗаполнениеДоступныхПолей=Истина; НастройкиВыбора.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД)); КонецПроцедуры |
|||
1
Bugmenot
22.03.10
✎
13:59
|
+(1) НастройкиВыбора - это реквизит типа "КомпоновщикНастроекКомпоновкиДанных"
|
|||
2
Mort
22.03.10
✎
14:04
|
Во-первых отбор в СКД может быть отдельный для различных группировок. В общем случае устанавливается для верхней.
По программному добавлению отбора: КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД)); Настройки = КомпоновщикНастроек.ПолучитьНастройки(); ВыбранноеПоле = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ВыбранноеПоле.Использование=Истина; ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Ссылка"); // ТЕПЕРЬ ПО ПОЛЮ ССЫЛКА МОЖНО ДЕЛАТЬ ОТБОР |
|||
3
Bugmenot
22.03.10
✎
14:16
|
(2) То есть получается, что имея просто текст запроса типа "ВЫБРАТЬ * ", доступные поля для отбора не заполнить автоматически никак? Только перебирать что-то?... Не очень понятно что, кстати.
|
|||
4
Asmody
22.03.10
✎
14:19
|
как-бэ идеологически неверно "заполнять" СКД программно. правильнее будет сделать несколько макетов и использовать нужный
|
|||
5
Mort
22.03.10
✎
14:20
|
(3) Запрос тут при чем? Это просто один из возможных источников данных. Чтобы задавать отбор, в группировку должны быть выбраны поля.
|
|||
6
Mort
22.03.10
✎
14:23
|
(4) А если запрос на "этапе компиляции" не определен?
|
|||
7
Bugmenot
22.03.10
✎
14:29
|
(5) А! Теперь понял о чем ты, торможу )
Добавил я выбранное поле: НастройкиВыбора.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД)); Настройки = НастройкиВыбора.ПолучитьНастройки(); ВыбранноеПоле = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ВыбранноеПоле.Использование = Истина; ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Ссылка"); Но вот в полях отбора (НастройкиВыбора.Настройки.Отбор) по прежнему пусто! Как мне туда автоматом все доступные поля загрузить (исходя из текста запроса)?... |
|||
8
Bugmenot
22.03.10
✎
14:30
|
(4) В общем случае, я не знаю к какому объекту выполняется запрос...
|
|||
9
Mort
22.03.10
✎
14:33
|
(7) В отбор тож надо элементы добавлять.
|
|||
10
Bugmenot
22.03.10
✎
14:38
|
(9) А куда конкретно? Если в ДоступныеПоляОтбора - то они "только чтение"...
А если я в Отбор добавлю, то это не правильно. Мне не нужно устанавливать никакой отбор программно, мне нужно дать возможность пользователю это сделать из формы. |
|||
11
Asmody
22.03.10
✎
14:43
|
(6) это как? или ты пытаешься сделать "супер-универсальный отчет"?
|
|||
12
Asmody
22.03.10
✎
14:44
|
(8) описывай тогда набор данных объект и заполняй его программно
|
|||
13
Bugmenot
22.03.10
✎
15:21
|
(11,12) Тут как бы отчет вовсе не причем ) Пользователем выбирается справочник, настраивается отбор (таб поле на форме) и получается список элементов по этому отбору, с которым я уже потом какие-то действия выполняю...
Как это сделать через Построитель, я в (0) описал, а вот с компоновкой не выходит! В табличном поле (которое отбор) добавляем строку, а в доступных полях - пусто. |
|||
14
Bugmenot
22.03.10
✎
15:33
|
ап?
|
|||
15
Bugmenot
22.03.10
✎
16:00
|
Добавил поле набора данных, добавил группировку, ничего не помогает (
|
|||
16
Bugmenot
22.03.10
✎
16:14
|
Не получается даже просто поле в отбор добавить
СКД = Новый СхемаКомпоновкиДанных; ИД = СКД.ИсточникиДанных.Добавить(); ИД.Имя = "Источник"; ИД.ТипИсточникаДанных = "Local"; НаборДанных = СКД.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); НаборДанных.Имя = "Запрос"; НаборДанных.Запрос = "ВЫБРАТЬ Ссылка ИЗ " + ОписаниеМетаданных; НаборДанных.ИсточникДанных = "Источник"; НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина; ПолеСсылка=НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); ПолеСсылка.Поле="Ссылка"; ПолеСсылка.ПутьКДанным="Ссылка"; ПолеСсылка.Заголовок="Ссылка"; НастройкиВыбора.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД)); Настройки = НастройкиВыбора.Настройки; ГруппировкаДетали = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); ГруппировкаДетали.Использование = Истина; ВыбранноеПоле = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ВыбранноеПоле.Использование = Истина; ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Ссылка"); ЭлементОтбора = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка"); |
|||
17
Bugmenot
22.03.10
✎
16:41
|
Должны же сюда иногда заглядывать люди умеющие с компоновкой программно работать )
|
|||
18
Bugmenot
22.03.10
✎
17:05
|
^
|
|||
19
mikecool
22.03.10
✎
17:07
|
Выбрать Ссылка, Дата
{Выбрать Ссылка.*, Дата} - вот эти поля должны попасть в отбор Из ... |
|||
20
Mort
22.03.10
✎
17:09
|
(16) Я компоновщик настроек создавал и инициализировал в (2) не просто так.
|
|||
21
Mort
22.03.10
✎
17:10
|
+(20) Сори, не заметил. А что говорит?
|
|||
22
Bugmenot
22.03.10
✎
17:16
|
(21) А ни чё не говорит, поле в отбор добавляется, но оно "крестом" помечено - типа нет такого поля
(19) Тоже к сожалению, не помогает ( Последний вариант такой (мне кажется настройки все-таки надо загружать в КомпоновщикНастроек, а не Инициализировать): СКД = Новый СхемаКомпоновкиДанных; ИД = СКД.ИсточникиДанных.Добавить(); ИД.Имя = "Источник"; ИД.ТипИсточникаДанных = "Local"; НаборДанных = СКД.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); НаборДанных.Имя = "Запрос"; НаборДанных.Запрос = "ВЫБРАТЬ Ссылка {ВЫБРАТЬ Ссылка.*} ИЗ " + ОписаниеМетаданных; НаборДанных.ИсточникДанных = "Источник"; НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина; ПолеСсылка=НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); ПолеСсылка.Поле="Ссылка"; ПолеСсылка.ПутьКДанным="Ссылка"; ПолеСсылка.Заголовок="Ссылка"; Настройки = СКД.НастройкиПоУмолчанию; ГруппировкаДетали = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); ГруппировкаДетали.Использование = Истина; ВыбранноеПоле = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ВыбранноеПоле.Использование = Истина; ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Ссылка"); ЭлементОтбора = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка"); НастройкиВыбора.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию); |
|||
23
Bugmenot
22.03.10
✎
17:24
|
+(22) Немножко не так:
НаборДанных.Запрос = "ВЫБРАТЬ Ссылка ИЗ {ГДЕ Ссылка.*}" + ОписаниеМетаданных; Не помогает только, все-равно... |
|||
24
Bugmenot
22.03.10
✎
17:25
|
+(23) Тьфу ты! )
НаборДанных.Запрос = "ВЫБРАТЬ Ссылка ИЗ " + ОписаниеМетаданных+" {ГДЕ Ссылка.*}"; |
|||
25
5 Элемент
23.03.10
✎
15:17
|
Посмотри как сделана консоль для 8.2
Компоновщик нужно инициализировать по схеме, которая помещена во временное хранилище. |
|||
26
WebTraveller
10.04.10
✎
15:15
|
Бился с этой же проблемой полдня. как а основании просто текста запроса добавить доступные поля отборов, порядка и т.д. Оказывается очень просто :))
СКД = ПолучитьМакет("СКД"); ТекстЗапроса = СформироватьТекстЗапроса(); НаборДанных = СКД.НаборыДанных.Найти("ОсновнойНаборДанных"); НаборДанных.Запрос = ТекстЗапроса; НаборДанных.ИсточникДанных ="ОсновнойИсточникДанных"; НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина; КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД)); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |