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