Как удалить строки второго уровня в дереве значений
Подскажите что я делаю не так. Пытаюсь удалить строку второго уровня из дерева значений (создана программно). Верхний уровень удаляется, ниже ошибка "Недопустимое значение параметра (параметр номер 1) (Строка не принадлежит коллекции)"
Вроде, делаю все как надо, по крайне мере другие методы таким способом при обращении к подстроке работают. Пробовал и индексом и через строку вызывать удаление. В отладке смотрел, передается точно нужная строка и она точно принадлежит к удаляемому уровню
Код:
Дерево = РеквизитФормыВЗначение("Дерево");
НомерСтроки = 0;
Для Каждого Строка Из Дерево.Строки Цикл
Если Строка.ПорядковыйНомер = ПорядковыйНомер Тогда
Дерево.Строки.Удалить(Строка);
КонецЕсли;
Для Каждого Подстрока Из Строка.Строки Цикл
Если Подстрока.ПорядковыйНомер = ПорядковыйНомер Тогда
Подстрока.Строки.Удалить(Подстрока); - тут ломается
КонецЕсли;
КонецЦикла;
КонецЦикла;
ЗначениеВРеквизитФормы(Дерево, "Дерево");
Вроде, делаю все как надо, по крайне мере другие методы таким способом при обращении к подстроке работают. Пробовал и индексом и через строку вызывать удаление. В отладке смотрел, передается точно нужная строка и она точно принадлежит к удаляемому уровню
Код:
Дерево = РеквизитФормыВЗначение("Дерево");
НомерСтроки = 0;
Для Каждого Строка Из Дерево.Строки Цикл
Если Строка.ПорядковыйНомер = ПорядковыйНомер Тогда
Дерево.Строки.Удалить(Строка);
КонецЕсли;
Для Каждого Подстрока Из Строка.Строки Цикл
Если Подстрока.ПорядковыйНомер = ПорядковыйНомер Тогда
Подстрока.Строки.Удалить(Подстрока); - тут ломается
КонецЕсли;
КонецЦикла;
КонецЦикла;
ЗначениеВРеквизитФормы(Дерево, "Дерево");
По теме из базы знаний
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Подстрока.Строки.Удалить(Подстрока); - Это неправильно Подстрока.Строки - это переход на уровень ниже. Получается, вы из коллекции нижнего уровня удаляете текущую строку.
Следующая ошибка - если строку уже удалили выше, то нельзя к ее подстрокам обращаться
И третье - нельзя удалять в цикле обхода - может сместиться указатель. В цикле помещаем удаляемые стороки в массив, после него проходим по массиву, и удаляем из коллекции.
Следующая ошибка - если строку уже удалили выше, то нельзя к ее подстрокам обращаться
И третье - нельзя удалять в цикле обхода - может сместиться указатель. В цикле помещаем удаляемые стороки в массив, после него проходим по массиву, и удаляем из коллекции.
(2) 1. Так я и хочу узнать, как удалить строку уровня ниже, не верхнего, а второго. 2. Я немного упростил код для вопроса, у меня стоит условие, удаление происходит либо строки верхнего, либо нижнего уровня. Не будет ситуации, когда после удаления первого уровня, нужно будет попасть на второй. 3. Знал про такой метод, но мне нужно удалить только одну строку, не несколько. Или все равно лучшее применять способ с массивом?
Подстрока.Строки.Удалить(Подстрока); - Это неправильно. А как правильно то в итоге? Как мне удалить строку не из верхнего уровня?
Подстрока.Строки.Удалить(Подстрока); - Это неправильно. А как правильно то в итоге? Как мне удалить строку не из верхнего уровня?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот