Рекурсия. Код ниже раскрывает всё дерево значений, также сворачивает. Мне нужно так, чтобы, к примеру, из 5 уровней дерева, открывать только первый уровень, или 3
Процедура СвернутьРазвернутьДерево(Маршрут, Знач Развернуть) Экспорт
Для Каждого ЭлементКоллекции Из Маршрут Цикл
ВложенныеЭлементыКоллекции = ЭлементКоллекции.ПолучитьЭлементы();
Если ВложенныеЭлементыКоллекции.Количество() > 0 Тогда
СвернутьРазвернутьДерево(ВложенныеЭлементыКоллекции, Развернуть);
Если Развернуть = Истина Тогда
Элементы.Маршрут.Развернуть(ЭлементКоллекции.ПолучитьИдентификатор());
Иначе
Элементы.Маршрут.Свернуть(ЭлементКоллекции.ПолучитьИдентификатор());
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Для Каждого ЭлементКоллекции Из Маршрут Цикл
ВложенныеЭлементыКоллекции = ЭлементКоллекции.ПолучитьЭлементы();
Если ВложенныеЭлементыКоллекции.Количество() > 0 Тогда
СвернутьРазвернутьДерево(ВложенныеЭлементыКоллекции, Развернуть);
Если Развернуть = Истина Тогда
Элементы.Маршрут.Развернуть(ЭлементКоллекции.ПолучитьИдентификатор());
Иначе
Элементы.Маршрут.Свернуть(ЭлементКоллекции.ПолучитьИдентификатор());
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) Добавил (Это первый уровень раскрываю), он открыл из 5 элементов первые 2, и в них открыл ещё элементы
Счётчик = 0;
Уровень = 1;
Строки = Маршрут.ПолучитьЭлементы();
Для Каждого ЭлементКоллекции Из Строки Цикл
ВложенныеЭлементыКоллекции = ЭлементКоллекции.ПолучитьЭлементы();
Если ВложенныеЭлементыКоллекции.Количество() > 0 Тогда
СвернутьРазвернутьДерево(ВложенныеЭлементыКоллекции, Развернуть);
Если Счётчик = Уровень Тогда
Счётчик = 0;
Прервать;
ИначеЕсли Счётчик < Уровень Тогда
Счётчик = Счётчик + 1;
Если Развернуть = Истина Тогда
Элементы.Маршрут.Развернуть(ЭлементКоллекции.ПолучитьИдентификатор());
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Счётчик = 0;
Уровень = 1;
Строки = Маршрут.ПолучитьЭлементы();
Для Каждого ЭлементКоллекции Из Строки Цикл
ВложенныеЭлементыКоллекции = ЭлементКоллекции.ПолучитьЭлементы();
Если ВложенныеЭлементыКоллекции.Количество() > 0 Тогда
СвернутьРазвернутьДерево(ВложенныеЭлементыКоллекции, Развернуть);
Если Счётчик = Уровень Тогда
Счётчик = 0;
Прервать;
ИначеЕсли Счётчик < Уровень Тогда
Счётчик = Счётчик + 1;
Если Развернуть = Истина Тогда
Элементы.Маршрут.Развернуть(ЭлементКоллекции.ПолучитьИдентификатор());
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
(6) Примерно так. Не проверял.
Процедура СвернутьРазвернутьДерево(ЭлементДерева, ТекущийУзел, Развернуть, НаКакомУровне, ТекущийУровень)
Для Каждого Узел Из ТекущийУзел.ПолучитьЭлементы() Цикл
Если НаКакомУровне = ТекущийУровень Тогда
Идентификатор = Узел.ПолучитьИдентификатор();
Если Развернуть Тогда
ЭлементДерева.Развернуть(Идентификатор);
Иначе
ЭлементДерева.Свернуть(Идентификатор);
КонецЕсли;
КонецЕсли;
СвернутьРазвернутьДерево(ЭлементДерева, Узел, Развернуть, НаКакомУровне, ТекущийУровень + 1)
КонецЦикла;
КонецПроцедуры
СвернутьРазвернутьДерево(Элементы.Маршрут, Маршрут, Развернуть, 3, 1);
Показать
(12) Я вот так перебирал второй уровень, как рекурсивно это сделать?
&НаКлиенте
Процедура РазвернутьВторойУровень()
СтрокиДерева = Маршрут.ПолучитьЭлементы();
Для каждого ПерваяСтрокаДерева Из СтрокиДерева Цикл
ПерваяСтрокаДереваИД = ПерваяСтрокаДерева.ПолучитьИдентификатор();
Если Элементы.Маршрут.Развернут(ПерваяСтрокаДереваИД) = Ложь Тогда
Элементы.Маршрут.Развернуть(ПерваяСтрокаДереваИД);
КонецЕсли;
Для каждого ВтораяСтрокаДерева Из ПерваяСтрокаДерева.ПолучитьЭлементы() Цикл
ВтораяСтрокаДереваИД = ВтораяСтрокаДерева.ПолучитьИдентификатор();
Если Элементы.Маршрут.Развернут(ВтораяСтрокаДереваИД) = Ложь Тогда
Элементы.Маршрут.Развернуть(ВтораяСтрокаДереваИД);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот