1С 8.3 Получить уровень вложенности дерева значений - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Получить уровень вложенности дерева значений

Данные > Примеры кода 1С > 1С 8.3 Дерево значений
Функция вычисляет максимальную глубину (уровень вложенности) дерева значений.

Параметры:
ДеревоЗначений – Входное дерево значений, для которого определяется максимальная глубина.

Возвращаемое значение:
Число – максимальная глубина дерева (минимальное значение: 1, если есть хотя бы корневая строка).

Алгоритм работы:
Инициализирует переменную МаксГлубина со значением 0.
Для каждой корневой строки дерева вызывает вспомогательную функцию РекурсивныйОбходДерева, передавая текущую строку и начальную глубину (1).
Обновляет МаксГлубина, выбирая максимальное значение между текущей глубиной и результатом рекурсивного обхода.
Возвращает итоговую максимальную глубину.

Описание функции РекурсивныйОбходДерева
Назначение:
Вспомогательная рекурсивная функция для обхода поддерева и определения его глубины.

Параметры:
Строка – Текущая строка дерева значений.
ТекущаяГлубина – Глубина текущего уровня вложенности.

Возвращаемое значение:
Число – максимальная глубина для текущего поддерева.

Алгоритм работы:
Запоминает текущую глубину как локальный максимум.
Для каждой подчиненной строки рекурсивно вызывает себя, увеличивая глубину на 1.
Сравнивает глубину каждой ветви и возвращает максимальное значение.

Пример использования:
МаксГлубинаДерева = ПолучитьМаксГлубинуДерева(ДеревоЗначений);
// Примечание: Функция корректно обрабатывает деревья любой структуры, включая отсутствие строк (вернет 0) или сложные ветвящиеся иерархии.
Найти макс. глубину дерева значений в 1С в 1С 8.3:
Функция ПолучитьМаксГлубинуДерева(ДеревоЗначений) Экспорт

   МаксГлубина = 0;
   Для Каждого Строка Из ДеревоЗначений.Строки Цикл
       МаксГлубина = Макс(МаксГлубина, РекурсивныйОбходДерева(Строка, 1));
   КонецЦикла;

   Возврат МаксГлубина;

КонецФункции

Функция РекурсивныйОбходДерева(Строка, ТекущаяГлубина)

   МаксГлубина = ТекущаяГлубина;
   Для Каждого ПодчиненнаяСтрока Из Строка.Строки Цикл
       МаксГлубина = Макс(МаксГлубина, РекурсивныйОбходДерева(ПодчиненнаяСтрока, ТекущаяГлубина + 1));
   КонецЦикла;

   Возврат МаксГлубина;

КонецФункции

// МаксГлубинаДерева = ПолучитьМаксГлубинуДерева(ДеревоЗначений);
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 28.04.2024
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому