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

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

Напиши свой метод, и продай его вендору.
15. Andrew189100 15 30.03.23 18:50 Сейчас в теме
(10) По каким колонкам и в каком порядке системе догадываться не надо. Это открытая информация :D
16. user1826630 30.03.23 18:51 Сейчас в теме
(15) Ну так напиши свой метод ПостроитьДеревоИзТаблицы(ОткрытаяИнформация)... В чем проблема?
24. Andrew189100 15 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 15 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
Сообщение было скрыто модератором.
...
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день