Имя: Пароль:
1C
 
Обход структуры рекурсивно
0 slabak
 
14.10.15
11:40
Добрый день!

Имеется структура у которой в значениях могут быть также структуры.

Задача - Вывести структуру в следующем формате:

Ключ1 - Значение1
Ключ2 - (Ключ1 - Значение1,
         Ключ2 - (Ключ1 - Значение1))
Ключ3 - Значение3

У ключа2 значение является структурой и у этой структуры ключ2 также имеет значение с типом структура.

Подскажите, пожалуйста, как обойти эту структуру рекурсивно и правильно вывести, допустим, в текстовый документ на форму?
Следующая функция затирает ТекстовыйДок после того, как обойдет все элементы структуры.

Функция ОбойтиСтруктуру(СтруктураКОбходу)
    
    Для каждого Поле Из СтруктураКОбходуЦикл
            
            ТекстовыйДок = ТекстовыйДок + Поле.Ключ + ":" + ?(ТипЗнч(Поле.Значение)=Тип("Структура"), ОбойтиСтруктуру(Поле.Значение), Поле.Значение) + Символы.ПС;
            
    КонецЦикла;
        
КонецФункции
1 Горогуля
 
14.10.15
11:45
>затирает ТекстовыйДок
а ты его таскай за собой
2 slabak
 
14.10.15
11:58
(1) Так ведь это реквизит формы, он и так со мной)
3 slabak
 
14.10.15
11:59
(1) Реквизит формы - тип строка.
4 Горогуля
 
14.10.15
11:59
хорошо, научи функцию таскать его за собой
5 itlikbez
 
14.10.15
12:10
(0) В конце функции обычно пишут слово "возврат".
6 DTXyupyup
 
14.10.15
12:11
По идее, не должна она его затирать. Смотри отладчиком, в чем там дело.
7 PR третий
 
14.10.15
12:12
(5) Это только слабые духом. Сильные ничего не возвращают, только забирают.
8 itlikbez
 
14.10.15
12:13
(6) По идее - не должна. А по реализации идеи - должна. Чего там отладчиком смотреть. Все и без отладчика видно.
9 DTXyupyup
 
14.10.15
12:16
(8) И чего видно то?
Он прост процедуру функцией обозвал.
10 DTXyupyup
 
14.10.15
12:29
Разве что он её вызывает криво
ТекстовыйДок = ОбойтиСтруктуру()
но тут этого не видно
11 Mort
 
14.10.15
12:39
Эх, вывод дерева в консольку псевдографикой. Лабораторная работа на первом курсе тыщу лет назад.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.