GoncharovNN
6/28/2019 - 2:11 AM

#ДеревоЗначений

#ДеревоЗначений

Как заполнить дерево значений (на сервере)?

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

Как добавить строку (на клиенте)?

&НаКлиенте
Процедура ДобавитьСтрокуНаКлиенте(Команда)
	ИдентификаторСтроки = Элементы.Дерево.ТекущаяСтрока;
	ТекущаяСтрока       = Дерево.НайтиПоИдентификатору(ИдентификаторСтроки);
	НоваяСтрокаДерева   = ТекущаяСтрока.ПолучитьЭлементы().Добавить();
КонецПроцедуры
 
Как добавить строку (на сервере)?

&НаСервере
процедура ДобавитьСтрокуНаСервере ()	
	Дер = ДанныеФормыВЗначение(Дерево,Тип("ДеревоЗначений"));	
	Родитель=Дер.Строки.Добавить();
	Родитель.Наименование = "Родитель";
	строка1=Родитель.Строки.Добавить();
	строка1.строка = "строка1";	
	строка2=Родитель.Строки.Добавить();
	строка2.строка = "строка2";
	ЗначениеВДанныеФормы(Дер,Дерево);
конецпроцедуры

 

Как удалить текущую строку (на клиенте)?

&НаКлиенте
Процедура УдалитьТекущуюСтрокуНаКлиенте(Команда)
	ИдентификаторСтроки = Элементы.Дерево.ТекущаяСтрока;
	ТекущаяСтрока       = Дерево.НайтиПоИдентификатору(ИдентификаторСтроки);
	СтрокаРодитель      = ТекущаяСтрока.ПолучитьРодителя();
	
	Если СтрокаРодитель = Неопределено Тогда
		Дерево.ПолучитьЭлементы().Удалить(ТекущаяСтрока);
	Иначе
		СтрокаРодитель.ПолучитьЭлементы().Удалить(ТекущаяСтрока);
	КонецЕсли;
КонецПроцедуры
 

Как очистить дерево (на клиенте)?

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

Как очистить дерево (на сервере)?

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

Как перебрать дерево рекурсивно (на клиенте)?

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

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

Как перебрать дерево рекурсивно (на сервере)?

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

&НаСервере
Процедура ОбойтиДеревоРекурсивноСтрокиДереваНаСервере(ДеревоЗначений)
	Для Каждого СтрокаДерева Из ДеревоЗначений.Строки Цикл
        Сообщить(СтрокаДерева.Номенклатура);
         
        Если СтрокаДерева.Строки.Количество() > 0 Тогда
           ОбойтиДеревоРекурсивноСтрокиДереваНаСервере(СтрокаДерева);
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры