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