Один раздел содержит книгу и ручку. Операции раскрытия относятся к интерфейсу; текущий родитель — строка дерева, не ссылка рабочего справочника.
Где и как запускать
Полный модуль новой обычной формы внешней обработки. Только толстый клиент с обычными формами, не сервер и не управляемая форма.
Подготовка
В отдельной внешней обработке создайте обычную форму с реквизитом ДеревоТоваров типа ДеревоЗначений. Добавьте табличное поле ТаблицаДерева, Данные=ДеревоТоваров, и кнопку УчебнаяКоманда.
Свяжите события ПриОткрытии формы и действие кнопки с одноимёнными процедурами. Запускайте только толстым клиентом в режиме обычных форм.
Полный код модуля создаёт своё дерево в памяти. Данные рабочего иерархического справочника не читаются и не меняются.
Процедура ПриОткрытии()
ДеревоТоваров = Новый ДеревоЗначений;
ДеревоТоваров.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
ДеревоТоваров.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
Раздел = ДеревоТоваров.Строки.Добавить();
Раздел.Наименование = "Учебные товары";
Раздел.Количество = 0;
Книга = Раздел.Строки.Добавить();
Книга.Наименование = "Книга";
Книга.Количество = 3;
Ручка = Раздел.Строки.Добавить();
Ручка.Наименование = "Ручка";
Ручка.Количество = 1;
Таблица = ЭтаФорма.ЭлементыФормы.ТаблицаДерева;
Таблица.СоздатьКолонки();
Таблица.АвтоВводНовойСтроки = Ложь;
Таблица.НачальноеОтображениеДерева = НачальноеОтображениеДерева.НеРаскрывать;
КолонкаИмени = Таблица.Колонки.Найти("Наименование");
Если КолонкаИмени = Неопределено Тогда
ВызватьИсключение "Нет колонки собственного дерева";
КонецЕсли;
КолонкаИмени.ОтображатьИерархию = Истина;
Таблица.ТекущаяСтрока = Раздел;
КонецПроцедуры
Процедура УчебнаяКоманда(Кнопка)
Если ДеревоТоваров.Строки.Количество() <> 1 Тогда
ВызватьИсключение "Ожидался один собственный раздел";
КонецЕсли;
Раздел = ДеревоТоваров.Строки[0];
Если Раздел.Строки.Количество() <> 2 Тогда
ВызватьИсключение "Ожидались две собственные дочерние строки";
КонецЕсли;
Таблица = ЭтаФорма.ЭлементыФормы.ТаблицаДерева;
Таблица.Свернуть(Раздел);
Сообщить(Не Таблица.Развернут(Раздел));
Таблица.Развернуть(Раздел, Истина);
Сообщить(Таблица.Развернут(Раздел));
Таблица.ТекущийРодитель = Раздел;
Сообщить(Таблица.ТекущийРодитель = Раздел);
Сообщить(Раздел.Строки[0].Количество + Раздел.Строки[1].Количество = 4);
КонецПроцедурыРазбор по шагам
Раздел, книга и ручка создаются в собственном дереве. Колонки формируются только из его полей.
НачальноеОтображениеДерева задаёт первоначальное состояние. Кнопка проверяет раскрытие отдельно после Свернуть и Развернуть.
СПодчиненными=Истина раскрывает также подчинённые уровни, если они есть.
ТекущийРодитель задаётся собственным объектом строки, не числом индекса и не строкой имени.
Перед каждым индексным доступом проверено ожидаемое число своих строк. После операций количество книг и ручек в сумме 4.
Как проверить результат
Четыре сообщения Истина.
После кнопки раздел раскрыт, два товара сохранены; повторное нажатие повторяет сворачивание и раскрытие.
Ожидаемый результат
Проверен цикл отображения собственного дерева без модификации иерархии данных.
На что обратить внимание
ТабличноеПоле не равно ТаблицаФормы управляемого клиента: этот код туда не подходит.
Сворачивание не удаляет дочерние строки.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.