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