![]() |
|
Собрать данные из ДеревоЗначений в ТаблицуЗначений определенным образом | ☑ | ||
---|---|---|---|---|
0
AneJIbcuH
10.09.16
✎
09:14
|
Всем привет! Ломаю голову над такой штукой, есть дерево значений
Группа 1 Группа 1.1 Группа 1.1.1 Группа 1.1.2 Группа 1.1.3 Группа 1.2 Группа 1.2.1 Группа 1.2.2 Группа 2 Группа 2.1 Группа 2.1.1 Группа 2.1.2 И тд, уровней может быть больше!, напротив каждой строки есть определенное значение. Необходимо собрать из этого ТЗ следующим образом: Для значения каждого конечного элемента ДЗ (самые последние уровни - Группа 1.1.1 ... Группа 2.1.1 и тд) получить строку вида: "Группа 1 --> Группа 1.1 --> Группа 1.1.1" ... "группа 1 --> Группа 1.2 --> Группа 1.2.1" ... "Группа 2 --> Группа 2.1 --> Группа 2.1.1" и тд, повторюсь, уровней может быть больше. Организовал рекурсию по ДЗ, имею уровни, знаю последние строки. Но при проходе Группа 1.2 и тд. получается лажа и на этом стопарюсь. Кто какие идеи может подкинуть? |
|||
1
bodri
10.09.16
✎
09:54
|
Попробуй в СКД закинуть, а от туда выгрузить в ТЗ, я подобное делал, но только из ТЗ в ДЗ
|
|||
2
Diman000
10.09.16
✎
09:58
|
Бежишь рекурсией по дереву, строку, у которой нет подчиненных пишешь в ТЗ, перечисляя всех ее родителей.
В чем сложность? |
|||
3
Diman000
10.09.16
✎
10:01
|
Сначала сделай по-простому. Не надо начинать запоминать родителей и формировать строку в процессе обхода дерева.
Нашел нижний уровень -> вызвал еще одну процедуру, которая рекурсивно всех родителей тебе выдаст -> записал в ТЗ. Да, не самый идеал, зато дешево, надежно и практично. Про оптимизацию потом будешь думать, если она вообще потребуется. |
|||
4
AneJIbcuH
10.09.16
✎
10:03
|
(1) не представляю, как ДЗ закинуть в СКД. ТЗ конечно
гораздо проще. |
|||
5
AneJIbcuH
10.09.16
✎
10:04
|
(3) Согласен, такой вариант сразу был в голове. Но некую оптимальность охото :)
|
|||
6
Diman000
10.09.16
✎
10:08
|
Оптимальность решения задачи в этом и состоит, чтобы не тратить время там где это не требуется :)
В любом случае тут сначала надо по-простому сделать, чтобы хоть какой-то результат получить. |
|||
7
МихаилМ
10.09.16
✎
10:10
|
Функция ТД_ТЗ(ТД,ТЗ)
Перем ПостроительЗапроса; Перем Результат; ПостроительЗапроса = Новый ПостроительЗапроса; ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ); Результат = ПостроительЗапроса.Результат; // отобранные строки типа РезультатЗапроса ТЗ = Результат.Выгрузить(); //ТЗ.ВыбратьСтроку(); КонецФункции |
|||
8
AneJIbcuH
10.09.16
✎
10:18
|
(7) Совсем совсем не к месту. Новый ОписаниеИсточникаДанных() - Не поддерживает ДеревоЗначений
|
|||
9
zak555
10.09.16
✎
10:19
|
(7) что такое тд?
|
|||
10
МихаилМ
10.09.16
✎
11:05
|
сорри
ПостроительЗапроса замените на Построительотчета |
|||
11
Serginio1
10.09.16
✎
12:26
|
||||
12
AneJIbcuH
10.09.16
✎
18:22
|
Сделал пока так:
Функция РекурсивноеЧтениеДерева(ТаблицаНаправлений, СтрокаДерева, Уровень = 0) НашеДерево = СтрокаДерева.Строки; Для каждого ТекСтрокаДерева из НашеДерево Цикл КонечнаяГруппа = (ТекСтрокаДерева.Строки.Количество() = 0); Если КонечнаяГруппа Тогда СтрокаНаправления = ТаблицаНаправлений.Добавить(); СтрокаНаправления.ИдГруппы = ТекСтрокаДерева.ИдГруппы; ТекНаправление = ""; ВернутьРекурсивноНаправление(ТекСтрокаДерева,ТекНаправление); СтрокаНаправления.НаправлениеСтрока = ТекНаправление; КонецЕсли; РекурсивноеЧтениеДерева(ТаблицаНаправлений, ТекСтрокаДерева, Уровень + 1); КонецЦикла; КонецФункции Процедура ВернутьРекурсивноНаправление(СтрокаДЗ,ТекНаправление,Первый = Истина) Если Первый Тогда ТекНаправление = Строка(СтрокаДЗ.Группа); Иначе ТекНаправление = Строка(СтрокаДЗ.Группа) + "-->" + ТекНаправление; КонецЕсли; Если СтрокаДЗ.Родитель <> Неопределено Тогда ВернутьРекурсивноНаправление(СтрокаДЗ.Родитель,ТекНаправление,Ложь); КонецЕсли; КонецПроцедуры Может у кого более элегантное решение есть :) |
|||
13
Рэйв
10.09.16
✎
20:22
|
(0)Да сделай тз с вложенными тз. Задача для школьников:-)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |