СКД - вывод в ДеревоЗначений выдает пустой результат

1. ikar-nikolay 103 26.11.13 15:56 Сейчас в теме
Всем привет!!!
Народ подскажите, второй день сижу - ни как не пойму, где засада...
Подаю в СКД Таблицу значений (Результат), и хочу результат обработки вывести не в ТабличныйДокумент (как по умолчанию), а в Дерево значений. При выводе в ТабличныйДокумент - все формируется, все работает и шевелится. Перенастраиваю вывод в ДеревоЗначений - на выходе пустой результат.

Код вывода в ДЗ следующий:

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

        КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

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

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

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


Причем, просматривая ДеревоЗначений и ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных,Истина) данные имеются, но в форму не выводятся. Подскажите, где засада? И что я делаю не так?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
16. Reptile 35 26.11.13 23:28 Сейчас в теме
Перечитал еще раз первый пост и осознал, что вы хотите вывести результат отчета на форму в дерево значений?

Я не знаю можно ли сделать это через стандартную кнопку Сформировать и через изменение процедуры ПриКомпоновкеРезультата, т.к. я делал всегда через свою кнопку.
Для вывода на форму в дерево значений - это дерево на форме еще нужно создать и создать в нем колонки. Наверное это можно сделать и программно по схеме СКД (для УФ), но вот пример, в котором дерево уже создано и по кнопке "Вывести в дерево" отчет выводится на форму (ФормаОтчета2).
Прикрепленные файлы:
ТестДерево+Икар+2013.11.27+01.00.erf
memb3r; AlxPop; Pavel_Vladivostok; +3 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
10. NordDron 26.11.13 18:16 Сейчас в теме
(1) ikar-nikolay,
Не вижу собственно что это?
Управляемая форма?
Если да, то где ЗначениеВРеквизитФормы() ?
13. ikar-nikolay 103 26.11.13 18:27 Сейчас в теме
(10) NordDron, думал и об этом, но...
когда я делаю вывод в табличный документ, я же так не извращаюсь. Но попробовать можно. Как вы видите функцию передачи?
2. serega3333 26.11.13 15:59 Сейчас в теме
ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений - для дерева специльные вывод существует, СП посмотри
3. ikar-nikolay 103 26.11.13 16:37 Сейчас в теме
Не увидел!

Тутнашел работающий код вывода ДЗ,

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

ПроцессорКД = Новый ПроцессорКомпоновкиДанных; 
ПроцессорКД.Инициализировать(МакетКомпоновки); 

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


проверил - у меня все строчка в строчку, но... не работает!
4. Reptile 35 26.11.13 17:15 Сейчас в теме
(3) ikar-nikolay,
А как выглядят настройки СКД? Насколько я помню, СКД не умеет выводить в дерево и в таблицу значений настройку вида Таблица (строки и колонки), только горизонтальные группировки.
5. ikar-nikolay 103 26.11.13 17:30 Сейчас в теме
(4) Reptile, кажется всё норм, если я правильно понимаю смысл сказанного:
9. Reptile 35 26.11.13 18:00 Сейчас в теме
(5) ikar-nikolay,
а какие-то еще источники данных кроме таблицы значений используются или это просто вывод ТЗ в дерево?
11. ikar-nikolay 103 26.11.13 18:16 Сейчас в теме
(9) Reptile, отвечу следующим постом
Нашел универсальную функцию вывода СКД в любой объект - и всё-равно пусто. Значит ошибка где-то в исходных данных...
//****************************************************************************
// ШАБЛОНЫ ДЛЯ ИСПОЛЬЗОВАНИЯ СКД
// {{
//****************************************************************************
// Заполняет переданный объект на основани СКД
//
// Параметры
//
//  СКД – собствеено настройки СКД
//
//  ОбъектДляЗагрузки – объект в который выгружаются данные, таблица значений, дерево значений, табличный документ
//
//  ИсполняемыеНастройки – Пользовательские настройки СКД если не указаны будут использованы настроки СКД по умолчанию
//
//  СтруктураПараметров - Структура – Передаваемые для СКД параметры
//
//  ДеревоЗначений = Новый ДеревоЗначений;
//
//  ПРИМЕР ВЫЗОВА
//	СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
//	СтруктураПараметров = Новый Структура("ДатаОтчета", НашаДата);
//	ПолучитьДанныеНаОснованииСКД(СхемаКомпоновкиДанных, ДеревоЗначений, СхемаКомпоновкиДанных.НастройкиПоУмолчанию, СтруктураПараметров);
//
&НаСервере
Процедура ПолучитьДанныеНаОснованииСКД(СКД, ОбъектДляЗагрузки, ИсполняемыеНастройки = Неопределено, СтруктураПараметров = Неопределено, РасшифровкаСКД = Неопределено, МакетКомпоновки = Неопределено, ВнешниеНаборыДанных = Неопределено) Экспорт

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

	//Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ПолеТабличногоДокумента") ИЛИ ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда
    Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда
        ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанных");
    Иначе
        ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений");
    КонецЕсли;

    Если ИсполняемыеНастройки = Неопределено Тогда

        ИсполняемыеНастройки = СКД.НастройкиПоУмолчанию;

    КонецЕсли;

    Если СтруктураПараметров <> Неопределено Тогда

        КоллекцияЗначенийПараметров = ИсполняемыеНастройки.ПараметрыДанных.Элементы;

        Для каждого Параметр Из СтруктураПараметров Цикл

            НайденноеЗначениеПараметра = КоллекцияЗначенийПараметров.Найти(Параметр.Ключ);

            Если НайденноеЗначениеПараметра <> Неопределено Тогда

                НайденноеЗначениеПараметра.Использование = Истина;

                НайденноеЗначениеПараметра.Значение = Параметр.Значение;

            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

    МакетКомпоновкиСКД = КомпоновщикМакета.Выполнить(СКД, ИсполняемыеНастройки, РасшифровкаСКД, МакетКомпоновки, ТипГенератора);

    ПроцессорКомпановки = Новый ПроцессорКомпоновкиДанных;

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

	//Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ПолеТабличногоДокумента") ИЛИ ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда
    Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда

        ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

        ПроцессорВывода.УстановитьДокумент(ОбъектДляЗагрузки);

    Иначе

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

        ПроцессорВывода.УстановитьОбъект(ОбъектДляЗагрузки);

    КонецЕсли;

    ПроцессорВывода.ОтображатьПроцентВывода = Истина;

    ПроцессорВывода.Вывести(ПроцессорКомпановки, Истина);

КонецПроцедуры // ПолучитьДанныеНаОснованииСКД()

//****************************************************************************
// }}
//****************************************************************************


Показать
12. ikar-nikolay 103 26.11.13 18:25 Сейчас в теме
(9) Reptile, а какие могут быть ещё источники данных в моих условиях?
В структуре ВнешниеНаборыДанных передается только одна таблица значений, которая загружается через набор данных - объект.
14. Reptile 35 26.11.13 18:28 Сейчас в теме
(12) ikar-nikolay,
Вот простой отчет (не управляемые формы) выводит ТЗ в дерево. Использован Ваш код - все работет. Осталось найти в чем отличие вашей версии от моей :) Без скринов настроек СКД сложно что-то предполагать.
Прикрепленные файлы:
ТестДерево.erf
15. ikar-nikolay 103 26.11.13 19:28 Сейчас в теме
(14) Reptile, спасибо!

Я перенес процедуру вывода отчета в модуль объекта в процедуру ПриКомпоновкеРезультата(), где собственно ей и место, проставил в ложь стандартную обработку и... на выходе пусто!!!

Прикрепил файл! Теперь можно говорить более предметно, что не так сделано?
Прикрепленные файлы:
ТестДерево+Икар+2013.11.26+19.30.erf
6. serega3333 26.11.13 17:32 Сейчас в теме
(3) ikar-nikolay, у тебя настроек сложных в схеме никаких нет случайно http://1cskd.ru/2010/07/vyvod-otcheta-v-kollekciyu-znachenij/
Кстати, заметил что при использовании в настройках отчета “Авто позиция ресурсов” “Не использовать” ресурсы и пользовательские поля именно в коллекцию значений попадают пустыми.
7. serega3333 26.11.13 17:34 Сейчас в теме
Стоит отметить, что при выводе результата компоновки в коллекцию значений существует несколько ограничений:
* В настройках нельзя использовать таблицы, диаграммы и вложенные схемы;
* Не используется условное оформление;
* Игнорируются папки в выбранных полях.
8. ikar-nikolay 103 26.11.13 17:49 Сейчас в теме
(7) serega3333, (6) serega3333, спасибо за желание помочь, но все это я читал и проверял.

В Других настройках (последняя панель в вкладке Настройки СКД) "Авто позиция ресурсов" не активирована (галочка не стоит) и установлено значение "После всех полей".

* В настройках нельзя использовать таблицы, диаграммы и вложенные схемы; (этого нет)
* Не используется условное оформление; (не дошел до этого, поэтому нет)
* Игнорируются папки в выбранных полях (тут не понял - если имеется речь о просмотре иерархии полей, то её тоже нет)
16. Reptile 35 26.11.13 23:28 Сейчас в теме
Перечитал еще раз первый пост и осознал, что вы хотите вывести результат отчета на форму в дерево значений?

Я не знаю можно ли сделать это через стандартную кнопку Сформировать и через изменение процедуры ПриКомпоновкеРезультата, т.к. я делал всегда через свою кнопку.
Для вывода на форму в дерево значений - это дерево на форме еще нужно создать и создать в нем колонки. Наверное это можно сделать и программно по схеме СКД (для УФ), но вот пример, в котором дерево уже создано и по кнопке "Вывести в дерево" отчет выводится на форму (ФормаОтчета2).
Прикрепленные файлы:
ТестДерево+Икар+2013.11.27+01.00.erf
memb3r; AlxPop; Pavel_Vladivostok; +3 Ответить
17. ikar-nikolay 103 27.11.13 09:53 Сейчас в теме
(16) Reptile, Catch my respect and $m!
Ну да - такой подход решает задачу, хотя странно - вполне логичный механизм не фурычит. Хотя если внимательно почитать Хрусталева (http://langslab.com/ebooks/skd/dcs-ch3/built-in-language), то он ясно пишет, что "В приведенном примере результат компоновки данных выводится в дерево значений - переменную ДеревоРезультата (листинг 3.63)", т.е. про стандартный вывод в форму СКД разговора нет. И так же нет реквизита вывода дерева на самой стандартной форме СКД.

ВОПРОС ЗАКРЫТ!!!
18. ikar-nikolay 103 27.11.13 10:22 Сейчас в теме
Флуд!

Правда пока разбирался с механизвом вывода дерева через настройки СКД, разобрался с плюшками СКД и уже сомневаюсь в каком направлении двинуться дальше.
Делаю панель для интерактивного создания документов, дерево прельщает тем, что можно пробежаться по дереву и поменять любые значения по любому алгоритму и при нажатии кнопки "Создать документы" по выбранным значениям создать документы.
Если же тоже самое выполнять силами СКД, то документ можно создавать не проведенным, заполнять по выбранным значениям СКД, а в запросе делать выборку по этим непроведенным документам. А при нажатии кнопки "Создать документы" делать проведение. Механизм макетов и расшифровок очень в этом прельщает.
19. ProIT 27.03.17 13:12 Сейчас в теме
ЭлементыФормы.Дерево.СоздатьКолонки(); после ПроцессорВывода.Вывести(ПроцессорКомпановки, Истина);
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот