Имя: Пароль:
1C
 
проблема с выводом дерева
0 Wobland
 
24.05.11
18:01
Имеется запрос с группировками (итоги), выгружаю:
Выборка = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);

имею соответственно дерево. Которое потом вывожу в ТабДокумент. Проблема в том, что в документе вижу совсем не так, как в консоли запросов. что я делаю не так? как правильно вывести дерево?
процедура вывода такова (упрощённо):

Процедура ПерейтиКСледУровню(Дерево)
   Для Каждого СтрокаДерева Из Дерево.Строки Цикл
       Если СтрокаДерева.Цех=NULL Тогда
                ПерейтиКСледУровню(СтрокаДерева);
           Прервать;
       КонецЕсли;
       Если СтрокаДерева.Подразделение=NULL Тогда
           ТабДок.Вывести(ОбластьСтрокаВерхнегоУровня, СтрокаДерева.Уровень());
           ПерейтиКСледУровню(СтрокаДерева);
       КонецЕсли;
       Если СтрокаДерева.МОЛ=NULL Тогда
           ТабДок.Вывести(ОбластьСтрокаСреднегоУровня, СтрокаДерева.Уровень());
           ПерейтиКСледУровню(СтрокаДерева);
       КонецЕсли;
       Если СтрокаДерева.Регистратор=NULL Тогда
           ТабДок.Вывести(ОбластьСтрокаСреднегоУровня1, СтрокаДерева.Уровень());
           ПерейтиКСледУровню(СтрокаДерева);
       Иначе
           ТабДок.Вывести(ОбластьСтрокаНижнегоУровня, СтрокаДерева.Уровень());
       КонецЕсли;
       ПерейтиКСледУровню(СтрокаДерева);
   КонецЦикла;
КонецПроцедуры
1 Reset
 
24.05.11
18:15
Странная процедура какая-то.

В самом общем случае вывод дерева в табл документ может выглядеть так (безобочность и безопечатность не гарантирую):

НачатьАвтогруппировкуСтрок();
ВывестиДерево(Дерево);
ЗакончитьАвтогруппировкуСтрок();

Процедура ВывестиДерево(Дерево)
   Для каждого Строка из Дерево.Строки цикл
       // Заполнить "Область" для вывода (на основе данных из Строки)
       ТабДок.Вывести(Область,Строка.Уровень());
       
       ВывестиДерево(Строка);
   КонецЦикла;
КонецПроцедуры
2 Reset
 
24.05.11
18:16
безобочность=безошибочность :)
3 Wobland
 
24.05.11
18:17
(1) прикол в том, что у меня области разные для разных уровней. поэтому проверки на NULL использую
4 Reset
 
24.05.11
18:19
Ну, в моем примере это только приведе к тому , что в зависмости от Уровень(), заполнять и выводить разную Область
5 Wobland
 
24.05.11
18:19
(4) от Уровень()... спасибо, пойду запробую
6 Wobland
 
24.05.11
18:24
кажись, взлетело. ещё раз благодарю
7 73
 
24.05.11
18:25
(3)(5) NUll-ы проверять или Уровень()... Как хочешь. Главное рекурсивный вызов 1 раз делать, как в (1).
А в условиях только Область определять.
AdBlock убивает бесплатный контент. 1Сергей