Skip to content

Instantly share code, notes, and snippets.

@b4tman
Created August 18, 2020 07:14
Show Gist options
  • Save b4tman/15c563ec3410738df0daa3fdaa5a05b2 to your computer and use it in GitHub Desktop.
Save b4tman/15c563ec3410738df0daa3fdaa5a05b2 to your computer and use it in GitHub Desktop.
1c создание дерева по таблице
Функция ПолучитьДеревоПоТаблице(Таблица, Ключ, КлючРодитель)
Результат = Новый ДеревоЗначений;
Для Каждого Колонка Из Таблица.Колонки Цикл
Результат.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения, Колонка.Заголовок, Колонка.Ширина);
КонецЦикла;
Таблица.Индексы.Добавить(Ключ);
Таблица.Индексы.Добавить(КлючРодитель);
ОтборКлюч = Новый Структура(Ключ);
ОтборРодитель = Новый Структура(КлючРодитель);
// поиск строк первого уровни (корня)
Для Каждого ТекСтр Из Таблица Цикл
ОтборКлюч[Ключ] = ТекСтр[КлючРодитель];
СтрокиРодители = Таблица.НайтиСтроки(ОтборКлюч);
ЭтоСтрокаКорня = ( 0 = СтрокиРодители.Количество() );
Если ЭтоСтрокаКорня Тогда
СтрокаДерева = Результат.Строки.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаДерева, ТекСтр);
КонецЕсли;
КонецЦикла;
// заполнение дерева
Для Каждого СтрокаКорня Из Результат.Строки Цикл
ЗаполнитьВеткуДереваПоТаблице(Таблица, Ключ, КлючРодитель, СтрокаКорня);
КонецЦикла;
Возврат Результат;
КонецФункции
Процедура ЗаполнитьВеткуДереваПоТаблице(Таблица, Ключ, КлючРодитель, СтрокаДерева)
ОтборРодитель = Новый Структура(КлючРодитель);
ОтборРодитель[КлючРодитель] = СтрокаДерева[Ключ];
СтрокиПотомки = Таблица.НайтиСтроки(ОтборРодитель);
Для Каждого ТекСтр_Потомки Из СтрокиПотомки Цикл
СтрокаПотомок = СтрокаДерева.Строки.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаПотомок, ТекСтр_Потомки);
ЗаполнитьВеткуДереваПоТаблице(Таблица, Ключ, КлючРодитель, СтрокаПотомок);
КонецЦикла;
КонецПроцедуры
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment