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





Я когда такое у себя делаю, ещё добавляю пункт «раскрыть по текущему уровню» — исходя из уровня текущей строки в интерфейсе. Юзверю ведь не всегда удобно увидеть/понять, на каком уровне та или иная ветка.
Ну и естественно, количество уровней определяется динамически, по ходу дела))