|
Как получить таблицу с определенным набором свойств объекта | ☑ | ||
---|---|---|---|---|
0
Lekh72
17.03.13
✎
15:28
|
Необходимо получить таблицу в которой отображался бы объект и определенный набор его свойств. Написал такой код:
Запрос = Новый Запрос(); ТекстЗапроса= "ВЫБРАТЬ РАЗЛИЧНЫЕ | ВложенныйЗапрос.Объект,"; КоличествоСвойств = ВыбранныеСвойства.Количество(); Для к=1 По ВыбранныеСвойства.Количество() Цикл ТекстЗапроса = ТекстЗапроса + " | ВложенныйЗапрос.Уровень"+к; Если к <> КоличествоСвойств Тогда ТекстЗапроса = ТекстЗапроса + ","; КонецЕсли; КонецЦикла; ТекстЗапроса = ТекстЗапроса +" |ИЗ |(ВЫБРАТЬ | ЗначенияСвойствОбъектов.Объект,"; Для к=1 По ВыбранныеСвойства.Количество() Цикл ТекстЗапроса = ТекстЗапроса + " | ВЫБОР КОГДА ЗначенияСвойствОбъектов.Свойство = &Свойство"+к+" Тогда | ЗначенияСвойствОбъектов.Значение КОНЕЦ КАК Уровень"+к; Если к <> КоличествоСвойств Тогда ТекстЗапроса = ТекстЗапроса + "," КонецЕсли; КонецЦикла; ТекстЗапроса = ТекстЗапроса +" |ИЗ | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов) КАК ВложенныйЗапрос"; к=1; Для Каждого ВыбСвойство Из ВыбранныеСвойства Цикл Запрос.УстановитьПараметр("Свойство"+к,ВыбСвойство.ВыбранноеСвойство); к = к+1; КонецЦикла; Сообщить(ТекстЗапроса); Запрос.Текст = ТекстЗапроса; Результат = Запрос.Выполнить().Выгрузить(); В результате в таблицу выводятся столько строк по одному объекту, сколько свойств участвует в запросе, т.е. как свернуть запрос чтобы свойства попадали в одну строку с объектом. |
|||
1
Lekh72
18.03.13
✎
16:43
|
uppp
|
|||
2
Reset
18.03.13
✎
16:50
|
Результат запроса циклом перенеси в структуру.
Или если любишь извраты (а судя по запросу, любишь), динамически создавай левые соединения по каждому свойству и список Выбрать. |
|||
3
Ёпрст
18.03.13
✎
16:54
|
(0) и нафига там вложенный запрос ?
|
|||
4
Lekh72
18.03.13
✎
19:55
|
Запрос = Новый Запрос();
ТекстЗапроса= "ВЫБРАТЬ РАЗЛИЧНЫЕ | ЗначенияСвойствОбъектов.Объект,"; КоличествоСвойств = ВыбранныеСвойства.Количество(); Для к=1 По ВыбранныеСвойства.Количество() Цикл ТекстЗапроса = ТекстЗапроса + " | ВЫБОР КОГДА ЗначенияСвойствОбъектов.Свойство = &Свойство"+к+" Тогда | ЗначенияСвойствОбъектов.Значение КОНЕЦ КАК Уровень"+к; Если к <> КоличествоСвойств Тогда ТекстЗапроса = ТекстЗапроса + "," КонецЕсли; КонецЦикла; ТекстЗапроса = ТекстЗапроса +" |ИЗ | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов"; к=1; Для Каждого ВыбСвойство Из ВыбранныеСвойства Цикл Запрос.УстановитьПараметр("Свойство"+к,ВыбСвойство.ВыбранноеСвойство); к = к+1; КонецЦикла; Результат тотже |
|||
5
Lekh72
18.03.13
✎
19:57
|
Не пинайте, я только учусь (
|
|||
6
SherifSP
18.03.13
✎
20:00
|
(0) Почему просто не выбрать запросом все из регистра сведений? Там же и объект и свойство есть
|
|||
7
zladenuw
18.03.13
✎
20:09
|
(0) а тебе зачем ?
можно в скд сделать запрос. в настройках вывести свойство и значение в колонки. тогда у тебя будет 1 строка с объектов и куча колонок свойств |
|||
8
SherifSP
18.03.13
✎
20:11
|
(7) + 100500
|
|||
9
SherifSP
18.03.13
✎
20:12
|
+(7) С отбором по свойству и прочему)
|
|||
10
Lekh72
18.03.13
✎
20:40
|
Мне потом надо справочник перестроить по этим свойствам. Хотя наверное и не надо в таблицу... Обойти запрос по группировкам...
|
|||
11
zladenuw
18.03.13
✎
21:35
|
и что. у тебя результатом будет тз. почитай про программный вывод скд.
|
|||
12
Lekh72
18.03.13
✎
23:54
|
да я это не на скд делаю. Всем спасибо за помощь. Надо плотнее СКД заняться
|
|||
13
zladenuw
19.03.13
✎
00:02
|
в СКД
запрос. ВЫБРАТЬ ЗначенияСвойствОбъектов.Объект, ЗначенияСвойствОбъектов.Свойство, ЗначенияСвойствОбъектов.Значение ИЗ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов ГДЕ ЗначенияСвойствОбъектов.Объект = &Объект //И ЗначенияСвойствОбъектов.Свойство В(&Свойство) создать настройки вывода 2 минуты. вывести это все в тз КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; СхемаКомпоновкиДанныхА = ПолучитьМакет("Макет"); КомпоновщикНастроекА = Новый КомпоновщикНастроекКомпоновкиДанных; КомпоновщикНастроекА.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанныхА)); КомпоновщикНастроекА.ЗагрузитьНастройки(СхемаКомпоновкиДанныхА.НастройкиПоУмолчанию); КомпоновщикНастроекА.Настройки.ПараметрыДанных.Элементы.Найти("Параметр").Значение = "Параметр"; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанныхА, КомпоновщикНастроекА.Настройки, ,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); тз = новый ТаблицаЗначений; ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,,Истина); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; ПроцессорВывода.ОтображатьПроцентВывода = Истина; тз = ПроцессорВывода.Вывести(ПроцессорКомпоновки); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |