Как удалить строку из дерева?

1. j.r.r 67 29.10.18 10:35 Сейчас в теме
Добрейшего времени суток!

Как удалить строку, если известен её номер?

        тДерево = РеквизитФормыВЗначение("Дерево");
            тДерево.Строки.Удалить(Номер);                        
        ЗначениеВРеквизитФормы(тДерево, "Дерево");


Позволяет удалить только родителя. А как удалить потомка?

Принцип отбора примерно такой:

Для Каждого тСтр Из Дерево.Строки Цикл
        
        тДерево = РеквизитФормыВЗначение("Дерево");
            тДерево.Строки.Удалить(Номер);                        
        ЗначениеВРеквизитФормы(тДерево, "Дерево");
    
      Если тСтр.Строки.Количество()>0 Тогда
         ОбходДерева(тСтр);
      КонецЕсли;
   КонецЦикла;
Показать
По теме из базы знаний
Найденные решения
7. j.r.r 67 29.10.18 12:45 Сейчас в теме
(6) Ответа не дождался, пришлось самому

На клиенте:

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


Всё оказалось как всегда просто
i.c.h; taramaz; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dandykry 12 29.10.18 10:37 Сейчас в теме
(1) Смотря какой уровень вложенности. Вообще искать лучше по идентификатору
3. j.r.r 67 29.10.18 10:38 Сейчас в теме
(2) Родитель + потомок (больше нет)

А как удалять по идентификатору?
4. dandykry 12 29.10.18 11:02 Сейчас в теме
(3) Откуда номер строки? как его получили?
5. j.r.r 67 29.10.18 11:10 Сейчас в теме
(4)

Заранее на клиенте получаю значение, потом делаю так:

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

....  
Показать
8. dandykry 12 29.10.18 12:46 Сейчас в теме
(5)
Отвлекли немного......

ДанныеФормыКоллекцияЭлементовДерева (FormDataTreeItemCollection)
Удалить (Delete)
Вариант синтаксиса: По индексу

Синтаксис:

Удалить(<Индекс>)
Параметры:

<Индекс> (обязательный)

Тип: Число.
Индекс элемента в коллекции.
Вариант синтаксиса: По элементу

Синтаксис:

Удалить(<Элемент>)
Параметры:

<Элемент> (обязательный)

Тип: ДанныеФормыЭлементДерева.
Удаляемый элемент.
Описание:

Удаляет элемент из коллекции.

Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).

Да можно:

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

Если СтрокаРодитель = Неопределено Тогда
Дерево.ПолучитьЭлементы().Удалить(ТекущаяСтрока);
Иначе
СтрокаРодитель.ПолучитьЭлементы().Удалить(ТекущаяСтрока);
КонецЕсли;
6. j.r.r 67 29.10.18 11:17 Сейчас в теме
(4) А можно удалить в дереве через ТекущуюСтроку? Чтоб не городить все эти отборы?
7. j.r.r 67 29.10.18 12:45 Сейчас в теме
(6) Ответа не дождался, пришлось самому

На клиенте:

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


Всё оказалось как всегда просто
i.c.h; taramaz; +2 Ответить
9. dandykry 12 29.10.18 12:47 Сейчас в теме
10. j.r.r 67 29.10.18 13:00 Сейчас в теме
(9) Да, да. Искал, но раньше ничего. Залез поглубже и вот оно самое. Спасибо все равно
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот