![]() |
|
Удаление строк в дереве | ☑ | ||
---|---|---|---|---|
0
Trezvy
17.06.24
✎
12:04
|
Добрый день!
Помогите удалить из дерева записи по условию. Дерево структурированное, вложений может быть много, поэтому использую рекурсию, но обрабатываются (удаляются) не все записи... Процедура ОбойтиДеревоРекурсивноСтрокиДереваНаСервере(ДеревоЗначений) Для Каждого СтрокаДерева Из ДеревоЗначений.Строки Цикл ТекущаяСтрокаУдалена = Ложь; Если УсловиеУдаления Тогда ДеревоЗначений.Строки.Удалить(СтрокаДерева); ТекущаяСтрокаУдалена = Истина; КонецЕсли; Если ТекущаяСтрокаУдалена = Ложь И СтрокаДерева.Строки.Количество() > 0 Тогда ОбойтиДеревоРекурсивноСтрокиДереваНаСервере(СтрокаДерева); КонецЕсли; КонецЦикла; КонецПроцедуры &НаСервере Функция СкрытьПроцессыИЗадачи(ДеревоПроцессовИЗадач) Экспорт ОбойтиДеревоРекурсивноСтрокиДереваНаСервере(ДеревоПроцессовИЗадач); Возврат ДеревоПроцессовИЗадач; |
|||
1
Повелитель 1С
17.06.24
✎
12:11
|
Когда обходишь коллекцию и сразу удаляешь из неё, ломается итератор. В общем случае нужно добавить строки в массив удаляемых, а потом удалить, либо обходить со своим итератором без "Для каждого".
|
|||
2
Fedor-1971
17.06.24
✎
12:20
|
1+ ДеревоПроцессовИЗадач - если это дерево формы, то там свои особенности обхода.
Сначала получаем элементы уровня 1 (примерно так: ДеревоПроцессовИЗадач.ПолучитьЭлементы() - точно не помню, посмотри в синтаксис-помощнике), потом спускаемся на следующий уровень у конкретного элемента уровня 1 |
|||
3
Trezvy
17.06.24
✎
13:47
|
(2) Это дерево значений вне формы, в форму оно загружается потом, после формирования.
|
|||
4
Trezvy
17.06.24
✎
13:54
|
(1) Хорошо, при обходе не удаляем строки, а создаем массив удаляемых строк. Как их потом удалить в дереве? Если родительская строка удаляется, подчиненная - если она не попадает по условию в удаляемые, должна "остаться в живых".
"Со своим итератором" - использовать свой счетчик строк? |
|||
5
Мультук
17.06.24
✎
14:02
|
(4) Если родительская строка удаляется, подчиненная - если она не попадает по условию в удаляемые, должна "остаться в живых".
И как же она будет жить то? Без родителя (Parent) -- сиротой? Или вместо папы будет надпись "папа был, но он нас бросил!" |
|||
6
maxab72
17.06.24
✎
14:08
|
(4) "Если родительская строка удаляется, подчиненная - если она не попадает по условию в удаляемые, должна "остаться в живых"." И к кому ее в подчинение ставить?
|
|||
7
Trezvy
17.06.24
✎
14:20
|
(6) (5) Да, верно. Получается, задача решения не имеет, с удалением родительской записи удаляются и дочерние.
Поудаляю тогда только строки без подчиненных, а родительские трогать не буду. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |