ТаблицаЗначений из кроны ДереваЗначений

SDV 101 4 10

Функция - Возвращает ТаблицуЗначений из "бездетных" (листья всех ветвей/крона/конечные узлы) строк Дерева. Включена вспомогательная рекурсивная процедура

// Функция - Возвращает ТаблицЗначений из "бездетных" (листья всех ветвей/крона/конечные узлы) строк Дерева
//  Зависит от ЗаполнитьТаблицуЛистьямиВетви()
//
// Параметры:
//  Дерево      - ДеревоЗначений
//
// Возвращаемое значение:
//  ТаблицаЗначений -
//
Функция ТаблицаЗначенийИзКроныДереваЗначений(Дерево) Экспорт
     Таблица = Новый ТаблицаЗначений;
     Для каждого КолонкаДерева из Дерево.Колонки Цикл
          КолонкаТаблицы = Таблица.Колонки.Добавить(КолонкаДерева.Имя, КолонкаДерева.ТипЗначения);
     КонецЦикла;
     
     Для каждого Ветвь Из Дерево.Строки Цикл
          ЗаполнитьТаблицуЛистьямиВетви(Таблица, Ветвь);
     КонецЦикла;
     Возврат Таблица;
КонецФункции

// Процедура - Заполнить таблицу листьями ветви.
//  Рекурсивная вспомогательная функция для ТаблицаЗначенийИзКроныДереваЗначений()
//
// Параметры:
//  Таблица     - ТаблицаЗначений -
//  Ветвь     - СтрокаДереваЗначений -
//
Процедура ЗаполнитьТаблицуЛистьямиВетви(Таблица, Ветвь)
    ЭтоЛист = (Ветвь.Строки.Количество() = 0);
    Если ЭтоЛист Тогда
        Лист = Ветвь;
        ЗаполнитьЗначенияСвойств(Таблица.Добавить(), Лист);
    Иначе
        Для Каждого Подветвь из Ветвь.Строки Цикл
            ЗаполнитьТаблицуЛистьямиВетви(Таблица, Подветвь);
        КонецЦикла;
    КонецЕсли;
КонецПроцедуры
2
Орфографическая ошибка в Подветвь (найдено 2): Подветвь

Комментарии

Bezeus
#1, 07 мая 2020 21:12

Рекурсия штука здоровская, но зело опасная - можно невзначай положить сервер или рабочий процесс, если не ограничить число рекурсивных вызовов. Будьте аккуратнее.


SDV
#2, 11 мая 2020 21:17

(1) Bezeus, Спасибо. Учту. В следующий раз когда эта функция пригодится придумаю какое-нибудь ограничение на глубину


См. также

Вывод данных СКД в таблицу значений (дерево)

Функция копирования колонок в таблицу или дерево значений (конструктор таблиц и деревьев значений)

Создание схемы компоновки данных программно

Преобразование Объекта ДеревоЗначений в Объект ТаблицаЗначений

МассивИзДереваЗначенийНаСервере

ТаблицаЗначенийВТаблицуХТМЛ

Транспонировать таблицу значений

Сохранение таблицы значений в XML

Интерактивный отбор дерева значений

Модератору