1С:Предприятие. Дерево значений. Обход дерева программными средствами

Объект конфигурации 1С:Предприятие «дерево значений» представляет собой набор значений любого типа, схожий с другим часто используемым объектом — таблицей значений. Аналогично таблице значений он содержит строки и столбцы. Отличие состоит в том, что строки дерева значений имеют иерархическую структуру, т.е. подчинены друг другу.

Создание дерева значений:

 Дерево=новый ДеревоЗначений;

Создание колонок:

 Дерево.Колонки.Добавить(«НазваниеКолонки»);

Создание строки дерева верхнего уровня иерархии и запись информации:

 Уровень0=Дерево.Строки.Добавить();
Уровень0.НазваниеКолонки=значение;

Добавление подчиненной строки:

 Уровень1=Уровень0.Строки.Добавить();
Уровень1.НазваниеКолонки=значение;

Поскольку дерево значений содержит несколько уровней иерархии, то для обхода его полного обхода будет недостаточно использования цикла Для каждого. Эту задачу можно решить двумя способами: Первый способ предполагает использование нескольких циклов Для каждого, вложенных друг в друга:

 Для каждого Строка0 из Дерево.Строки Цикл
Сообщить (Строка0.Колонка);
Для каждого Строка1 из Строка0.Строки Цикл

КонецЦикла;
КонецЦикла;

Такой способ имеет один существенный недостаток — мы должны заранее знать количество уровней иерархии дерева значений, и это количество должно быть небольшим, иначе количество вложенных циклов будет чересчур велико. В случае, если заранее неизвестно количество уровней иерархии, необходимо использовать рекурсию, а механизм обхода оформить отдельной процедурой.

 Процедура ОбходДерева(Элемент)
ПодчиненныйЭлемент=Элемент.Строки;
Для каждого Строка из ПодчиненныйЭлемент Цикл
Сообщить (Строка.Колонка);
ОбходДерева(Строка);
КонецЦикла;
КонецПроцедуры;

Первый раз эту процедуру нужно вызвать из основного модуля, передав туда строку верхнего уровня дерева значений в качестве первого параметра.

 Для каждого Строка из Дерево.Строки Цикл
Сообщить (Строка.Колонка);
ОбходДерева(Строка);
КонецЦикла;

Поделиться в соц. сетях

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

10 + шесть =