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

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

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

//Развернуть все строки дерева
Для каждого Строка Из ЭлеменетыФормы.ДеревоЗначений.Значение.Строки Цикл
ЭлементыФормы.ДеревоЗначений.Свернуть(Строка);
КонецЦикла;
adhocprog; Somebody1; alevnev; raev72ru; imbalance; MsDjuice; Lapitskiy; Merkalov; user645544_Snimchenko.Aa; d4rkmesa; sapervodichka; Pe3HuK_AJIeKc; mailrum2004; wokituk; matveev.andrey.v; FeliceYa; monkbest; marku; rokhin; +19 Ответить
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
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 48 29.12.14 11:33 Сейчас в теме
(1) ness, не Элеменеты, а Элементы, нуб
17. romankoav 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 Сейчас в теме
Вообще-то у элеменат формы с деревом есть свойство как его отображать.
Не проще ли было написать
ЭлементыФормы.Дерево.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;
adhocprog; maksa2005; s0u1; Moonlitolga; GonziK_KIV; LiebeMein; kokos3; Merkalov; elga2012; JohnConnor; Светлый ум; German_Tagil; config; EMelihoff; ya.Avoronov; psa247; pbahushevich; kivals; UniversaLL; colci; rokhin; +21 Ответить
12. pbahushevich 30.04.16 22:47 Сейчас в теме
(7) hexus, О спасибо тебе мудрый человек!!!!
adhocprog; +1 Ответить
13. German_Tagil 27 21.12.16 13:49 Сейчас в теме
(7) hexus, Работает на обычных формах
adhocprog; +1 Ответить
8. renmy 89 09.02.15 16:59 Сейчас в теме
НачальноеОтображениеДерева не сработало.

Я сделал так:

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

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

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

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


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

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

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


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

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

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

			Если Развернуть = Истина Тогда
	        	Элементы.Дерево.Развернуть(ЭлементКоллекции.ПолучитьИдентификатор());
			Иначе
				Элементы.Дерево.Свернуть(ЭлементКоллекции.ПолучитьИдентификатор());
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры
Показать
tmh_mazin_p; +1 Ответить
21. kassbar 142 19.06.19 10:58 Сейчас в теме
СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева()
karomag; Somebody1; Fartovaya; CnupT; Jungle Murzik; skyvixen; vitolt; DianaS; softgarant; albert.goncharov; +10 Ответить
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. murenysh 16 27.11.20 03:10 Сейчас в теме
У меня СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева(ЭтаФорма, "ДеревоКлиенты") вызывает ошибку.

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

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

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

Все работает. Есть нюанс важный(из описания процедуры):
// имя элемента с таблицей формы (деревом значений) и связанного с ней реквизита формы (должны совпадать).
27. olo_lo4 18.01.21 00:41 Сейчас в теме
а как быть если мне нужно по условию некоторые ветки только сворачивать в очень большом разветвленном дереве значений ?
Оставьте свое сообщение
Вопросы с вознаграждением