#ДеревоЗначений
Как заполнить дерево значений (на сервере)?
&НаСервере
Процедура ЗаполнитьИзЗапрос()
тДерево = РеквизитФормыВЗначение("Дерево");
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Тест.Колонка1 КАК Колонка1,
| Тест.Колонка2 КАК Колонка2
|ИЗ
| Справочник.Тест КАК Тест";
Выгрузка = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
тДерево = Выгрузка;
ЗначениеВРеквизитФормы(тДерево, "Дерево");
КонецПроцедуры
Как добавить строку (на клиенте)?
&НаКлиенте
Процедура ДобавитьСтрокуНаКлиенте(Команда)
ИдентификаторСтроки = Элементы.Дерево.ТекущаяСтрока;
ТекущаяСтрока = Дерево.НайтиПоИдентификатору(ИдентификаторСтроки);
НоваяСтрокаДерева = ТекущаяСтрока.ПолучитьЭлементы().Добавить();
КонецПроцедуры
Как добавить строку (на сервере)?
&НаСервере
процедура ДобавитьСтрокуНаСервере ()
Дер = ДанныеФормыВЗначение(Дерево,Тип("ДеревоЗначений"));
Родитель=Дер.Строки.Добавить();
Родитель.Наименование = "Родитель";
строка1=Родитель.Строки.Добавить();
строка1.строка = "строка1";
строка2=Родитель.Строки.Добавить();
строка2.строка = "строка2";
ЗначениеВДанныеФормы(Дер,Дерево);
конецпроцедуры
Как удалить текущую строку (на клиенте)?
&НаКлиенте
Процедура УдалитьТекущуюСтрокуНаКлиенте(Команда)
ИдентификаторСтроки = Элементы.Дерево.ТекущаяСтрока;
ТекущаяСтрока = Дерево.НайтиПоИдентификатору(ИдентификаторСтроки);
СтрокаРодитель = ТекущаяСтрока.ПолучитьРодителя();
Если СтрокаРодитель = Неопределено Тогда
Дерево.ПолучитьЭлементы().Удалить(ТекущаяСтрока);
Иначе
СтрокаРодитель.ПолучитьЭлементы().Удалить(ТекущаяСтрока);
КонецЕсли;
КонецПроцедуры
Как очистить дерево (на клиенте)?
&НаКлиенте
Процедура ОчиститьДерево(Команда)
Дерево.ПолучитьЭлементы().Очистить();
КонецПроцедуры
Как очистить дерево (на сервере)?
&НаСервере
Процедура ОчиститьДерево(Команда)
ДЗ = РеквизитФормыВЗначение("Дерево");
ДЗ.Строки.Очистить();
ЗначениеВРеквизитФормы(ДЗ, "Дерево");
КонецПроцедуры
Как перебрать дерево рекурсивно (на клиенте)?
&НаКлиенте
Процедура ОбойтиДеревоРекурсивно(Команда)
ОбойтиРекурсивноСтрокиДереваНаКлиенте(Дерево.ПолучитьЭлементы());
КонецПроцедуры
&НаКлиенте
Процедура ОбойтиРекурсивноСтрокиДереваНаКлиенте(Строки)
Для Каждого СтрокаДерева Из Строки Цикл
Сообщить(СтрокаДерева.Номенклатура);
ПодчиненныеСтроки = СтрокаДерева.ПолучитьЭлементы();
Если ПодчиненныеСтроки.Количество() > 0 Тогда
ОбойтиРекурсивноСтрокиДереваНаКлиенте(ПодчиненныеСтроки);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Как перебрать дерево рекурсивно (на сервере)?
&НаСервере
Процедура ОбойтиДеревоРекурсивноНаСервере()
ДеревоЗначений = РеквизитФормыВЗначение("Дерево");
ОбойтиДеревоРекурсивноСтрокиДереваНаСервере(ДеревоЗначений);
КонецПроцедуры
&НаСервере
Процедура ОбойтиДеревоРекурсивноСтрокиДереваНаСервере(ДеревоЗначений)
Для Каждого СтрокаДерева Из ДеревоЗначений.Строки Цикл
Сообщить(СтрокаДерева.Номенклатура);
Если СтрокаДерева.Строки.Количество() > 0 Тогда
ОбойтиДеревоРекурсивноСтрокиДереваНаСервере(СтрокаДерева);
КонецЕсли;
КонецЦикла;
КонецПроцедуры