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

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 Сейчас в теме
Вообще-то у элеменат формы с деревом есть свойство как его отображать.
Не проще ли было написать
ЭлементыФормы.Дерево.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;
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; +38 Ответить
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 Ответить
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 114 03.11.15 09:10 Сейчас в теме
Неть, рекурсия не нужнА. У метода развернуть второй параметр делаем = ИСТИНА, что означает развернуть с подчиненными.
DmitrySinichnikov; Spacer; Serg2000mr; kuzyara; IDija; +5 Ответить
19. Diversus 2298 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 538 12.05.18 22:42 Сейчас в теме
&НаКлиенте
Процедура РазвернутьВсеДерево(Команда)
   Элементы.Дерево.Развернуть(0,Истина);    
КонецПроцедуры
Maxanamoon; additive; Meson; Annette-326523; +4 Ответить
18. tireal 72 28.02.19 14:55 Сейчас в теме
(16) код не рабочий
(11) это работает только при открытии, при заполнении дерева в форме то данное свойство не на что не влияет.
KazanKokos; Meson; geomap; HaIIpuKoJIe; softgarant; +5 Ответить
20. Diversus 2298 07.06.19 10:17 Сейчас в теме
&НаКлиенте
Процедура СвернутьВсеЗадачи(Команда)
	
	СвернутьРазвернутьДерево(Дерево.ПолучитьЭлементы(), Ложь); 
	
КонецПроцедуры

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

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

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

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

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

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

Все работает. Есть нюанс важный(из описания процедуры):
// имя элемента с таблицей формы (деревом значений) и связанного с ней реквизита формы (должны совпадать).
antonio_i; levante90; HaIIpuKoJIe; +3 Ответить
27. olo_lo4 18.01.21 00:41 Сейчас в теме
а как быть если мне нужно по условию некоторые ветки только сворачивать в очень большом разветвленном дереве значений ?
28. GKG 21 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 Сейчас в теме
&НаКлиенте
Процедура СвернутьВсе(Команда)

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

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

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

Практика показала, что так быстрее.
Оставьте свое сообщение
Вакансии
Программист 1С
Киров (Кировская обл.)
зарплата от 100 000 руб.
Полный день

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

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

1С-Программист (интегратор Битрикс24)
Санкт-Петербург
зарплата от 150 000 руб. до 250 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 100 000 руб.
Временный (на проект)