| 
    
            
         
         | 
    
  | 
v8: Как из СКД выдрать результаты и програмно обойти их? | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        Cerera    
     15.05.13 
            ✎
    10:23 
 | 
         
        Вот в СКД формирую отчет. код элементарный:
  
        СхемаКомпоновкиДанных = ПолучитьМакет("Макет"); КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); УстановитьОтборы(КомпоновщикНастроек); Настройки = КомпоновщикНастроек.Настройки; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ); ДокументРезультат = Новый ТабличныйДокумент; ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); ДокументРезультат.ТолькоПросмотр = Истина; ДокументРезультат.ОтображатьСетку = Ложь; ДокументРезультат.ОтображатьЗаголовки = Ложь; ДокументРезультат.Показать(); Но мне не надо выводить результат в табличный документ.Мне бы обход по группировкам сделать. Как это подскажите? Группировки фиксированные, пользователь их менять не может потому что я програмно СКД настраиваю.  | 
|||
| 
    1
    
        Волшебник    
     15.05.13 
            ✎
    10:24 
 | 
         
        ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокументИмениНуралиеваБорисаГеоргиевича     
         | 
|||
| 
    2
    
        1Сергей    
     15.05.13 
            ✎
    10:24 
 | 
         
        тогда зачем тебе скд?     
         | 
|||
| 
    3
    
        eklmn    
     гуру 
    15.05.13 
            ✎
    10:25 
 | 
         
        " мне не надо выводить результат в табличный документ"
  
        зачем тебе СКД тогда?  | 
|||
| 
    4
    
        Laerys    
     15.05.13 
            ✎
    10:25 
 | 
         
        (0) зачем скд сам пиши запрос и делай с ним что хочешь     
         | 
|||
| 
    5
    
        Cerera    
     15.05.13 
            ✎
    10:27 
 | 
         
        (2)(3)(4) - а вот зачем! у меня на форме обработки (документа) есть отборы. Отбор может быть выбран, а может быть не выбран. Если я бы сам формировал запрос, то мне бы приходилось вручную проверять условия в элементе "Отбор" и в зависимости от результата, видоизменять запрос, а тут СКД мне сама всё скомпонует, а я оттуда вытащу результат.     
         | 
|||
| 
    6
    
        Laerys    
     15.05.13 
            ✎
    10:30 
 | 
         
        (5) ты говоришь про условное оформление, или пользовательские настройки?     
         | 
|||
| 
    7
    
        Cerera    
     15.05.13 
            ✎
    10:37 
 | 
         
        (6)ни то, ни другое. просто документ у меня есть. и в нём есть кнопочка "Заполнить", которая должна заполнять документ данными в зависимости от установленных отборов, которые задаются пользователем, например "Контрагент", "Номенклатура". 
  
        А поскольку вручную генерировать код запроса тяжелее, чем через СКД, я вот через СКД это реализовал.  | 
|||
| 
    8
    
        Cerera    
     15.05.13 
            ✎
    10:37 
 | 
         
        (1)да. спасибо.     
         | 
|||
| 
    9
    
        Smallrat    
     15.05.13 
            ✎
    10:38 
 | 
         
        ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений ;     
         | 
|||
| 
    10
    
        Cerera    
     15.05.13 
            ✎
    11:27 
 | 
         
        Всё я крут я сделал!
  
        ДеревоРезультата.Очистить(); СхемаКомпоновкиДанных = ПолучитьМакет("Макет"); КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); УстановитьОтборы(КомпоновщикНастроек); Настройки = КомпоновщикНастроек.Настройки; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; ПроцессорВывода.УстановитьОбъект(ДеревоРезультата); ПроцессорВывода.НачатьВывод(); Пока Истина Цикл ЭлементРезультатаКомпоновкиДанных = ПроцессорКомпоновкиДанных.Следующий(); Если ЭлементРезультатаКомпоновкиДанных = Неопределено Тогда Прервать; КонецЕсли; ПроцессорВывода.ВывестиЭлемент(ЭлементРезультатаКомпоновкиДанных); КонецЦикла; ПроцессорВывода.ЗакончитьВывод(); ЭлементыФормы.ДеревоРезультата.СоздатьКолонки();  | 
|||
| 
    11
    
        Xatori    
     15.05.13 
            ✎
    12:13 
 | 
         
        Возможно было бы в данном случае использовать построитель, кода точно было бы меньше :)     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |