наверх
Свободные IT публикации
логин:
пароль:

Работа с деревом значений

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

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

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

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

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

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

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

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

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

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

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

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

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

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