|
Рекурсивный вывод строк в дерево значений | ☑ | ||
---|---|---|---|---|
0
ddron7
05.03.15
✎
11:29
|
Добрый день!
Есть у кого-нибудь пример вывода строк из запроса в дерево значений для обычной формы. Спасибо |
|||
1
ДенисЧ
05.03.15
✎
11:30
|
Что именно не получается?
Показывай код |
|||
2
Wobland
05.03.15
✎
11:30
|
есть. на здоровье. и формы здесь ни при чём
|
|||
3
chelentano
05.03.15
✎
11:31
|
например: Дерево = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам)
|
|||
4
ddron7
05.03.15
✎
11:31
|
код только в процессе созидания. Вопрос вызывает добавление в иерархию новой строки. Или я туплю...
|
|||
5
fisher
05.03.15
✎
11:31
|
Пример рекурсии для вычисления факториала из плохих учебников уже осилил?
|
|||
6
ddron7
05.03.15
✎
11:31
|
(3) интересует рекурсия...
|
|||
7
fisher
05.03.15
✎
11:32
|
(4) Если в запросе используешь ИТОГИ, то обход результатов - это уже обход дерева. Тупо копирование одного дерева в другое.
|
|||
8
Wobland
05.03.15
✎
11:33
|
(4) чо?
|
|||
9
ddron7
05.03.15
✎
11:37
|
(8) нужен пример рекурсивного создания дерева значений, т.к. первоначально количество полей в запоросе неизвестно (набор полей меняется от условия).... во загнул...
|
|||
10
Ёпрст
05.03.15
✎
11:38
|
(9) запрос выгрузить в дерево значений не предлагать ?
|
|||
11
fisher
05.03.15
✎
11:39
|
(10) Не. Уже предлагали в (3) :)
|
|||
12
ddron7
05.03.15
✎
11:39
|
(10) нет. Уже так делал.
|
|||
13
Крошка Ру
05.03.15
✎
11:42
|
||||
14
Ёпрст
05.03.15
✎
11:44
|
(12) а чего не устраивает ?
Ну.. можешь еще выборку с запроса обойти рекурсивно и слепить дерево ручонками.. так что ле хочешь ? |
|||
15
fisher
05.03.15
✎
11:50
|
Что-то типа такого (за работоспособность не ручаюсь, набросал на коленке):
Процедура ЗаполнениеДерева(Выборка = Неопределено, СтрокиДерева = Неопределено) Если Выборка = Неопределено Тогда Запрос = Новый Запрос; ..................... Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Дерево = Новый ДеревоЗначений; Для Каждого КолонкаРезультата Из Результат.Колонки Цикл Дерево.Колонки.Добавить(КолонкаРезультата.Имя); КонецЦикла; СтрокиДерева = Дерево.Строки; КонецЕсли; Пока Выборка.Следующий() Цикл СтрокаДерева = СтрокиДерева.Добавить(); ЗаполнитьЗначенияСвойств(СтрокаДерева, Выборка); ЗаполнениеДерева(Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам), СтрокаДерева.Строки); КонецЦикла; КонецПроцедуры |
|||
16
fisher
05.03.15
✎
11:59
|
Тьфу, дерево вернуть забыл :)
|
|||
17
GANR
05.03.15
✎
12:08
|
(0) Пост №22 в ветке v8: Заполнить ДеревоЗначений из иерархического справочника
|
|||
18
GANR
05.03.15
✎
12:09
|
(15) А вот это
Если Выборка = Неопределено Тогда Запрос = Новый Запрос; .................... КонецЕсли; надо вынести ЗА рамки рекурсивной процедуры. |
|||
19
Ёпрст
05.03.15
✎
12:11
|
(18) зачем ?
|
|||
20
fisher
05.03.15
✎
12:13
|
(18) С одной стороны как бы да. Так типа логичней и читабельней. А с другой, если это монолитный логический блок без переиспользования, то разнесение его по нескольким процедурам тоже снижает читабельность.
|
|||
21
fisher
05.03.15
✎
12:23
|
(17) Годная тема. Но на практике размеры деревьев ограничены, а рекурсия красивше и лаконичнее. Вот всякие факториалы считать рекурсивно - это да, смерти подобно. А во "взрослых" языках хвостовая рекурсия заменяется на циклы автоматически на этапе компиляции.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |