Работа с деревом значений для новичков (Управляемые формы 8.3)

Пример работы с деревом значений (для новичков) на управляемых формах (8.3)

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

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

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

 

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

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

 

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

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

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

 

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

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

Дерево.ПолучитьЭлементы().Очистить();

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

 

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

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

 

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

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

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

ПодчиненныеСтроки  = СтрокаДерева.ПолучитьЭлементы();

Если ПодчиненныеСтроки.Количество() > 0 Тогда
ОбойтиРекурсивноСтрокиДереваНаКлиенте(ПодчиненныеСтроки);
КонецЕсли;
КонецЦикла;
КонецПроцедуры

 

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

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

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

Если СтрокаДерева.Строки.Количество() > 0 Тогда
ОбойтиДеревоРекурсивноСтрокиДереваНаСервере(СтрокаДерева);
КонецЕсли;
КонецЦикла;
КонецПроцедуры

 

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *