Страницы: 1
RSS
Создание плоской многоуровневой иерархии из списка, через связи родитель-потомок., Создание иерархии из списка значений
 
Добрый день, форумчане!
Помогите пожалуйста, мне необходимо сделать список в соответствии с последовательностью значения в иерархии.
Необходимый результат выводится через реализованный макрос CreateHier_V1 на лист2 и группируется по Outlinelevel.
Но на больших объемах строк, выполнение очень долгое. поэтому нужно другое решение.

Делаю на Scripting.Dictionary по полям в таблице
УзелПозиция узла у родителяРодительТип узла
NODEIDNODEPOSITIONPARENTIDNODETYPE
Примечание:
NODEPOSITION - Игнорируем
NODETYPE - определяет уровень вложенности

Условия
1. Ускорить выполнение макроса, путем избавления от рекурсии
2. Записи повторяются, поэтому повторы игнорировать.
3. Самый верхний узел родитель ROOT не нужен.

Примечание: Для типа узла "U" - записи идут вместе, а затем их листья. Наглядно видно если отфильтровать по узлу  "U" (Например строки, 891 - 914, 981 - 1028)
Изменено: vikttur - 20.07.2021 19:30:41
 
Mergens, по после покажите желаемый результат в файле думаю все будет понятнее
Изменено: Mershik - 19.07.2021 21:21:21
Не бойтесь совершенства. Вам его не достичь.
 
Цитата
Mershik написал:
покажите желаемый результат в файле
В файле - это в файле, а не в сообщении. Замените файл в #1.
 
Mershik,Файл и описание требуемого обновил, на листе 2 ожидаемый результат
Результат выполняется в варианте решения 1(в макросе), но т.к. там заложена рекурсия, то на больших объемах более 30000 строк выполняется очень долго.
Поэтому необходимо ускорить в разы, вот и ищу вариант решения проблемы.
Изменено: Mergens - 20.07.2021 01:57:50
 
См. файл.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, Супер! Спасибо, большое. работает отлично.
Изменено: Mergens - 20.07.2021 17:59:35
 
JayBhagavan, Есть ошибка при формировании, если разные значения у ROOT, например Root1...RootN, то собирается не корректно. нарушается последовательность.
Я скинул файл со всем списком, но к сожалению больше 100 Кб нельзя, поэтому в архиве и разбит на части.

Файлы удалены - превышение допустимого размера вложения [МОДЕРАТОР]
Изменено: vikttur - 21.07.2021 00:08:03
 
Mergens, в моём понимании не может быть несколько ROOT. Будет время - перепишу макрос или у кого другого лучший вариант появится.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, Спасибо, но пока кроме Вас желающих пока нет, к сожалению конечно. Я думал также, что верхний узел оказался не самым верхним.
 
Mergens, это комплексная задача и мало кому охота на неё тратить своё время, ИМХО. Мне она просто интересна. Вот, и занимаюсь ею по мере свободного времени. Хотя мне не нравится моё решение.
Попробовал изменить и нашёл такую несостыковку в исходных данных: CL-UH-0000003020 - по сути НОД, но т.к. встречается раньше в качестве РУТ (см. скрин), то это приводит с сбою в логике формирования структуры. С такими косяками в исходной таблице, я, на данный момент, не вижу алгоритма, как это решить.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
Страницы: 1
Наверх