|
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
|
Возможно было бы в данном случае использовать построитель, кода точно было бы меньше :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |