Имя: Пароль:
1C
1С v8
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
Возможно было бы в данном случае использовать построитель, кода точно было бы меньше :)
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой