====== ДеревоЗначений ======
===== Описание =====
ДеревоЗначений это таблица значений, у которой есть иерархия, то есть одним строкам могут быть подчинены другие строки, а этих в свою очередь тоже могут быть подчиненные строки. Как это может выглядеть на форме, можно увидеть ниже.
ВниманиеКак и таблица значений, дерево значений доступно только на сервере.
===== Создание и использование =====
Создание дерева значений происходит с помощью метода ''Новый''. У дерева значений работа с коллекцией строк определена явно. И происходит следующим образом:
НовоеДерево = Новый ДеревоЗначений;
НовоеДерево.Колонки.Добавить("КолонкаОдин");
СтрокаДерева = НовоеДерево.Строки.Добавить();
СтрокаДерева.КолонкаОдин = "СтрокаОдин";
ЕщеОднаСтрока = НовоеДерево.Строки.Добавить();
ЕщеОднаСтрока.КолонкаОдин = "СтрокаОдинОдин";
ВтораяВложеная = СтрокаДерева.Строки.Добавить();
ВтораяВложеная.КолонкаОдин = "СтрокаДва";
ВтораяВторая = ВтораяВложеная.Строки.Добавить();
ВтораяВторая.КолонкаОдин = "СтрокаДваДва";
ТретьяВложенная = СтрокаДерева.Строки.Добавить();
ТретьяВложенная.КолонкаОдин = "СтрокаТри";
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
{{:1c:коллекции:treevalues.png?nolink |}}
Вот как выглядит таблица сформированная этим кодом. Вывести на форму дерево значений, можно также как и таблицу значений(добавить на форму табличное поле, указать тип ''Дерево значений'' в источнике данных указать на дерево).
===== Обход дерева значений. =====
Так как дерево значений имеет иерархическую структуру, обход с помощью ''Для каждого'' поможет обойти только верхний уровень, для обхода всех значений, нужно использовать рекурсивную функцию. Функция будет принимать в качестве аргумента коллекцию строк, как то их обрабатывать и вызывать себя передавая коллекцию строк подчиненную текущей строке, таким образом может быть обработано дерево с любым уровнем вложенности.
Собственно вот эта функция:
Процедура ОбходДерева(СтрокиДерева)
Для Каждого ТекущаяСтрокаДерева из СтрокиДерева Цикл
//Здесь происходит обработка строки дерева
…
ОбходДерева(ТекущаяСтрокаДерева.Строки);
КонецЦикла
КонецПроцедуры