Как удалить строки второго уровня в дереве значений

1. pitdroid 27.02.24 22:24 Сейчас в теме
Подскажите что я делаю не так. Пытаюсь удалить строку второго уровня из дерева значений (создана программно). Верхний уровень удаляется, ниже ошибка "Недопустимое значение параметра (параметр номер 1) (Строка не принадлежит коллекции)"

Вроде, делаю все как надо, по крайне мере другие методы таким способом при обращении к подстроке работают. Пробовал и индексом и через строку вызывать удаление. В отладке смотрел, передается точно нужная строка и она точно принадлежит к удаляемому уровню

Код:

Дерево = РеквизитФормыВЗначение("Дерево");

НомерСтроки = 0;

Для Каждого Строка Из Дерево.Строки Цикл

Если Строка.ПорядковыйНомер = ПорядковыйНомер Тогда
Дерево.Строки.Удалить(Строка);
КонецЕсли;

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


КонецЦикла;

ЗначениеВРеквизитФормы(Дерево, "Дерево");
По теме из базы знаний
Найденные решения
4. unknown181538 158 27.02.24 22:53 Сейчас в теме
(3) Строка.Строки.Удалить(Подстрока); - ну по логике, вам вот это нужно.
И все же, хотя бы для читабельности, напишите Прервать; после удаления.
pitdroid; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. unknown181538 158 27.02.24 22:35 Сейчас в теме
Подстрока.Строки.Удалить(Подстрока); - Это неправильно Подстрока.Строки - это переход на уровень ниже. Получается, вы из коллекции нижнего уровня удаляете текущую строку.
Следующая ошибка - если строку уже удалили выше, то нельзя к ее подстрокам обращаться
И третье - нельзя удалять в цикле обхода - может сместиться указатель. В цикле помещаем удаляемые стороки в массив, после него проходим по массиву, и удаляем из коллекции.
pitdroid; +1 Ответить
3. pitdroid 27.02.24 22:49 Сейчас в теме
(2) 1. Так я и хочу узнать, как удалить строку уровня ниже, не верхнего, а второго. 2. Я немного упростил код для вопроса, у меня стоит условие, удаление происходит либо строки верхнего, либо нижнего уровня. Не будет ситуации, когда после удаления первого уровня, нужно будет попасть на второй. 3. Знал про такой метод, но мне нужно удалить только одну строку, не несколько. Или все равно лучшее применять способ с массивом?

Подстрока.Строки.Удалить(Подстрока); - Это неправильно. А как правильно то в итоге? Как мне удалить строку не из верхнего уровня?
4. unknown181538 158 27.02.24 22:53 Сейчас в теме
(3) Строка.Строки.Удалить(Подстрока); - ну по логике, вам вот это нужно.
И все же, хотя бы для читабельности, напишите Прервать; после удаления.
pitdroid; +1 Ответить
5. pitdroid 27.02.24 22:59 Сейчас в теме
(4) Точно! Просто по невнимательности написал не то наименование коллекции (¬_¬;)
Спасибо
Оставьте свое сообщение

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