Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   СКД: вывод данных с иерархией (http://forums.kuban.ru/f1040/skd_vyvod_dannyh_s_ierarhiej-3900631.html)

Stolz 20.03.2013 09:58

СКД: вывод данных с иерархией
 
Доброго времени суток всем!

Пытаюсь вывести иерархические данные, используя набор данных-объект, однако никакой иерархичности не получаю. Отчего-то в результирующем табличном документе сведения выводятся в один столбец без отображения уровней иерархии. По определённым причинам нужно использовать именно набор данных-объект, поэтому привожу упрощённый фрагмент кода. Гуру СКД, ткните носом, в чём я неправ. :-)


Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ссылка
|ИЗ
| Справочник.Номенклатура";
ТабСведения = Запрос.Выполнить().Выгрузить();

ТекСхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;
ИсточникДанных = ТекСхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
ИсточникДанных.Имя = "ИсточникДанных";
ИсточникДанных.ТипИсточникаДанных = "Local";

НаборДанныхОбъект = ТекСхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
НаборДанныхОбъект.Имя = "НаборДанныхОбъект";
НаборДанныхОбъект.ИмяОбъекта = "ДвиженияПоСтатьямОборотов";
НаборДанныхОбъект.ИсточникДанных = "ИсточникДанных";

ПолеНабораДанных = НаборДанныхОбъект.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ПолеНабораДанных.Поле = "Ссылка";
ПолеНабораДанных.ПутьКДанным = "Ссылка";

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

ТекГруппировка = ТекНастройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ТекГруппировка.Имя = "Группировка";
ТекГруппировка.Использование = Истина;

ПолеГруппировки = ТекГруппировка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировки.Использование = Истина;
ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Ссылка");
ПолеГруппировки.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.Иерархия;

ВыбранныеПоля = ТекГруппировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
ВыбранныеПоля.Использование = Истина;
ЭлементСортировки = ТекГруппировка.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных"));
ЭлементСортировки.Использование = Истина;

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

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

Reaper 20.03.2013 11:16

Зачем набирать компоновку вручную? За стеной кода ты не видишь, что у тебя поле компоновки остается нетипизированным, а значит система не сможет сгенерировать для него набор для получения иерархии.

Stolz 21.03.2013 10:13

Классно!

Добавил строчку

ПолеНабораДанных.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.ГруппыПользователей");

и всё заработало.

Спасибо, Reaper!

Что же до стены кода - поверь, это не от хорошей жизни. Просто, как я уже упоминал, пример сильно упрощён, а на самом деле в моём случае без этого не обойтись.

Stolz 21.03.2013 10:16

В (2), конечно же, надо читать

ПолеНабораДанных.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.Номенклатура");

Слегка спалился... :-)


Текущее время: 09:51. Часовой пояс GMT +3.