Алгоритм поиска родителя при построении элементов боковика по координатам

Материал из 3v-wiki
Перейти к навигации Перейти к поиску


  1. Обходим координату с последнего измерения.
    Например, для координаты [1, 2, 3] обход будет с элемента последнего измерения 3.
  2. Ищем для элемента измерения родителя.
    • Если родитель есть, то подставляем его в изначальную координату и ищем по ней элемент уже добавленный в боковик.
      Например, изначальная координата [1, 2, 3] для элемента последнего измерения 3 есть родитель 2, значит в боковике будет искаться элемент по координате [1, 2, 2].
    • Если родителя нет, то значит это измерение не нужно учитывать при поиске родителя, а родителем будет первый элемент найденный по частичной координате.
      Например, изначальная координата [1, 2, 3] для элемента последнего измерения 3 нет родителя, значит в боковике будет искаться первый элемент координата которого соответствует частичной координате [1, 2, *]. (где * любой идентификатор).
  3. Повторяем пункт 2 для каждого измерения координаты начиная с последнего, до тех пор, пока не будет найден родитель, если в итоге родитель не найден, то элемент будет добавлен в корень.
    • Частичная координата после второй итерации будет выглядеть так [1, *, *].

Пример

Справочник А

Идентификатор Наименование Родитель
1 Всего -
2 Элемент А №1 1
3 Элемент А №2 1

Справочник Б

Идентификатор Наименование Родитель
1 Элемент Б №1 -
2 Элемент Б №2 1
3 Элемент Б №3 -

В боковике отчёта справочник А и справочник Б.

Уже отстроенные элементы боковика.

Координата элемента Координата родителя
[1,1] -
[1,2] [1,1]
[1,3] [1,1]
[2,1] [1,1]
  1. Нужно построить элемент с координатой [2, 2].
    В справочнике Б родитель для элемента 2 является элемент 1, значит формируем координату [2, 1] и находим по ней элемент боковика, который будет родителем для [2,2].
  2. Нужно построить элемент с координатой [3, 1].
    В справочнике Б для элемента 1 нет родителя, значит формируем частичную координату [3, *] и не находим по ней ни одного подходящего элемента. Делаем тоже самое для справочника А, в справочника А для элемента 3 родителем является элемент 1, значит заменяем элемент в частичной координате и получаем частичную координату [1, *] и находим по ней первый элемент [1,1], который будет родителем для [3, 1].