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

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

1С 8.3 Определение максимального количества используемых уровней иерархической таблицы

Данные > Примеры кода 1С > 1С 8.3 Запросы
Перейти в раздел примеры кода 1С 8.3:
Определяет глубину (максимальное количество используемых уровней иерархии) иерархической таблицы. в 1С 8.3:
// Автор: Назаренко_СВ
//
//Параметры:
// ИерархическаяТабл – Строка – Полное имя таблицы с иерархическими данными, как она задается в языке запросов.
//                       Например, "Справочник.Номенклатура".
//
//Возвращаемое значение:
// Число – Глубина (количество используемых уровней иерархии) указанной иерархической таблицы.
//
Функция ГлубинаТаб(ИерархическаяТабл) Экспорт

   Результат = 0;
   ТекстЗапроса = "
    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    ИсходнаяТаблица.Родитель КАК Родитель
    |ПОМЕСТИТЬ вт_Родители0
    |ИЗ
    |    "+ИерархическаяТабл+" КАК ИсходнаяТаблица
    |";
   Итерация = "
    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    ИсходнаяТаблица.Родитель КАК Родитель
    |ПОМЕСТИТЬ вт_Родители#2
    |ИЗ
    |    вт_Родители#1 КАК Родители
    |ВНУТРЕННЕЕ СОЕДИНЕНИЕ "+ИерархическаяТабл+" КАК ИсходнаяТаблица
    |ПО
    |    Родители.Родитель = ИсходнаяТаблица.Ссылка
    |;
    |УНИЧТОЖИТЬ вт_Родители#1
    |;
    |";

   Запрос = Новый Запрос;
   Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
   Запрос.Текст = ТекстЗапроса;

   Выборка = Запрос.Выполнить().Выбрать();
   Если Выборка.Следующий() Тогда
       КоличЭлементов = Выборка.Количество;
   Иначе
       КоличЭлементов = 0;
   КонецЕсли;

   Пока КоличЭлементов <> 0 Цикл
       ТекстЗапроса2 = СтрЗаменить(Итерация,     "#1", Формат(Результат, "ЧН=0; ЧГ=0"));
       Результат = Результат +1;
       Запрос.Текст = СтрЗаменить(ТекстЗапроса2, "#2", Формат(Результат, "ЧН=0; ЧГ=0"));
       ЗапросРезультаты = Запрос.ВыполнитьПакет();
       Выборка = ЗапросРезультаты[0].Выбрать();
       Если Выборка.Следующий() Тогда
           КоличЭлементов = Выборка.Количество;
       Иначе
           КоличЭлементов = 0;
       КонецЕсли;
   КонецЦикла;

   // Перед выходом удалим последнюю временную таблицу.
   Запрос.Текст = СтрЗаменить("УНИЧТОЖИТЬ вт_Родители#1", "#1", Формат(Результат, "ЧН=0; ЧГ=0"));
   Запрос.Выполнить();
   Возврат Результат;

КонецФункции
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 30.01.2024
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Назад к содержимому