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

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 Сейчас в теме
А это не вопрос, это чтобы поисковик проиндексировал и какой нибудь нуб если столкнется с той же проблемой, мог без проблем ее решить.

З.Ы. Спасибо что дополнил пост.
Daynestro07; Olenevod; pm74; Sanz; +4 Ответить
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 92 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 2306 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 550 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 2306 07.06.19 10:17 Сейчас в теме
&НаКлиенте
Процедура СвернутьВсеЗадачи(Команда)
	
	СвернутьРазвернутьДерево(Дерево.ПолучитьЭлементы(), Ложь); 
	
КонецПроцедуры

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

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

			Если Развернуть = Истина Тогда
	        	Элементы.Дерево.Развернуть(ЭлементКоллекции.ПолучитьИдентификатор());
			Иначе
				Элементы.Дерево.Свернуть(ЭлементКоллекции.ПолучитьИдентификатор());
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры
Показать
syurev; tmh_mazin_p; +2 Ответить
21. kassbar 157 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 311 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 166 05.02.24 20:34 Сейчас в теме
Вы будете смеяться, но и через 10 лет после начала обсуждения тут есть чего добавить ;)

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

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

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

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

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

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

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

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


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

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

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

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



&НаСервере
Процедура РазвернутьНаСервере()
Дерево = РеквизитФормыВЗначение("ДеревоЗначений");
КопияДерева = Дерево.Скопировать();
ЗначениеВРеквизитФормы(КопияДерева,"ДеревоЗначений");
КонецПроцедуры
Показать
39. AnatolPopov 166 22.03.24 00:43 Сейчас в теме
(38) Чередование НеРаскрывать и РаскрыватьВсеУровни здесь важно?
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день