helpf.pro
Регистрация

v8.2 УП: Перебор дерева значений

ApSE
17.06.2013 10:56Прочитано: 3811
Здравствуйте!

Необходимо совершить перебор дерева значений и вывести это на макет.

С макетом проблемы нет, зато есть проблема с перебором дерева значений, как его правильно перебирать?

Есть функция, которая совершает рекурсию и формирует дерево значений и выводит на форму.
Но мне нужно ещё по кнопке сделать вывод значений в макет.

Я пытался организовать перебор при помощи выборки, но для Дерева значений это не подходит.
Код 1C v 8.2 УП
 &НаСервере
Функция ПостроитьДерево(ВыборПерсоны)

ДеревоРезультатов=Новый ДеревоЗначений;
ДеревоРезультатов.Колонки.Добавить("Персона");
ДеревоРезультатов.Колонки.Добавить("Мама");
ДеревоРезультатов.Колонки.Добавить("Папа");

НоваяСтрока=ДеревоРезультатов.Строки.Добавить();
НоваяСтрока.Персона=ВыборПерсоны;

Мама=ПолучитьРодителяСемьи(ВыборПерсоны,"Мама");
Если Мама<>Справочники.Персоны.ПустаяСсылка() Тогда
НоваяСтрока.Мама=Мама;
ДобавитьПодчиненнуюСтроку(НоваяСтрока,Мама);
КонецЕсли;
Папа=ПолучитьРодителяСемьи(ВыборПерсоны,"Папа");
Если Папа<>Справочники.Персоны.ПустаяСсылка() Тогда
НоваяСтрока.Папа=Папа;
ДобавитьПодчиненнуюСтроку(НоваяСтрока,Папа);
КонецЕсли;
ЗначениеВДанныеФормы(ДеревоРезультатов,ДеревоЗ);
КонецФункции // ()

&НаСервере
Процедура ДобавитьПодчиненнуюСтроку(СтрокаП,Персона)
СтрокаН=СтрокаП.Строки.Добавить();
СтрокаН.Персона=Персона;
Мама=ПолучитьРодителяСемьи(Персона,"Мама");
Если Мама<>Справочники.Персоны.ПустаяСсылка() Тогда
СтрокаН.Мама=Мама;
ДобавитьПодчиненнуюСтроку(СтрокаН,Мама);
КонецЕсли;
Папа=ПолучитьРодителяСемьи(Персона,"Папа");
Если Папа<>Справочники.Персоны.ПустаяСсылка() Тогда
СтрокаН.Папа=Папа;
ДобавитьПодчиненнуюСтроку(СтрокаН,Папа);
КонецЕсли;
КонецПроцедуры


Помогите пожалуйста реализовать перебор дерева значений.
Изменено 17.06.13 12:38:05
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
17.06.2013 12:39Ответ № 1
(0) ApSE, стандартно через
Код 1C v 8.2 УП
 Для каждого стр из ДеревоРезультатов Цикл

КонецЦикла;
ApSE
17.06.2013 13:13Ответ № 2
Спасибо, но Для Каждого не подходит. Он проходит один раз, и выводит одну строку, а если делать рекурсию, то получается бесконечный цикл.
Mokey
17.06.2013 14:00Ответ № 3
(2) ApSE, у дерева значений есть коллекция строк, которые и надо обходить. У каждой строки в коллекции есть Родитель, если он Неопределено, значит Вы на самом верхнем уровне дерева. Если дерево построено без хотростных условий и ручных заполнений, то количество строк в последнем уровне будет равно 0, т.е. пустая коллекция.
Код 1C v 8.2 УП
 
Для каждого стр из ДеревоРезультатов.Строки Цикл
Для Каждого стр1 Из стр.строки Цикл
КонецЦикла;
КонецЦикла;

и .т.д.
ApSE
17.06.2013 14:43Ответ № 4
(3) Mokey, Спасибо, буду пробовать.
Подсказка: Для редактирования своего ответа щелкните по значку (справа)
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.