| 
    
        
     
     | 
    
  | 
Как получить таблицу с определенным набором свойств объекта | ☑ | ||
|---|---|---|---|---|
| 
    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 минуты. вывести это все в тз КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; СхемаКомпоновкиДанныхА = ПолучитьМакет("Макет"); КомпоновщикНастроекА = Новый КомпоновщикНастроекКомпоновкиДанных; КомпоновщикНастроекА.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанныхА)); КомпоновщикНастроекА.ЗагрузитьНастройки(СхемаКомпоновкиДанныхА.НастройкиПоУмолчанию); КомпоновщикНастроекА.Настройки.ПараметрыДанных.Элементы.Найти("Параметр").Значение = "Параметр"; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанныхА, КомпоновщикНастроекА.Настройки, ,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); тз = новый ТаблицаЗначений; ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,,Истина); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; ПроцессорВывода.ОтображатьПроцентВывода = Истина; тз = ПроцессорВывода.Вывести(ПроцессорКомпоновки);  | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |