дзОтделы = Новый ДеревоЗначений; дзОтделы.Колонки.Добавить("Отдел"); дзОтделы.Колонки.Добавить("Руководитель"); Нов = дзОтделы.Строки.Добавить(); //индекс 0 Нов.Отдел = "Бухгалтерия"; Нов = дзОтделы.Строки.Добавить(); //индекс 1 Нов.Отдел = "Руководство"; //детализируем отдел "Бухгалтерия" Нов = дзОтделы.Строки[0] .Строки.Добавить (); Нов.Отдел = "Расчет зарплаты"; Нов = дзОтделы.Строки[0].Строки.Добавить(); Нов.Отдел = "Основные средства"; //детализируем руководство Нов = дзОтделы.Строки[1] .Строки.Добавить (); Нов.Отдел = "Высшее руководство"; Нов = дзОтделы.Строки[1].Строки.Добавить(); Нов.Отдел = "Отдел маркетинга"; //Так же, как и с таблицей значений, можно создать полную копию деревазначений //с помощью метода Скопировать: НОваяОргСтруктура = ДзОтделы.Скопировать();
Обход строк реализуется с помощью конструкции «Для Каждого» или оператором [...]:
//1-й вариант: обход строк 1-го уровня Для Каждого стр Из дзОтделы Цикл Сообщить(стр.Отдел); КснецЦикла;
//2-й вариант (индексация строк начинается с 0) Для н = 0 По дзОтделы.Строки.Количество()-1 Цикл стр = дзОтделы.Строки[н]; Сообщить(стр); КснецЦикла;
Следующая программа с помощью рекурсивной процедуры обходит все строки дерева значений, включая подчиненные:
Процедура ПоказатьПодчиневные (СтрокаДерева,Уровень=0) Для Каждого стр Из СтрокаДерева.Строки Цикл отступ = ""; Для н = 1 По Уровень Цикл отступ = отступ + " "; КонецЦикла; Сообщить(отступ + стр.Отдел); ПоказатьПодчиненные(стр,Уровень+1); КонецЦикла; КонецПроцедуры
ПоказатьПодчиненные(дзОтделы); |