Дерево значений весьма специфичный тип данных в 1С. По сути это таже самая таблица значений но которая имеет свойства иерархичности (древовидности). Соответственно обход дереве не такая и тривиальная задача как кажется на первый взгляд. Ведь нужно обходить древо рекурсивно.
В одной из задач мне понадобилось обойти дерево и удалить из него строки с пустыми значениями. Так как я не особо часто работал с деревом значений, то я принялся реализовывать эту задачу в упор, просто обходя дерево и удаляя строки, однако в таком случае меня ждал провал. При удалении строки из дерева, количество элементов меняется, соответственно индекс обхода цикла сбивается и остаются не удаленные строки. К сожалению я не сразу понял, это и уйму времени потратил на поиск верного решения. Ниже привожу работающий у меня код. На уникальность не претендую, обход дерева значений рекурсивно нашел в интернете и переделал на свой лад.
&НаСервере
Процедура склад_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
//Вставить содержимое обработчика
ДеревоЗнач = РеквизитФормыВЗначение("ДеревоВыбора");
ОбходДереваДетально(ДеревоЗнач);
ЗначениеВРеквизитФормы(ДеревоЗнач, "ДеревоВыбора");
КонецПроцедуры
//Рекурсивная процедура
&НаСервере
Процедура ОбходДереваДетально(ПереданноеДер)
Тз = Новый Массив;
Для Каждого СтрПолученногоДерева Из ПереданноеДер.Строки Цикл
СтрПолученногоДерева.Маркируемый = СтрПолученногоДерева.Характеристика.ор_МаркируемыйТовар;
Если СтрПолученногоДерева.Строки.Количество()>0 Тогда
ОбходДереваДетально(СтрПолученногоДерева);
Иначе
Если СтрПолученногоДерева.Остаток = 0 Тогда
Тз.Добавить(СтрПолученногоДерева);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для Каждого строкаКУдалению Из Тз Цикл
ПереданноеДер.Строки.Удалить(строкаКУдалению);
КонецЦикла;
Тз.Очистить();
КонецПроцедуры
Думаю по коду и так все понятно. Все операции производим на сервере, а потому получаем значения реквизита формы. Передаем на сервер. Там обходим и строки к удалению помещаем в пустой массив. Дальше обходим массив и удаляем строки из нашего дерева. Следующим шагом перемещаем значение дерева опять на форму.