|
Проблема с обходом дерева (пропадает ровно половина строк) | ☑ | ||
---|---|---|---|---|
0
icherski
16.08.16
✎
11:24
|
Коллеги, нужна помощь коллективного разума в решении проблемы с деревом. После перебора содержимого дерева в цикле чудесным образом пропадает половина строк. Подскажите, где ошибка?
// в дереве по ряду параметров отбираются плохие группы, а их содержимое переносится на уровень выше Процедура ПроверитьСодержимоеГруппы(Дерево, ПроблемнаяГруппа) Если ПлохаяГруппа(ПроблемнаяГруппа.НоменклатураСсылка) Тогда Для Каждого Стр ИЗ ПроблемнаяГруппа.Строки Цикл ПереместитьСтрокуДерева(Дерево, Стр, ПроблемнаяГруппа.Родитель, ); КонецЦикла; ПроблемнаяГруппа.Родитель.Строки.Удалить(ПроблемнаяГруппа); КонецЕсли; КонецПроцедуры Саму процедуры вызываю как-то так: ДеревоГрупп = мРезультатЗапросаИерархияНоменклатуры.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Для каждого СтрДерева из ДеревоГрупп.Строки Цикл Для каждого СтрДва из СтрДерева.Строки Цикл ПроверитьСодержимоеГруппы(ДеревоГрупп.Строки, СтрДва); Попытка Для каждого СтрТри из СтрДва.Строки Цикл ПроверитьСодержимоеГруппы(ДеревоГрупп.Строки, СтрТри); КонецЦикла; Исключение КонецПопытки; КонецЦикла; КонецЦикла; Имеем следующую структуру: - Корень 1 -- Корень 2 --- Элемент 1 --- Элемент 2 --- Элемент 3 --- Элемент 4 После обработки остается такая картина: - Корень 1 -- Элемент 1 -- Элемент 2 Куда пропадают Элементы 3 и 4?)) |
|||
1
vicof
16.08.16
✎
11:27
|
Да где ж вас берут?
|
|||
2
vicof
16.08.16
✎
11:27
|
Сегодня тема уже обсуждалась лигой флудерастов
|
|||
3
vicof
16.08.16
✎
11:28
|
||||
4
icherski
16.08.16
✎
11:36
|
Вопрос - как обойти дерево в обратном порядке?
|
|||
5
vicof
16.08.16
✎
11:39
|
(4) Надо себя как-то заставить.
Так же, как в прямом, только наоборот. |
|||
6
icherski
16.08.16
✎
11:40
|
Очень профессиональный совет. Спасибо. Специально для подобного рода рекомендаций и заводил тему)
|
|||
7
icherski
16.08.16
✎
11:41
|
Решение задачи:
Если ИспользоватьОтбор Тогда // Используем обратный порядок обхода дерева значений. КоличествоЭлементовКоллекции = ДеревоМетаданных.Строки.Количество(); Для ОбратныйИндекс = 1 По КоличествоЭлементовКоллекции Цикл ТекущийИндекс = КоличествоЭлементовКоллекции - ОбратныйИндекс; СтрокаДерева = ДеревоМетаданных.Строки[ТекущийИндекс]; Если СтрокаДерева.Строки.Количество() = 0 Тогда ДеревоМетаданных.Строки.Удалить(ТекущийИндекс); КонецЕсли; КонецЦикла; КонецЕсли; Надеюсь, кому-нибудь пригодится. Не все ж флуд читать. |
|||
8
lubitelxml
16.08.16
✎
11:45
|
(7) да ты гений )
|
|||
9
Горогуля
16.08.16
✎
11:49
|
(7) ты ещё не дорос до того, чтобы _писать_ флуд. читай
|
|||
10
vicof
16.08.16
✎
11:49
|
(6) Я тебе собственно и посоветовал (7), и ты успешно внял моему совету.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |