Имя: Пароль:
1C
1С v8
Результат СКД в таблицу значений
0 alnovin
 
27.02.13
00:40
Всем привет!

Тема замусоленная, и тем не менее. Не получается разобраться.

Идея стара как мир: открыть обработку, инициализировать настройки СКД, соответственно отбора и вывод результата в таблицу значений для последующей обработки.

1 этап. Все работает.

Процедура ЗагрузитьНастройкиСКД()
   
   ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
   СКД = ОбработкаОбъект.ПолучитьМакетСКД("СКД");
   
   АдресСКД = ПоместитьВоВременноеХранилище(СКД, УникальныйИдентификатор);
   КомпоновщикНастроекКомпоновкиДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСКД));
   
   УстановтьОтборПоПолюКомпоновки("Организация",Справочники.Организации.ПустаяСсылка(),ВидСравненияКомпоновкиДанных.Равно);
   УстановтьОтборПоПолюКомпоновки("Контрагент",Справочники.Контрагенты.ПустаяСсылка(),ВидСравненияКомпоновкиДанных.Равно);
   УстановтьОтборПоПолюКомпоновки("ДоговорКонтрагента",Справочники.ДоговорыКонтрагентов.ПустаяСсылка(),ВидСравненияКомпоновкиДанных.Равно);

   // Добавим выбранные поля
   Для Каждого Элемент из КомпоновщикНастроекКомпоновкиДанных.Настройки.Выбор.ДоступныеПоляВыбора.Элементы Цикл

       Если НЕ Элемент.Папка Тогда
           ВыбранноеПоле = КомпоновщикНастроекКомпоновкиДанных.Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
           ВыбранноеПоле.Использование = Истина;
           ВыбранноеПоле.Поле = Элемент.Поле;
       КонецЕсли;

   КонецЦикла;
   
КонецПроцедуры

2. Этап. Вывод. Не работает.

Процедура ЗаполнитьТаблицуДокументовНаСервере()
   
   ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
   СКД = ОбработкаОбъект.ПолучитьМакетСКД("СКД");
   
   УстановитьПараметрКомпоновки("ДатаНачала",Период.ДатаНачала);
   УстановитьПараметрКомпоновки("ДатаОкончания",Период.ДатаОкончания);

   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, КомпоновщикНастроекКомпоновкиДанных.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

   ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки);
   
   ТабДокументов = Новый ТаблицаЗначений;
   
   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
   ПроцессорВывода.УстановитьОбъект(ТабДокументов);
   ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
   
КонецПроцедуры

Переменная "ТабДокументов" не содержит строк. Если Схему загрузить в отчет, то требуемый результат выводится.

Что не так?
1 GANR
 
27.02.13
00:45
Глянь по отладчику ТабДокументов.Колонки. Там пусто?
2 France
 
27.02.13
01:26
Вот чего с СКД не понимаю, та это - почему бы не использовать типовой шаблон? 99.99 % проблем решает, которые на месте пытаются обсудить
3 alnovin
 
27.02.13
07:02
(1) все верно, в колонках пусто. Но я же определил поля. Группировки надо генерить?
4 alnovin
 
27.02.13
07:27
Утро вечера мудренее. Разобрался.

Процедура ЗагрузитьНастройкиСКД()
   
   ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
   СКД = ОбработкаОбъект.ПолучитьМакетСКД("СКД");
   
   АдресСКД = ПоместитьВоВременноеХранилище(СКД, УникальныйИдентификатор);
   КомпоновщикНастроекКомпоновкиДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСКД));
   
   УстановтьОтборПоПолюКомпоновки("Организация",Справочники.Организации.ПустаяСсылка(),ВидСравненияКомпоновкиДанных.Равно);
   УстановтьОтборПоПолюКомпоновки("Контрагент",Справочники.Контрагенты.ПустаяСсылка(),ВидСравненияКомпоновкиДанных.Равно);
   УстановтьОтборПоПолюКомпоновки("ДоговорКонтрагента",Справочники.ДоговорыКонтрагентов.ПустаяСсылка(),ВидСравненияКомпоновкиДанных.Равно);

   ДобавитьВыбранноеПоле(КомпоновщикНастроекКомпоновкиДанных, "Организация");
   ДобавитьВыбранноеПоле(КомпоновщикНастроекКомпоновкиДанных, "Контрагент");
   ДобавитьВыбранноеПоле(КомпоновщикНастроекКомпоновкиДанных, "ДоговорКонтрагента");
   
   ДобавитьГруппировку(КомпоновщикНастроекКомпоновкиДанных, "Организация");
   ДобавитьГруппировку(КомпоновщикНастроекКомпоновкиДанных, "Контрагент");
   ДобавитьГруппировку(КомпоновщикНастроекКомпоновкиДанных, "ДоговорКонтрагента");
   
КонецПроцедуры

исходные функции есть в модулях УТ11