Свернуть / Развернуть дерево значений

1. ness 13.02.14 12:49 Сейчас в теме
Долго бегал в поисковик мучался искал как свернуть / развернуть дерево значений программно, безрезультатно. В итоге в который раз убедился, что Отладчик + Синтаксис-помощник рулят. Результаты моих поисков:

  //Свернуть все выделенные строки дерева
Для каждого Строка Из ЭлеменетыФормы.ТабличноеПоле.ВыделенныеСтроки Цикл 
 ЭлементыФормы.ДеревоЗначений.Развернуть(Строка);
КонецЦикла;

 //Развернуть все строки дерева
Для каждого Строка Из ЭлеменетыФормы.ДеревоЗначений.Значение.Строки Цикл 
ЭлементыФормы.ДеревоЗначений.Свернуть(Строка);
КонецЦикла;
Показать
MaCCapAkIII; hottion; olexi2012; Screabes; Rega; RustIG; adhocprog; Somebody1; alevnev; raev72ru; Bolnov; MsDjuice; Lapitskiy; Merkalov; user645544_Snimchenko.Aa; d4rkmesa; sapervodichka; Pe3HuK_AJIeKc; mailrum2004; wokituk; matveev.andrey.v; FeliceYa; monkbest; marku; rokhin; +25 Ответить
По теме из базы знаний
Ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Rothschild 13.02.14 16:04 Сейчас в теме
(1) ness, ну молодец!!!
а вопрос то в чем, где это в мануале лежит ???
3. Rothschild 13.02.14 16:08 Сейчас в теме
(2)
пути в синтакс помошнике:

для 8.1: Интерфейсные объекты \ Элементы управления \ Табличное поле \ ТабличноеПоле \ Методы
для 8.2: Интерфейс (обычный) \ Элементы управления \ Табличное поле \ ТабличноеПоле \ Методы


ТабличноеПоле (TableBox)
Развернуть (Expand)
Синтаксис:
Развернуть(<Строка>, <С подчиненными>)

Параметры:
<Строка> (обязательный)
Строка табличного поля. Тип значения строки табличного поля приведен в описаниях расширений табличного поля у соответствующих объектов.
<С подчиненными> (необязательный)
Тип: Булево. Определяет необходимость раскрытия подчиненных узлов. Истина - раскрывать подчиненные узлы, Ложь - не раскрывать подчиненные узлы.
Значение по умолчанию: Ложь
Описание:
Разворачивает узел в указанной строке дерева.
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
Примечание:
Используется в случае, если с табличным полем связано дерево значений или список справочника в виде дерева.
Показать


ТабличноеПоле (TableBox)
Свернуть (Collapse)
Синтаксис:
Свернуть(<Строка>)

Параметры:
<Строка> (обязательный)
Строка табличного поля. Тип значения строки табличного поля приведен в описаниях расширений табличного поля у соответствующих объектов.
Описание:
Сворачивает узел в указанной строке дерева.
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
Примечание:
Используется в случае, если с табличным полем связано дерево значений или список справочника в виде дерева.
Показать
4. Rothschild 13.02.14 16:16 Сейчас в теме
(3)
ну еще есть аналогичный путь для управляемых форм:
для 8.2: Интерфейс (управляемый) \ Таблица формы \ ТаблицаФормы \ Методы

ЗЫ:
еще один полезный метод из той же серии:

ТаблицаФормы (FormTable)
Развернут (Expanded)

Синтаксис:

Развернут(<Строка>)
Параметры:

<Строка> (обязательный)

Тип: Произвольный.
Идентификатор строки таблицы.
Возвращаемое значение:

Тип: Булево.

Описание:

Определяет, развернут ли узел дерева в указанной строке.

Доступность:

Тонкий клиент, веб-клиент, толстый клиент.
Показать
6. nporrep 50 29.12.14 11:33 Сейчас в теме
(1) ness, не Элеменеты, а Элементы, нуб
17. romankoav 4 24.10.18 13:06 Сейчас в теме
комментарии то поменяйте местами
5. ness 13.02.14 18:34 Сейчас в теме
А это не вопрос, это чтобы поисковик проиндексировал и какой нибудь нуб если столкнется с той же проблемой, мог без проблем ее решить.

З.Ы. Спасибо что дополнил пост.
stepan13; Daynestro07; Olenevod; pm74; Sanz; +5 Ответить
7. hexus 3 29.12.14 12:01 Сейчас в теме
Вообще-то у элеменат формы с деревом есть свойство как его отображать.
Не проще ли было написать
ЭлементыФормы.Дерево.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;
DmitrySinichnikov; shard; esqado; user706710_itsxk; CratosX; madway; wokituk; johny1987; olexi2012; ApTeM_26_; TheOldGuard; perepetulichka; devonec_team; __MaxImuS__; additive; GV.; palmyra2016; Nelli_A86; user1292093; adhocprog; maksa2005; s0u1; Moonlitolga; GonziK_KIV; LiebeMein; kokos3; Merkalov; elga2012; JohnConnor; Светлый ум; German_Tagil; config; EMelihoff; ya.Avoronov; psa247; pbahushevich; kivals; UniversaLL; colci; rokhin; +40 Ответить
12. pbahushevich 30.04.16 22:47 Сейчас в теме
(7) hexus, О спасибо тебе мудрый человек!!!!
adhocprog; +1 Ответить
13. German_Tagil 42 21.12.16 13:49 Сейчас в теме
(7) hexus, Работает на обычных формах
palmyra2016; adhocprog; +2 Ответить
32. vx_gas 26 22.01.24 05:57 Сейчас в теме
(7) Не прокатит если надо обновлять время от времени дерево
8. renmy 93 09.02.15 16:59 Сейчас в теме
НачальноеОтображениеДерева не сработало.

Я сделал так:

&НаКлиенте
Процедура РазвернутьДерево(Команда)
	
	ЭлементыДерева = ДеревоТоваров.ПолучитьЭлементы();
	Для каждого ЭлементДерева Из ЭлементыДерева Цикл
		Элементы.ДеревоТоваров.Развернуть(ЭлементДерева.ПолучитьИдентификатор());
	КонецЦикла;
		
КонецПроцедуры

&НаКлиенте
Процедура СвернутьДерево(Команда)
	
	ЭлементыДерева = ДеревоТоваров.ПолучитьЭлементы();
	Для каждого ЭлементДерева Из ЭлементыДерева Цикл
		Элементы.ДеревоТоваров.Свернуть(ЭлементДерева.ПолучитьИдентификатор());
	КонецЦикла;
	
КонецПроцедуры
Показать
mark_oilbass; kirilyan; Yury1001; maksa2005; Alexs_7574; adhocprog; shakmaev; Somebody1; skyvixen; egorcheg1; Kesak; pyrkin_vanya; steelmorgan; Daynestro07; johny1987; Andreyyy; Uncore; BalalaykaJazz; Anchoret; pm74; director04; colci; AntonS; +23 Ответить
9. Nuuq 76 24.07.15 15:58 Сейчас в теме
УФ дерево Развернуть

&НаКлиенте
Процедура КомандаТаблицаДанныхРазвернутьВсе(Команда)
	
	РазвернутьВсеДерево(ТаблицаДанных.ПолучитьЭлементы());	
	
КонецПроцедуры

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


УФ дерево Свернуть

&НаКлиенте
Процедура КомандаТаблицаДанныхСвернутьВсе(Команда)
	
	СвернутьВсеДерево(ТаблицаДанных.ПолучитьЭлементы());	
	
КонецПроцедуры

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


Предлагаю как-то развивать тему еще XD
indefinitum000; _DaFNa_; mangy; Mahon83; ulen; Metabos; Daynestro07; e.a.afanasyev; myoker; IDija; +10 Ответить
10. monkbest 115 03.11.15 09:10 Сейчас в теме
Неть, рекурсия не нужнА. У метода развернуть второй параметр делаем = ИСТИНА, что означает развернуть с подчиненными.
DIMon_ru; DmitrySinichnikov; Spacer; Serg2000mr; kuzyara; IDija; +6 Ответить
19. Diversus 2310 07.06.19 10:15 Сейчас в теме
(10) У методе Развернуть этот параметр есть, а вот у метода Свернуть этого параметра нет.
11. dtripleh 15.01.16 08:32 Сейчас в теме
В новой платформе можно развернуть все уровни дерева, указав в свойстве таблицы НачальноеОтображениеДерева - раскрыть все уровни
kuzyara; suggestive; pbahushevich; +3 Ответить
14. Fil15 2 02.10.17 15:30 Сейчас в теме
А дня обычных форм есть как свернуть/развернуть дерево по заданному уровню?
15. user868076 23.11.17 15:41 Сейчас в теме
При входе на сервер с рабочего стола исчезает значок "свернуть". Как настроить?
16. vasilievil 551 12.05.18 22:42 Сейчас в теме
&НаКлиенте
Процедура РазвернутьВсеДерево(Команда)
   Элементы.Дерево.Развернуть(0,Истина);    
КонецПроцедуры
Maxanamoon; additive; Meson; Annette-326523; +4 Ответить
18. tireal 74 28.02.19 14:55 Сейчас в теме
(16) код не рабочий
(11) это работает только при открытии, при заполнении дерева в форме то данное свойство не на что не влияет.
KazanKokos; Meson; geomap; HaIIpuKoJIe; softgarant; +5 Ответить
20. Diversus 2310 07.06.19 10:17 Сейчас в теме
&НаКлиенте
Процедура СвернутьВсеЗадачи(Команда)
	
	СвернутьРазвернутьДерево(Дерево.ПолучитьЭлементы(), Ложь); 
	
КонецПроцедуры

&НаКлиенте
Процедура РазвернутьВсеЗадачи(Команда)
	
	СвернутьРазвернутьДерево(Дерево.ПолучитьЭлементы(), Истина); 
	
КонецПроцедуры

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

			Если Развернуть = Истина Тогда
	        	Элементы.Дерево.Развернуть(ЭлементКоллекции.ПолучитьИдентификатор());
			Иначе
				Элементы.Дерево.Свернуть(ЭлементКоллекции.ПолучитьИдентификатор());
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры
Показать
syurev; tmh_mazin_p; +2 Ответить
21. kassbar 158 19.06.19 10:58 Сейчас в теме
СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева()
ilnurmi; anastasita_z; Никулин Леонид; ASG74; Anchoret; Polotenchik; Date; user1559729; Denic_01; pavelpribytkin96; user1393556; karomag; Somebody1; Fartovaya; CnupT; Jungle Murzik; skyvixen; vitolt; DianaS; softgarant; albert.goncharov; +21 Ответить
22. user1231816 25.10.19 14:30 Сейчас в теме
(21) А свернуть типовым методом возможно? Глобальный поиск "СвернутьУзлыДерева" не дал результатов
23. ness 29.07.20 18:40 Сейчас в теме
(22) СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева() это видимо из БСП (библиотека стандартных подсистем). Подключаещь к своей конфе и жить становится легче ;) Тред создавался когда ещё плюшки типа БСП отсутствовали или были в зачаточном состоянии.
26. karomag 23.12.20 18:22 Сейчас в теме
(22)
У меня проблема была, как раз из-за того что дерево сворачивается после
        Дерево = РеквизитФормыВЗначение("ДеревоЗначений");
	ПересчитатьИтогиПоГруппировкам(Дерево.Строки);
	ЗначениеВРеквизитФормы(Дерево, "ДеревоЗначений");

Так что думаю можно такой костыль искользовать)
24. Serg2000mr 316 27.11.20 03:10 Сейчас в теме
У меня СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева(ЭтаФорма, "ДеревоКлиенты") вызывает ошибку.

Реализовал так:

Для каждого Ид Из ДеревоКлиенты.ПолучитьЭлементы() Цикл
	Элементы.ДеревоКлиенты.Развернуть(Ид.ПолучитьИдентификатор(), Истина);
КонецЦикла;
25. karomag 23.12.20 18:18 Сейчас в теме
(24)
СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева

СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева(ЭтаФорма, "ДеревоЗначений",,Истина);

Все работает. Есть нюанс важный(из описания процедуры):
// имя элемента с таблицей формы (деревом значений) и связанного с ней реквизита формы (должны совпадать).
DmitrySinichnikov; burgerkirg; antonio_i; levante90; HaIIpuKoJIe; +5 Ответить
27. olo_lo4 18.01.21 00:41 Сейчас в теме
а как быть если мне нужно по условию некоторые ветки только сворачивать в очень большом разветвленном дереве значений ?
28. GKG 22 30.08.21 14:36 Сейчас в теме
Вот так работает если деревьев много на форме.
&НаКлиенте
Процедура СвернутьРазвернутьДерево(Дерево,имяДерева, Знач Развернуть)

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

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

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



...... Укажем дерево (реквизит формы и его имя.............
Дерево = ДеревоМое1;
имяДерева = "ДеревоМое1";


СвернутьРазвернутьДерево(Дерево.получитьЭлементы(),имяДерева, Истина);
29. AZel84 51 19.07.22 07:43 Сейчас в теме
Всё, что представлено выше, частично не работало. По крайней мере свёртка на платформе 8.3.18.1520
&НаКлиенте
Процедура РазвернутьСвернутьДерево(ДеревоЭлементФормы, ДеревоРеквизитФормы, РазвернутьИстинаСвернутьЛожь) Экспорт
	
	Для каждого ЭлементДерева Из ДеревоРеквизитФормы.ПолучитьЭлементы() Цикл
		
		Если РазвернутьИстинаСвернутьЛожь Тогда
			ДеревоЭлементФормы.Развернуть(ЭлементДерева.ПолучитьИдентификатор(), Истина);
		Иначе
			// Сначала нужно свернуть подчинённые, потом сам узел, иначе не свёртка не происходит
			РазвернутьСвернутьДерево(ДеревоЭлементФормы, ЭлементДерева, РазвернутьИстинаСвернутьЛожь);
			Если ДеревоЭлементФормы.Развернут(ЭлементДерева.ПолучитьИдентификатор()) Тогда
				ДеревоЭлементФормы.Свернуть(ЭлементДерева.ПолучитьИдентификатор());
			КонецЕсли; 
		КонецЕсли; 
		
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура СвернутьДерево(Команда)
	РазвернутьСвернутьДерево(Элементы.ДеревоЭлементов, ДеревоЭлементов, Ложь);
КонецПроцедуры

&НаКлиенте
Процедура РазвернутьДерево(Команда)
	РазвернутьСвернутьДерево(Элементы.ДеревоЭлементов, ДеревоЭлементов, Истина);
КонецПроцедуры
Показать
VictoriaS; ejka; Lapitskiy; +3 Ответить
30. kvadrat2 35 28.03.23 10:47 Сейчас в теме
&НаКлиенте
Процедура СвернутьВсе(Команда)

	СвернутьВсеНаСервере();

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

&НаСервере
Процедура СвернутьВсеНаСервере()
	
	НачальноеОтображениеДереваСохр = Элементы.Дерево.НачальноеОтображениеДерева;
	Элементы.Дерево.НачальноеОтображениеДерева = НачальноеОтображениеДерева.НеРаскрывать;
	ЗначениеВРеквизитФормы(РеквизитФормыВЗначение("Дерево"), "Дерево");
	Элементы.Дерево.НачальноеОтображениеДерева = НачальноеОтображениеДереваСохр;
	
КонецПроцедуры
Показать

Практика показала, что так быстрее.
31. vat-74 166 21.12.23 08:44 Сейчас в теме
В типовой конфигурации сделано так.
&НаКлиенте
Процедура РазвернутьСтрокиДереваПомеченных(Команда)
	СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева(ЭтотОбъект, "ДеревоПомеченныхНаУдаление");
КонецПроцедуры

&НаКлиенте
Процедура СвернутьСтрокиДереваВыбораПомеченных(Команда)
	ВсеСтроки = Элементы.ДеревоПомеченныхНаУдаление;
	Для Каждого ДанныеСтроки Из ДеревоПомеченныхНаУдаление.ПолучитьЭлементы() Цикл 
		ВсеСтроки.Свернуть(ДанныеСтроки.ПолучитьИдентификатор());
	КонецЦикла;
КонецПроцедуры
Показать
33. AnatolPopov 167 05.02.24 20:34 Сейчас в теме
Вы будете смеяться, но и через 10 лет после начала обсуждения тут есть чего добавить ;)

Конкретно про параметр НачальноеОтображениеДерева со значением РаскрыватьВсеУровни.

Оказывается, можно заставить его работать и после начального отображения.
Достаточно делать финт ушами:

Видимость = Ложь; Видимость = Истина;

Отображение опять становится начальным ;)
Срабатывает моментально!
mythos; DJRelax; +2 Ответить
34. Anton11 15.03.24 16:28 Сейчас в теме
(33)
Вы будете смеяться, но и через 10 лет после начала обсуждения тут есть чего добавить ;)

Конкретно про параметр НачальноеОтображениеДерева со значением РаскрыватьВсеУровни.

Оказывается, можно заставить его работать и после начального отображения.
Достаточно делать финт ушами:

Видимость = Ложь; Видимость = Истина;

Отображение опять становится начальным ;)
Срабатывает моментально!


А у чего вы меняете видимость? пробовал с самим деревом, не работает
35. AnatolPopov 167 15.03.24 16:57 Сейчас в теме
(34) Меняю у элемента формы:

Элементы.ДЗСписок.Видимость = Ложь;
Элементы.ДЗСписок.Видимость = Истина;
36. Anton11 21.03.24 16:38 Сейчас в теме
(35) А какая версия платформы у вас подскажите?
37. AnatolPopov 167 21.03.24 17:52 Сейчас в теме
(36) Учебная платформа 8.3.13.1644
38. Anton11 21.03.24 18:11 Сейчас в теме
(37) на 8.3.17 не сработало.
Зато сработало это:

&НаКлиенте
Процедура Развернуть(Команда)

Элементы.ДеревоНаФорме.Видимость = Ложь;
	Элементы.ДеревоНаФорме.Видимость = Истина;
	Элементы.ДеревоНаФорме.НачальноеОтображениеДерева = НачальноеОтображениеДерева.НеРаскрывать;
	Элементы.ДеревоНаФорме.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;
	РазвернутьНаСервере();
КонецПроцедуры



&НаСервере
Процедура РазвернутьНаСервере()
Дерево = РеквизитФормыВЗначение("ДеревоЗначений");
КопияДерева = Дерево.Скопировать();
ЗначениеВРеквизитФормы(КопияДерева,"ДеревоЗначений");
КонецПроцедуры
Показать
39. AnatolPopov 167 22.03.24 00:43 Сейчас в теме
(38) Чередование НеРаскрывать и РаскрыватьВсеУровни здесь важно?
40. Anton11 28.03.24 15:32 Сейчас в теме
(39) Ну да, у меня без этого не сработало
41. Anton11 28.03.24 16:42 Сейчас в теме
Исследования меня привели к самому быстрому методу:

Элементы.Дерево.Видимость = Ложь;
Элементы.Дерево.Отображение = ОтображениеТаблицы.Список;
ЭтаФорма.ОбновитьОтображениеДанных(Элементы.Дерево);
Элементы.Дерево.Видимость = Истина;
Элементы.Дерево.Отображение = ОтображениеТаблицы.Дерево;


Внимание! важна последовательность строк кода)
AnatolPopov; +1 Ответить
42. AnatolPopov 167 28.03.24 22:38 Сейчас в теме
(41) Пляски с бубном продолжаются ;)
43. Dali 15 10.04.24 08:14 Сейчас в теме
(41)
Не работает это. Когда дерево полностью свернуто - тогда работает, попробуйте развернуть одну ветку и нажмите развернуть дерево.
Оставьте свое сообщение

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