Преобразовать таблицу значений в дерево с несколькими уровнями вложенности.

1. Andrew189100 18 30.03.23 16:48 Сейчас в теме
Подскажите, пожалуйста, как-то можно, легким движением руки получить из таблицы значений дерево с несколькими уровнями вложенности?

Когда уровень 1. Все понятно. Создаем запрос с итогами, затем выгружаем с обходом по группировками. Или засовываем в построитель и так же выгружаем.
Но, что делать если, допустим надо сгруппировать сначала по одному значению, а затем результат(полученные строки с одним родителем) разбить еще по одному значению...
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. пользователь 30.03.23 18:36
Сообщение было скрыто модератором.
...
4. пользователь 30.03.23 18:37
Сообщение было скрыто модератором.
...
6. пользователь 30.03.23 18:40
Сообщение было скрыто модератором.
...
8. пользователь 30.03.23 18:41
Сообщение было скрыто модератором.
...
9. пользователь 30.03.23 18:43
Сообщение было скрыто модератором.
...
11. пользователь 30.03.23 18:44
Сообщение было скрыто модератором.
...
12. пользователь 30.03.23 18:46
Сообщение было скрыто модератором.
...
13. пользователь 30.03.23 18:49
Сообщение было скрыто модератором.
...
21. пользователь 30.03.23 18:56
Сообщение было скрыто модератором.
...
25. пользователь 30.03.23 18:57
Сообщение было скрыто модератором.
...
34. пользователь 30.03.23 19:12
Сообщение было скрыто модератором.
...
37. пользователь 30.03.23 19:17
Сообщение было скрыто модератором.
...
38. пользователь 30.03.23 19:17
Сообщение было скрыто модератором.
...
40. пользователь 30.03.23 19:19
Сообщение было скрыто модератором.
...
54. пользователь 30.03.23 19:34
Сообщение было скрыто модератором.
...
55. пользователь 30.03.23 19:38
Сообщение было скрыто модератором.
...
56. пользователь 30.03.23 19:44
Сообщение было скрыто модератором.
...
41. пользователь 30.03.23 19:21
Сообщение было скрыто модератором.
...
43. пользователь 30.03.23 19:22
Сообщение было скрыто модератором.
...
45. пользователь 30.03.23 19:25
Сообщение было скрыто модератором.
...
46. пользователь 30.03.23 19:25
Сообщение было скрыто модератором.
...
47. пользователь 30.03.23 19:29
Сообщение было скрыто модератором.
...
49. пользователь 30.03.23 19:31
Сообщение было скрыто модератором.
...
51. пользователь 30.03.23 19:32
Сообщение было скрыто модератором.
...
52. пользователь 30.03.23 19:33
Сообщение было скрыто модератором.
...
50. пользователь 30.03.23 19:32
Сообщение было скрыто модератором.
...
53. пользователь 30.03.23 19:34
Сообщение было скрыто модератором.
...
44. пользователь 30.03.23 19:24
Сообщение было скрыто модератором.
...
48. пользователь 30.03.23 19:29
Сообщение было скрыто модератором.
...
5. user1826630 30.03.23 18:38 Сейчас в теме
(1) Легким - никак. Придется потрудиться.
27. Said-We 30.03.23 19:02 Сейчас в теме
(1)
дерево с несколькими уровнями вложенности


А уровни вложенности заранее известны? Т.е. это иерархическое дерево или с заранее известным уровнем вложенности по разным колонкам, или не по двум как в том же иерархическом справочнике?
29. user1826630 30.03.23 19:04 Сейчас в теме
(27) В этом и заключается работа программиста - написать иерархический (рекурсивный) алгоритм с заранее неизвестным уровнем иерархии (рекурсии).
А не советовать всякие СКД, которые тоже надо ручками программировать.
32. Said-We 30.03.23 19:09 Сейчас в теме
(29)
которые тоже надо ручками программировать.


Не создавай из мухи слона. В СКД это сделать не сложно. Правильно две таблицы связать. В картинках всё есть тут на сайте.
Программирование только в ДЗ выгрузить уже готовый результат.
35. user1826630 30.03.23 19:16 Сейчас в теме
(32)
В СКД это сделать не сложно.
Конечно не сложно. Если знаешь точный набор входящих параметров (имена колонок, типизацию, агрегаты).
А если не знаешь?
Вот пришел тебе пор HTTP запрос "Хочу вот такое дерево с такими колонками, с такими агрегатами и такими ресурсами" - что будешь делать? Напомню - тебе приходит не готовая XML-СКД, а некоторое описание хотелок (в согласованном формате).

Как ты этот вопрос решишь на СКД? Можно, конечно. Но это чисто программная работа с СКД. Надо нарисовать какой-то универсальный программный метод.
36. Said-We 30.03.23 19:17 Сейчас в теме
(35)
А если не знаешь?

Не надо усложнять. Автор видит значения и знает.
39. user1826630 30.03.23 19:18 Сейчас в теме
(36) Смысл писать отдельные алгоритмы под каждую хотелку и под каждое видение каждого отдельного индивидуума?
59. VZyryanov 31.03.23 10:01 Сейчас в теме
(1)
//(С) Александр Синцов

// Процедура выгружает данные из таблицы значений в дерево значений
// данные выгружаются только в таблицу со сходным набором реквизитов
//
// Параметры:
//
// КлючСтроки - имя колонки ТаблицыЗначений - уникальный идентификатор
// КлючСвязи - имя колонки ТаблицыЗначений - указатель привязки к строке Дерева,
// своего рода указатель на "Родителя"
//
Функция ВыгрузитьТаблицуЗначенийВДеревоЗначений(Таблица, КлючСтроки = "КлючСтроки", КлючСвязи = "КлючСвязи") Экспорт
    Дерево = Новый ДеревоЗначений;
    Для Каждого Колонка Из Таблица.Колонки Цикл
        Дерево.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения);
    КонецЦикла;
    Для Каждого СтрокаТаблицы Из Таблица Цикл
        СтрокаГруппировки = Дерево.Строки.Найти(СтрокаТаблицы[КлючСвязи], КлючСтроки,Истина);
        Если СтрокаГруппировки = Неопределено Тогда
            ЗаполнитьЗначенияСвойств(Дерево.Строки.Добавить(), СтрокаТаблицы);
        Иначе
            ЗаполнитьЗначенияСвойств(СтрокаГруппировки.Строки.Добавить(), СтрокаТаблицы);
        КонецЕсли;
    КонецЦикла;
    Возврат Дерево;
КонецФункции //ВыгрузитьТаблицуЗначенийВДеревоЗначений()

// Процедура выгружает данные из дерева значений в таблицу значений
// данные выгружаются только в таблицу со сходным набором реквизитов
//
Функция ВыгрузитьДеревоЗначенийВТаблицуЗначений(Дерево, Таблица = Неопределено) Экспорт
    Если Таблица = Неопределено Тогда
        Таблица = Новый ТаблицаЗначений;
        Для Каждого Колонка Из Дерево.Колонки Цикл
            Таблица.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения);
        КонецЦикла;
    КонецЕсли;
    Для Каждого СтрокаДерева Из Дерево.Строки Цикл
        ЗаполнитьЗначенияСвойств(Таблица.Добавить(), СтрокаДерева);
        ВыгрузитьДеревоЗначенийВТаблицуЗначений(СтрокаДерева, Таблица);
    КонецЦикла;
    Возврат Таблица;
КонецФункции //ВыгрузитьДеревоЗначенийВТаблицуЗначений()
Показать
60. user1826630 31.03.23 16:00 Сейчас в теме
(59) Ну это то же самое - ты должен заранее сгруппировать ТЗ по двум колонкам "Родитель-Дитё". Это обычный частный случай, который имеет право на существование, но занимает очень узкую нишу.
2. Said-We 30.03.23 18:26 Сейчас в теме
(1) ТЗ содержит: ID, ID_Родитель, и прочие колонки.

На выходе дерево можно получить с помощью:
1. СКД.
2. Своя функция, но сначала удобнее строки в правильном порядке выстроить.
3....
7. Andrew189100 18 30.03.23 18:41 Сейчас в теме
(2)
Это понятно. Функция, СКД. Я надеюсь(видимо зря), что есть, какой-нибудь хитрый(тайный) способ запрос сделать, что бы сразу стало красиво...
Спасибо.
10. user1826630 30.03.23 18:43 Сейчас в теме
(7) То есть ты предполагаешь, что система сама должна догадаться, по каким колонкам ТЗ и в каком именно порядке (иерархии) тебе захотелось создать дерево? (я уже не спрашиваю о колонках ресурсов и прочих негруппируемых полей из этой ТЗ)

Напиши свой метод, и продай его вендору.
15. Andrew189100 18 30.03.23 18:50 Сейчас в теме
(10) По каким колонкам и в каком порядке системе догадываться не надо. Это открытая информация :D
16. user1826630 30.03.23 18:51 Сейчас в теме
(15) Ну так напиши свой метод ПостроитьДеревоИзТаблицы(ОткрытаяИнформация)... В чем проблема?
24. Andrew189100 18 30.03.23 18:57 Сейчас в теме
(16) Так ты перечитай самый первый пост. :D
14. Said-We 30.03.23 18:50 Сейчас в теме
(10)
Напиши свой метод, и продай его вендору

У вендора есть. СКД же делает.

(7)
какой-нибудь хитрый(тайный) способ запрос сделать

Даже не ищи. Рекурсивные запросы 1С не поддерживает, хотя СУБД, на которых работает 1С поддерживают. А дерево строится как?
17. user1826630 30.03.23 18:52 Сейчас в теме
(14)
У вендора есть. СКД же делает.
Это не метод. Это инструмент. Который совсем не "легкое движение руки", которое возжелает автор...
19. Said-We 30.03.23 18:54 Сейчас в теме
(17)
Это не метод. Это инструмент.

От этого его нет что ли?
У вендора есть (алгоритм).
20. Andrew189100 18 30.03.23 18:55 Сейчас в теме
Ну, нет, так нет.
Просто на вход поступает табличка, которая очень хорошо ложится на дерево значений. Захотелось сделать красиво).
Обойду "ручками".
Спасибо...
18. Said-We 30.03.23 18:53 Сейчас в теме
(16) Ну тогда, как то так:
ПостроитьДеревоИзТаблицы(ТЗ, ИмяКолонкиИД, ИмяКолонкиИДРодитель)
22. user1826630 30.03.23 18:56 Сейчас в теме
(18) Хааа. Для этого сначала придется скомпоновать ТЗ.
А если тебе надо 5 уровне группировки по колонкам "Фигня", "Хренота", "Контрагент", "Клавиатура" и "Инфостарт". При этом в других колонках дерева надо посчитать СУММА(Сумма), Количество(Человеки), Максимум(КакаяТоДата).

И как тебе поможет твоё предложение?
26. Said-We 30.03.23 18:59 Сейчас в теме
(22) Это уже мелочи. Самое сложное это дерево построить в 1С.
28. user1826630 30.03.23 19:02 Сейчас в теме
(26) Да нет, это как раз таки самое интересное и сложное!
23. Said-We 30.03.23 18:57 Сейчас в теме
(20) Поищи как это делается с помощью СКД. Из него выгрузишь в дерево значений. по моему даже на этом сайте. Там с картинками и подробным объяснением.
30. Said-We 30.03.23 19:05 Сейчас в теме
(29) Если заранее уровни вложенности есть и по разным колонкам, то СКД не нужно. Это обычный запрос с итогами.
Если иерархия как у справочника, то СКД.
31. user1826630 30.03.23 19:08 Сейчас в теме
(30)
Если иерархия как у справочника, то СКД.
Что значит "как у справочника"?
33. Said-We 30.03.23 19:12 Сейчас в теме
(31)
Что значит "как у справочника"?


Как в иерархическом справочнике. Когда элементы могут быть подчинены таким же.
У автора может быть простая таблица на входе для которой он хочет посчитать итоги по разным колонкам и представить результат в виде дерева. Т.е. дерево, но нет там иерархического подчинения. Обычные итоги.
42. user1826630 30.03.23 19:21 Сейчас в теме
(33)
У автора может быть простая таблица на входе
А может и не быть. Он разве обозначал такие условия в своем вопросе?
Ты сам додумываешь вопрос автора до удобного тебе варианта, и тут же на него отвечаешь!
57. пользователь 30.03.23 19:50
Сообщение было скрыто модератором.
...
58. пользователь 30.03.23 20:26
Сообщение было скрыто модератором.
...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот