Долго бегал в поисковик мучался искал как свернуть / развернуть дерево значений программно, безрезультатно. В итоге в который раз убедился, что Отладчик + Синтаксис-помощник рулят. Результаты моих поисков:
//Свернуть все выделенные строки дерева
Для каждого Строка Из ЭлеменетыФормы.ТабличноеПоле.ВыделенныеСтроки Цикл
ЭлементыФормы.ДеревоЗначений.Развернуть(Строка);
КонецЦикла;
//Развернуть все строки дерева
Для каждого Строка Из ЭлеменетыФормы.ДеревоЗначений.Значение.Строки Цикл
ЭлементыФормы.ДеревоЗначений.Свернуть(Строка);
КонецЦикла;
Показать
Yellow_Cube; 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;
+26
–
Ответить
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2)
пути в синтакс помошнике:
для 8.1: Интерфейсные объекты \ Элементы управления \ Табличное поле \ ТабличноеПоле \ Методы
для 8.2: Интерфейс (обычный) \ Элементы управления \ Табличное поле \ ТабличноеПоле \ Методы
ТабличноеПоле (TableBox)
Развернуть (Expand)
Синтаксис:
Развернуть(<Строка>, <С подчиненными>)
Параметры:
<Строка> (обязательный)
Строка табличного поля. Тип значения строки табличного поля приведен в описаниях расширений табличного поля у соответствующих объектов.
<С подчиненными> (необязательный)
Тип: Булево. Определяет необходимость раскрытия подчиненных узлов. Истина - раскрывать подчиненные узлы, Ложь - не раскрывать подчиненные узлы.
Значение по умолчанию: Ложь
Описание:
Разворачивает узел в указанной строке дерева.
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
Примечание:
Используется в случае, если с табличным полем связано дерево значений или список справочника в виде дерева.
Показать
ТабличноеПоле (TableBox)
Свернуть (Collapse)
Синтаксис:
Свернуть(<Строка>)
Параметры:
<Строка> (обязательный)
Строка табличного поля. Тип значения строки табличного поля приведен в описаниях расширений табличного поля у соответствующих объектов.
Описание:
Сворачивает узел в указанной строке дерева.
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
Примечание:
Используется в случае, если с табличным полем связано дерево значений или список справочника в виде дерева.
Показать
пути в синтакс помошнике:
для 8.1: Интерфейсные объекты \ Элементы управления \ Табличное поле \ ТабличноеПоле \ Методы
для 8.2: Интерфейс (обычный) \ Элементы управления \ Табличное поле \ ТабличноеПоле \ Методы
ТабличноеПоле (TableBox)
Развернуть (Expand)
Синтаксис:
Развернуть(<Строка>, <С подчиненными>)
Параметры:
<Строка> (обязательный)
Строка табличного поля. Тип значения строки табличного поля приведен в описаниях расширений табличного поля у соответствующих объектов.
<С подчиненными> (необязательный)
Тип: Булево. Определяет необходимость раскрытия подчиненных узлов. Истина - раскрывать подчиненные узлы, Ложь - не раскрывать подчиненные узлы.
Значение по умолчанию: Ложь
Описание:
Разворачивает узел в указанной строке дерева.
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
Примечание:
Используется в случае, если с табличным полем связано дерево значений или список справочника в виде дерева.
ТабличноеПоле (TableBox)
Свернуть (Collapse)
Синтаксис:
Свернуть(<Строка>)
Параметры:
<Строка> (обязательный)
Строка табличного поля. Тип значения строки табличного поля приведен в описаниях расширений табличного поля у соответствующих объектов.
Описание:
Сворачивает узел в указанной строке дерева.
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
Примечание:
Используется в случае, если с табличным полем связано дерево значений или список справочника в виде дерева.
(3)
ну еще есть аналогичный путь для управляемых форм:
для 8.2: Интерфейс (управляемый) \ Таблица формы \ ТаблицаФормы \ Методы
ЗЫ:
еще один полезный метод из той же серии:
ТаблицаФормы (FormTable)
Развернут (Expanded)
Синтаксис:
Развернут(<Строка>)
Параметры:
<Строка> (обязательный)
Тип: Произвольный.
Идентификатор строки таблицы.
Возвращаемое значение:
Тип: Булево.
Описание:
Определяет, развернут ли узел дерева в указанной строке.
Доступность:
Тонкий клиент, веб-клиент, толстый клиент. Показать
ну еще есть аналогичный путь для управляемых форм:
для 8.2: Интерфейс (управляемый) \ Таблица формы \ ТаблицаФормы \ Методы
ЗЫ:
еще один полезный метод из той же серии:
ТаблицаФормы (FormTable)
Развернут (Expanded)
Синтаксис:
Развернут(<Строка>)
Параметры:
<Строка> (обязательный)
Тип: Произвольный.
Идентификатор строки таблицы.
Возвращаемое значение:
Тип: Булево.
Описание:
Определяет, развернут ли узел дерева в указанной строке.
Доступность:
Тонкий клиент, веб-клиент, толстый клиент.
А это не вопрос, это чтобы поисковик проиндексировал и какой нибудь нуб если столкнется с той же проблемой, мог без проблем ее решить.
З.Ы. Спасибо что дополнил пост.
З.Ы. Спасибо что дополнил пост.
Вообще-то у элеменат формы с деревом есть свойство как его отображать.
Не проще ли было написать
Не проще ли было написать
ЭлементыФормы.Дерево.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;
yuraskas; user1316759; 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;
+42
–
Ответить
3
НачальноеОтображениеДерева не сработало.
Я сделал так:
Я сделал так:
&НаКлиенте
Процедура РазвернутьДерево(Команда)
ЭлементыДерева = ДеревоТоваров.ПолучитьЭлементы();
Для каждого ЭлементДерева Из ЭлементыДерева Цикл
Элементы.ДеревоТоваров.Развернуть(ЭлементДерева.ПолучитьИдентификатор());
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура СвернутьДерево(Команда)
ЭлементыДерева = ДеревоТоваров.ПолучитьЭлементы();
Для каждого ЭлементДерева Из ЭлементыДерева Цикл
Элементы.ДеревоТоваров.Свернуть(ЭлементДерева.ПолучитьИдентификатор());
КонецЦикла;
КонецПроцедуры
Показать
УФ дерево Развернуть
УФ дерево Свернуть
Предлагаю как-то развивать тему еще XD
&НаКлиенте
Процедура КомандаТаблицаДанныхРазвернутьВсе(Команда)
РазвернутьВсеДерево(ТаблицаДанных.ПолучитьЭлементы());
КонецПроцедуры
&НаКлиенте
Процедура РазвернутьВсеДерево(КоллекцияЭлементов)
Для каждого ЭлементКоллекции Из КоллекцияЭлементов Цикл
Элементы.ТаблицаДанных.Развернуть(ЭлементКоллекции.ПолучитьИдентификатор());
ВложенныеЭлементыКоллекции = ЭлементКоллекции.ПолучитьЭлементы();
Если (ВложенныеЭлементыКоллекции.Количество() > 0) Тогда
РазвернутьВсеДерево(ВложенныеЭлементыКоллекции);
Иначе
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
ПоказатьУФ дерево Свернуть
&НаКлиенте
Процедура КомандаТаблицаДанныхСвернутьВсе(Команда)
СвернутьВсеДерево(ТаблицаДанных.ПолучитьЭлементы());
КонецПроцедуры
&НаКлиенте
Процедура СвернутьВсеДерево(КоллекцияЭлементов)
Для каждого ЭлементКоллекции Из КоллекцияЭлементов Цикл
ВложенныеЭлементыКоллекции = ЭлементКоллекции.ПолучитьЭлементы();
Если (ВложенныеЭлементыКоллекции.Количество() > 0) Тогда
СвернутьВсеДерево(ВложенныеЭлементыКоллекции);
Иначе
Прервать;
КонецЕсли;
Элементы.ТаблицаДанных.Свернуть(ЭлементКоллекции.ПолучитьИдентификатор());
КонецЦикла;
КонецПроцедуры
ПоказатьПредлагаю как-то развивать тему еще XD
&НаКлиенте
Процедура СвернутьВсеЗадачи(Команда)
СвернутьРазвернутьДерево(Дерево.ПолучитьЭлементы(), Ложь);
КонецПроцедуры
&НаКлиенте
Процедура РазвернутьВсеЗадачи(Команда)
СвернутьРазвернутьДерево(Дерево.ПолучитьЭлементы(), Истина);
КонецПроцедуры
// Сворачивает или разворачивает дерево на форме (включая все дочерние элементы).
//
// Параметры:
// Дерево - ДеревоЗначений - исходное дерево на форме.
// Развернуть - Булево - развернуть (истина) или свернуть (ложь).
//
&НаКлиенте
Процедура СвернутьРазвернутьДерево(Дерево, Знач Развернуть) Экспорт
Для Каждого ЭлементКоллекции Из Дерево Цикл
ВложенныеЭлементыКоллекции = ЭлементКоллекции.ПолучитьЭлементы();
Если ВложенныеЭлементыКоллекции.Количество() > 0 Тогда
СвернутьРазвернутьДерево(ВложенныеЭлементыКоллекции, Развернуть);
Если Развернуть = Истина Тогда
Элементы.Дерево.Развернуть(ЭлементКоллекции.ПолучитьИдентификатор());
Иначе
Элементы.Дерево.Свернуть(ЭлементКоллекции.ПолучитьИдентификатор());
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показать
(22)
У меня проблема была, как раз из-за того что дерево сворачивается после
Так что думаю можно такой костыль искользовать)
У меня проблема была, как раз из-за того что дерево сворачивается после
Дерево = РеквизитФормыВЗначение("ДеревоЗначений");
ПересчитатьИтогиПоГруппировкам(Дерево.Строки);
ЗначениеВРеквизитФормы(Дерево, "ДеревоЗначений");
Так что думаю можно такой костыль искользовать)
У меня СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева(ЭтаФорма, "ДеревоКлиенты") вызывает ошибку.
Реализовал так:
Реализовал так:
Для каждого Ид Из ДеревоКлиенты.ПолучитьЭлементы() Цикл
Элементы.ДеревоКлиенты.Развернуть(Ид.ПолучитьИдентификатор(), Истина);
КонецЦикла;
(24)
Все работает. Есть нюанс важный(из описания процедуры):
СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева
СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева(ЭтаФорма, "ДеревоЗначений",,Истина);
Все работает. Есть нюанс важный(из описания процедуры):
// имя элемента с таблицей формы (деревом значений) и связанного с ней реквизита формы (должны совпадать).
Вот так работает если деревьев много на форме.
&НаКлиенте
Процедура СвернутьРазвернутьДерево(Дерево,имяДерева, Знач Развернуть)
Для Каждого ЭлементКоллекции Из Дерево Цикл
ВложенныеЭлементыКоллекции = ЭлементКоллекции.ПолучитьЭлементы();
Если ВложенныеЭлементыКоллекции.Количество() > 0 Тогда
СвернутьРазвернутьДерево(ВложенныеЭлементыКоллекции, имяДерева,Развернуть);
Если Развернуть = Истина Тогда
Элементы[имяДерева].Развернуть(ЭлементКоллекции.ПолучитьИдентификатор());
Иначе
Элементы[имяДерева].Свернуть(ЭлементКоллекции.ПолучитьИдентификатор());
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
...... Укажем дерево (реквизит формы и его имя.............
Дерево = ДеревоМое1;
имяДерева = "ДеревоМое1";
СвернутьРазвернутьДерево(Дерево.получитьЭлементы(),имяДерева, Истина);
&НаКлиенте
Процедура СвернутьРазвернутьДерево(Дерево,имяДерева, Знач Развернуть)
Для Каждого ЭлементКоллекции Из Дерево Цикл
ВложенныеЭлементыКоллекции = ЭлементКоллекции.ПолучитьЭлементы();
Если ВложенныеЭлементыКоллекции.Количество() > 0 Тогда
СвернутьРазвернутьДерево(ВложенныеЭлементыКоллекции, имяДерева,Развернуть);
Если Развернуть = Истина Тогда
Элементы[имяДерева].Развернуть(ЭлементКоллекции.ПолучитьИдентификатор());
Иначе
Элементы[имяДерева].Свернуть(ЭлементКоллекции.ПолучитьИдентификатор());
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
...... Укажем дерево (реквизит формы и его имя.............
Дерево = ДеревоМое1;
имяДерева = "ДеревоМое1";
СвернутьРазвернутьДерево(Дерево.получитьЭлементы(),имяДерева, Истина);
Всё, что представлено выше, частично не работало. По крайней мере свёртка на платформе 8.3.18.1520
&НаКлиенте
Процедура РазвернутьСвернутьДерево(ДеревоЭлементФормы, ДеревоРеквизитФормы, РазвернутьИстинаСвернутьЛожь) Экспорт
Для каждого ЭлементДерева Из ДеревоРеквизитФормы.ПолучитьЭлементы() Цикл
Если РазвернутьИстинаСвернутьЛожь Тогда
ДеревоЭлементФормы.Развернуть(ЭлементДерева.ПолучитьИдентификатор(), Истина);
Иначе
// Сначала нужно свернуть подчинённые, потом сам узел, иначе не свёртка не происходит
РазвернутьСвернутьДерево(ДеревоЭлементФормы, ЭлементДерева, РазвернутьИстинаСвернутьЛожь);
Если ДеревоЭлементФормы.Развернут(ЭлементДерева.ПолучитьИдентификатор()) Тогда
ДеревоЭлементФормы.Свернуть(ЭлементДерева.ПолучитьИдентификатор());
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура СвернутьДерево(Команда)
РазвернутьСвернутьДерево(Элементы.ДеревоЭлементов, ДеревоЭлементов, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура РазвернутьДерево(Команда)
РазвернутьСвернутьДерево(Элементы.ДеревоЭлементов, ДеревоЭлементов, Истина);
КонецПроцедуры
Показать&НаКлиенте
Процедура СвернутьВсе(Команда)
СвернутьВсеНаСервере();
КонецПроцедуры
&НаСервере
Процедура СвернутьВсеНаСервере()
НачальноеОтображениеДереваСохр = Элементы.Дерево.НачальноеОтображениеДерева;
Элементы.Дерево.НачальноеОтображениеДерева = НачальноеОтображениеДерева.НеРаскрывать;
ЗначениеВРеквизитФормы(РеквизитФормыВЗначение("Дерево"), "Дерево");
Элементы.Дерево.НачальноеОтображениеДерева = НачальноеОтображениеДереваСохр;
КонецПроцедуры
ПоказатьПрактика показала, что так быстрее.
В типовой конфигурации сделано так.
&НаКлиенте
Процедура РазвернутьСтрокиДереваПомеченных(Команда)
СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева(ЭтотОбъект, "ДеревоПомеченныхНаУдаление");
КонецПроцедуры
&НаКлиенте
Процедура СвернутьСтрокиДереваВыбораПомеченных(Команда)
ВсеСтроки = Элементы.ДеревоПомеченныхНаУдаление;
Для Каждого ДанныеСтроки Из ДеревоПомеченныхНаУдаление.ПолучитьЭлементы() Цикл
ВсеСтроки.Свернуть(ДанныеСтроки.ПолучитьИдентификатор());
КонецЦикла;
КонецПроцедуры
Показать
Вы будете смеяться, но и через 10 лет после начала обсуждения тут есть чего добавить ;)
Конкретно про параметр НачальноеОтображениеДерева со значением РаскрыватьВсеУровни.
Оказывается, можно заставить его работать и после начального отображения.
Достаточно делать финт ушами:
Отображение опять становится начальным ;)
Срабатывает моментально!
Конкретно про параметр НачальноеОтображениеДерева со значением РаскрыватьВсеУровни.
Оказывается, можно заставить его работать и после начального отображения.
Достаточно делать финт ушами:
Видимость = Ложь; Видимость = Истина;
Отображение опять становится начальным ;)
Срабатывает моментально!
(33)
А у чего вы меняете видимость? пробовал с самим деревом, не работает
Вы будете смеяться, но и через 10 лет после начала обсуждения тут есть чего добавить ;)
Конкретно про параметр НачальноеОтображениеДерева со значением РаскрыватьВсеУровни.
Оказывается, можно заставить его работать и после начального отображения.
Достаточно делать финт ушами:
Видимость = Ложь; Видимость = Истина;
Отображение опять становится начальным ;)
Срабатывает моментально!
Конкретно про параметр НачальноеОтображениеДерева со значением РаскрыватьВсеУровни.
Оказывается, можно заставить его работать и после начального отображения.
Достаточно делать финт ушами:
Видимость = Ложь; Видимость = Истина;
Отображение опять становится начальным ;)
Срабатывает моментально!
А у чего вы меняете видимость? пробовал с самим деревом, не работает
(37) на 8.3.17 не сработало.
Зато сработало это:
Зато сработало это:
&НаКлиенте
Процедура Развернуть(Команда)
Элементы.ДеревоНаФорме.Видимость = Ложь;
Элементы.ДеревоНаФорме.Видимость = Истина;
Элементы.ДеревоНаФорме.НачальноеОтображениеДерева = НачальноеОтображениеДерева.НеРаскрывать;
Элементы.ДеревоНаФорме.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;
РазвернутьНаСервере();
КонецПроцедуры
&НаСервере
Процедура РазвернутьНаСервере()
Дерево = РеквизитФормыВЗначение("ДеревоЗначений");
КопияДерева = Дерево.Скопировать();
ЗначениеВРеквизитФормы(КопияДерева,"ДеревоЗначений");
КонецПроцедуры
Показать
Исследования меня привели к самому быстрому методу:
Внимание! важна последовательность строк кода)
Элементы.Дерево.Видимость = Ложь;
Элементы.Дерево.Отображение = ОтображениеТаблицы.Список;
ЭтаФорма.ОбновитьОтображениеДанных(Элементы.Дерево);
Элементы.Дерево.Видимость = Истина;
Элементы.Дерево.Отображение = ОтображениеТаблицы.Дерево;
Внимание! важна последовательность строк кода)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот