Рекурсия. Код ниже раскрывает всё дерево значений, также сворачивает. Мне нужно так, чтобы, к примеру, из 5 уровней дерева, открывать только первый уровень, или 3

1. onelovequick 29.12.23 08:13 Сейчас в теме
Процедура СвернутьРазвернутьДерево(Маршрут, Знач Развернуть) Экспорт

Для Каждого ЭлементКоллекции Из Маршрут Цикл
ВложенныеЭлементыКоллекции = ЭлементКоллекции.ПолучитьЭлементы();
Если ВложенныеЭлементыКоллекции.Количество() > 0 Тогда
СвернутьРазвернутьДерево(ВложенныеЭлементыКоллекции, Развернуть);

Если Развернуть = Истина Тогда
Элементы.Маршрут.Развернуть(ЭлементКоллекции.ПолучитьИдентификатор());
Иначе
Элементы.Маршрут.Свернуть(ЭлементКоллекции.ПолучитьИдентификатор());
КонецЕсли;
КонецЕсли;
КонецЦикла;

КонецПроцедуры
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user1880116 29.12.23 09:07 Сейчас в теме
(1)
Мне нужно так
Добавь параметр уровня, в начале передавай туда 1, при вызове из рекурсии передавай уровень + 1.
3. onelovequick 29.12.23 09:13 Сейчас в теме
(2) Добавил (Это первый уровень раскрываю), он открыл из 5 элементов первые 2, и в них открыл ещё элементы



Счётчик = 0;
Уровень = 1;

Строки = Маршрут.ПолучитьЭлементы();
Для Каждого ЭлементКоллекции Из Строки Цикл
ВложенныеЭлементыКоллекции = ЭлементКоллекции.ПолучитьЭлементы();

Если ВложенныеЭлементыКоллекции.Количество() > 0 Тогда
СвернутьРазвернутьДерево(ВложенныеЭлементыКоллекции, Развернуть);
Если Счётчик = Уровень Тогда
Счётчик = 0;
Прервать;
ИначеЕсли Счётчик < Уровень Тогда
Счётчик = Счётчик + 1;
Если Развернуть = Истина Тогда
Элементы.Маршрут.Развернуть(ЭлементКоллекции.ПолучитьИдентификатор());
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
4. user1880116 29.12.23 09:23 Сейчас в теме
(3) Я даже вникать в такое месиво не буду. Отформатируй код кнопочкой, пожалуйста.
5. onelovequick 29.12.23 09:26 Сейчас в теме
(4) Вот я и понять не могу, я с рекурсией первый раз работаю
6. onelovequick 29.12.23 09:34 Сейчас в теме
(4)
Прикрепленные файлы:
7. user1880116 29.12.23 09:49 Сейчас в теме
(6)
Прикрепленные файлы:
9. onelovequick 29.12.23 09:52 Сейчас в теме
(4)
(7)Первый раз сижу на инфостарте, извините
8. user1880116 29.12.23 09:52 Сейчас в теме
(6) Примерно так. Не проверял.
Процедура СвернутьРазвернутьДерево(ЭлементДерева, ТекущийУзел, Развернуть, НаКакомУровне, ТекущийУровень)

	Для Каждого Узел Из ТекущийУзел.ПолучитьЭлементы() Цикл
		
		Если НаКакомУровне = ТекущийУровень Тогда
			Идентификатор = Узел.ПолучитьИдентификатор();
			Если Развернуть Тогда
				ЭлементДерева.Развернуть(Идентификатор);
			Иначе
				ЭлементДерева.Свернуть(Идентификатор);
			КонецЕсли;
		КонецЕсли;
		
		СвернутьРазвернутьДерево(ЭлементДерева, Узел, Развернуть, НаКакомУровне, ТекущийУровень + 1)
	КонецЦикла;

КонецПроцедуры 

СвернутьРазвернутьДерево(Элементы.Маршрут, Маршрут, Развернуть, 3, 1);
Показать
10. onelovequick 29.12.23 10:07 Сейчас в теме
11. onelovequick 29.12.23 10:22 Сейчас в теме
(4)
(8)Извините меня - либо лыжи не едут, либо я дуб, можете на моем примере?
Прикрепленные файлы:
12. user1880116 29.12.23 10:26 Сейчас в теме
(11)
либо
На твоем примере нельзя, он нерабочий. У тебя в каждый заход в рекурсивную процедуру счетчик и уровень устанавливаются заново, поэтому никакие "если счетчик < уровень" никогда работать не будет
13. onelovequick 29.12.23 10:32 Сейчас в теме
(12) Я вот так перебирал второй уровень, как рекурсивно это сделать?


&НаКлиенте
Процедура РазвернутьВторойУровень() 
	
СтрокиДерева = Маршрут.ПолучитьЭлементы();

Для каждого ПерваяСтрокаДерева Из СтрокиДерева Цикл
    		ПерваяСтрокаДереваИД = ПерваяСтрокаДерева.ПолучитьИдентификатор();
    		Если Элементы.Маршрут.Развернут(ПерваяСтрокаДереваИД) = Ложь Тогда
        		 Элементы.Маршрут.Развернуть(ПерваяСтрокаДереваИД);              
			КонецЕсли;
				 		 Для каждого ВтораяСтрокаДерева Из ПерваяСтрокаДерева.ПолучитьЭлементы() Цикл
							        ВтораяСтрокаДереваИД = ВтораяСтрокаДерева.ПолучитьИдентификатор();
									Если Элементы.Маршрут.Развернут(ВтораяСтрокаДереваИД) = Ложь Тогда
										 Элементы.Маршрут.Развернуть(ВтораяСтрокаДереваИД);
									КонецЕсли;
						 КонецЦикла;
КонецЦикла;

КонецПроцедуры
Показать
14. user1880116 29.12.23 10:35 Сейчас в теме
(13)
как
Разобраться с примером в (8)
15. onelovequick 29.12.23 10:36 Сейчас в теме
(14) Спасибо вам большое, что помогли, надеюсь на победу
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот