Всем привет!!!
Народ подскажите, второй день сижу - ни как не пойму, где засада...
Подаю в СКД Таблицу значений (Результат), и хочу результат обработки вывести не в ТабличныйДокумент (как по умолчанию), а в Дерево значений. При выводе в ТабличныйДокумент - все формируется, все работает и шевелится. Перенастраиваю вывод в ДеревоЗначений - на выходе пустой результат.
Код вывода в ДЗ следующий:
//...
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ТЗОбеспечения", Результат); // Формируем структуру для передечи в СКД
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных, ВнешниеНаборыДанных);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ДеревоЗначений = Новый ДеревоЗначений;
ПроцессорВывода.УстановитьОбъект(ДеревоЗначений);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных,Истина);
Показать
Причем, просматривая ДеревоЗначений и ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных,Истина) данные имеются, но в форму не выводятся. Подскажите, где засада? И что я делаю не так?
Перечитал еще раз первый пост и осознал, что вы хотите вывести результат отчета на форму в дерево значений?
Я не знаю можно ли сделать это через стандартную кнопку Сформировать и через изменение процедуры ПриКомпоновкеРезультата, т.к. я делал всегда через свою кнопку.
Для вывода на форму в дерево значений - это дерево на форме еще нужно создать и создать в нем колонки. Наверное это можно сделать и программно по схеме СКД (для УФ), но вот пример, в котором дерево уже создано и по кнопке "Вывести в дерево" отчет выводится на форму (ФормаОтчета2).
(10) NordDron, думал и об этом, но...
когда я делаю вывод в табличный документ, я же так не извращаюсь. Но попробовать можно. Как вы видите функцию передачи?
(3) ikar-nikolay,
А как выглядят настройки СКД? Насколько я помню, СКД не умеет выводить в дерево и в таблицу значений настройку вида Таблица (строки и колонки), только горизонтальные группировки.
(9) Reptile, отвечу следующим постом
Нашел универсальную функцию вывода СКД в любой объект - и всё-равно пусто. Значит ошибка где-то в исходных данных...
//****************************************************************************
// ШАБЛОНЫ ДЛЯ ИСПОЛЬЗОВАНИЯ СКД
// {{
//****************************************************************************
// Заполняет переданный объект на основани СКД
//
// Параметры
//
// СКД – собствеено настройки СКД
//
// ОбъектДляЗагрузки – объект в который выгружаются данные, таблица значений, дерево значений, табличный документ
//
// ИсполняемыеНастройки – Пользовательские настройки СКД если не указаны будут использованы настроки СКД по умолчанию
//
// СтруктураПараметров - Структура – Передаваемые для СКД параметры
//
// ДеревоЗначений = Новый ДеревоЗначений;
//
// ПРИМЕР ВЫЗОВА
// СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
// СтруктураПараметров = Новый Структура("ДатаОтчета", НашаДата);
// ПолучитьДанныеНаОснованииСКД(СхемаКомпоновкиДанных, ДеревоЗначений, СхемаКомпоновкиДанных.НастройкиПоУмолчанию, СтруктураПараметров);
//
&НаСервере
Процедура ПолучитьДанныеНаОснованииСКД(СКД, ОбъектДляЗагрузки, ИсполняемыеНастройки = Неопределено, СтруктураПараметров = Неопределено, РасшифровкаСКД = Неопределено, МакетКомпоновки = Неопределено, ВнешниеНаборыДанных = Неопределено) Экспорт
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
//Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ПолеТабличногоДокумента") ИЛИ ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда
Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда
ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанных");
Иначе
ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений");
КонецЕсли;
Если ИсполняемыеНастройки = Неопределено Тогда
ИсполняемыеНастройки = СКД.НастройкиПоУмолчанию;
КонецЕсли;
Если СтруктураПараметров <> Неопределено Тогда
КоллекцияЗначенийПараметров = ИсполняемыеНастройки.ПараметрыДанных.Элементы;
Для каждого Параметр Из СтруктураПараметров Цикл
НайденноеЗначениеПараметра = КоллекцияЗначенийПараметров.Найти(Параметр.Ключ);
Если НайденноеЗначениеПараметра <> Неопределено Тогда
НайденноеЗначениеПараметра.Использование = Истина;
НайденноеЗначениеПараметра.Значение = Параметр.Значение;
КонецЕсли;
КонецЦикла;
КонецЕсли;
МакетКомпоновкиСКД = КомпоновщикМакета.Выполнить(СКД, ИсполняемыеНастройки, РасшифровкаСКД, МакетКомпоновки, ТипГенератора);
ПроцессорКомпановки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпановки.Инициализировать(МакетКомпоновкиСКД, ВнешниеНаборыДанных, РасшифровкаСКД);
//Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ПолеТабличногоДокумента") ИЛИ ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда
Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ОбъектДляЗагрузки);
Иначе
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ОбъектДляЗагрузки);
КонецЕсли;
ПроцессорВывода.ОтображатьПроцентВывода = Истина;
ПроцессорВывода.Вывести(ПроцессорКомпановки, Истина);
КонецПроцедуры // ПолучитьДанныеНаОснованииСКД()
//****************************************************************************
// }}
//****************************************************************************
(9) Reptile, а какие могут быть ещё источники данных в моих условиях?
В структуре ВнешниеНаборыДанных передается только одна таблица значений, которая загружается через набор данных - объект.
(12) ikar-nikolay,
Вот простой отчет (не управляемые формы) выводит ТЗ в дерево. Использован Ваш код - все работет. Осталось найти в чем отличие вашей версии от моей :) Без скринов настроек СКД сложно что-то предполагать.
Я перенес процедуру вывода отчета в модуль объекта в процедуру ПриКомпоновкеРезультата(), где собственно ей и место, проставил в ложь стандартную обработку и... на выходе пусто!!!
Прикрепил файл! Теперь можно говорить более предметно, что не так сделано?
(3) ikar-nikolay, у тебя настроек сложных в схеме никаких нет случайно http://1cskd.ru/2010/07/vyvod-otcheta-v-kollekciyu-znachenij/ Кстати, заметил что при использовании в настройках отчета “Авто позиция ресурсов” “Не использовать” ресурсы и пользовательские поля именно в коллекцию значений попадают пустыми.
Стоит отметить, что при выводе результата компоновки в коллекцию значений существует несколько ограничений:
* В настройках нельзя использовать таблицы, диаграммы и вложенные схемы;
* Не используется условное оформление;
* Игнорируются папки в выбранных полях.
(7) serega3333, (6) serega3333, спасибо за желание помочь, но все это я читал и проверял.
В Других настройках (последняя панель в вкладке Настройки СКД) "Авто позиция ресурсов" не активирована (галочка не стоит) и установлено значение "После всех полей".
* В настройках нельзя использовать таблицы, диаграммы и вложенные схемы; (этого нет)
* Не используется условное оформление; (не дошел до этого, поэтому нет)
* Игнорируются папки в выбранных полях (тут не понял - если имеется речь о просмотре иерархии полей, то её тоже нет)
Перечитал еще раз первый пост и осознал, что вы хотите вывести результат отчета на форму в дерево значений?
Я не знаю можно ли сделать это через стандартную кнопку Сформировать и через изменение процедуры ПриКомпоновкеРезультата, т.к. я делал всегда через свою кнопку.
Для вывода на форму в дерево значений - это дерево на форме еще нужно создать и создать в нем колонки. Наверное это можно сделать и программно по схеме СКД (для УФ), но вот пример, в котором дерево уже создано и по кнопке "Вывести в дерево" отчет выводится на форму (ФормаОтчета2).
(16) Reptile, Catch my respect and $m!
Ну да - такой подход решает задачу, хотя странно - вполне логичный механизм не фурычит. Хотя если внимательно почитать Хрусталева (http://langslab.com/ebooks/skd/dcs-ch3/built-in-language), то он ясно пишет, что "В приведенном примере результат компоновки данных выводится в дерево значений - переменную ДеревоРезультата (листинг 3.63)", т.е. про стандартный вывод в форму СКД разговора нет. И так же нет реквизита вывода дерева на самой стандартной форме СКД.
Правда пока разбирался с механизвом вывода дерева через настройки СКД, разобрался с плюшками СКД и уже сомневаюсь в каком направлении двинуться дальше.
Делаю панель для интерактивного создания документов, дерево прельщает тем, что можно пробежаться по дереву и поменять любые значения по любому алгоритму и при нажатии кнопки "Создать документы" по выбранным значениям создать документы.
Если же тоже самое выполнять силами СКД, то документ можно создавать не проведенным, заполнять по выбранным значениям СКД, а в запросе делать выборку по этим непроведенным документам. А при нажатии кнопки "Создать документы" делать проведение. Механизм макетов и расшифровок очень в этом прельщает.