Имя: Пароль:
1C
1С v8
v8: Как вывести результат компоновки в таблицу значений
0 IBTM
 
28.05.14
18:01
Потребовалось и решил познакомиться с этим монстром на примере типового отчета зупы РасчетныеЛисткиОрганизаций.
Мне было нужно программно получить результат выполнения КомпоновщикМакетаКомпоновкиДанных (некоторых полей). Решил что это можно (удобнее) сделать через ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений
тыкаюсь в типовой код (немного упростил структуру и своё добавил):

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки   = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
            
// создадим и инициализируем процессор компоновки данных
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
            ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);

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

Результат = ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
//
Обрадовался, вот думаю сейчас готовую таблицу получу...

{Отчет.РасчетныеЛисткиОрганизаций.МодульОбъекта(650)}: Ошибка при вызове метода контекста (Вывести)
Результат = ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
по причине:
Ошибка вывода результата
по причине:
Неизвестный тип макета

Попробовал обойти в цикле по элементно через ПроцессорКомпоновкиДанных.Следующий()
ошибка та же самая.
мне кажется что всё дело вообще в самом отчёте (ОсновнойСхемеКомпоновкиДанных).
Что мне проверить или сравнить?
1 По-читатель
 
28.05.14
18:06
(0) Может так?

Результат = ПроцессорВывода.Вывести(ПроцессорКомпоновки);
2 fisher
 
28.05.14
18:11
У страшного зверя есть метод УстановитьОбъект()
3 IBTM
 
28.05.14
18:13
(1) я не показал извеняюсь, там идёт переход из процедуры в процедуру с моим кодом. Через параметр сюда как раз передаётся именно ПроцессорКомпоновки, а здесь уже его обозвали как ПроцессорКомпоновкиДанных.
4 kryptonite
 
28.05.14
18:21
Как вариант:

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

Возврат ДеревоЗначений
5 IBTM
 
28.05.14
18:23
(2) тоже самое

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
        
Результат = Новый ТаблицаЗначений;
ПроцессорВывода.НачатьВывод();
ПроцессорВывода.УстановитьОбъект(Результат);
        
Результат = ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных)
6 fisher
 
28.05.14
18:27
А, вспомнил!
МакетКомпоновки   = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
7 fisher
 
28.05.14
18:27
Одну запятую пропустил
8 fisher
 
28.05.14
18:28
Тип генератора - пятым параметром.
9 fisher
 
28.05.14
18:30
Тьфу, в (4) уже ответили
10 IBTM
 
28.05.14
18:41
ну спасибо, заработало, оказывается не так страшно.

ещё маленький вопросик, мне дальше понадобится. Одновременно "Инициализировать" ПроцессорКомпоновкиДанных с разными МакетамиКомпановки за один проход в процедуре получится?
11 IBTM
 
28.05.14
18:47
(10) + ну т.е. поочереди
12 IBTM
 
02.06.14
10:24
(10) да можно, не ожидал прямо