Добрый день, форумчане! Помогите пожалуйста, мне необходимо сделать список в соответствии с последовательностью значения в иерархии. Необходимый результат выводится через реализованный макрос CreateHier_V1 на лист2 и группируется по Outlinelevel. Но на больших объемах строк, выполнение очень долгое. поэтому нужно другое решение.
Делаю на Scripting.Dictionary по полям в таблице
Узел
Позиция узла у родителя
Родитель
Тип узла
NODEID
NODEPOSITION
PARENTID
NODETYPE
Примечание: NODEPOSITION - Игнорируем NODETYPE - определяет уровень вложенности
Условия 1. Ускорить выполнение макроса, путем избавления от рекурсии 2. Записи повторяются, поэтому повторы игнорировать. 3. Самый верхний узел родитель ROOT не нужен.
Примечание: Для типа узла "U" - записи идут вместе, а затем их листья. Наглядно видно если отфильтровать по узлу "U" (Например строки, 891 - 914, 981 - 1028)
Mershik,Файл и описание требуемого обновил, на листе 2 ожидаемый результат Результат выполняется в варианте решения 1(в макросе), но т.к. там заложена рекурсия, то на больших объемах более 30000 строк выполняется очень долго. Поэтому необходимо ускорить в разы, вот и ищу вариант решения проблемы.
JayBhagavan, Есть ошибка при формировании, если разные значения у ROOT, например Root1...RootN, то собирается не корректно. нарушается последовательность. Я скинул файл со всем списком, но к сожалению больше 100 Кб нельзя, поэтому в архиве и разбит на части.
Mergens, это комплексная задача и мало кому охота на неё тратить своё время, ИМХО. Мне она просто интересна. Вот, и занимаюсь ею по мере свободного времени. Хотя мне не нравится моё решение. Попробовал изменить и нашёл такую несостыковку в исходных данных: CL-UH-0000003020 - по сути НОД, но т.к. встречается раньше в качестве РУТ (см. скрин), то это приводит с сбою в логике формирования структуры. С такими косяками в исходной таблице, я, на данный момент, не вижу алгоритма, как это решить.