Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Построение произвольной иерархии по произвольным данным с помощью СКД

Построение произвольной иерархии по произвольным данным с помощью СКД
Я
   Said_We
 
05.04.18 - 10:01
Почитал эти источники возможных вариантов реализации:
https://start1c.blogspot.ru/2017/01/blog-post.html?showComment=1522845089443#c5080926997711571763
http://catalog.mista.ru/public/242824/

Необходимо следующее:
На входе таблица Родитель, Элемент. Для простоты понимания пусть будет вот эта таблица (в СКД "НаборДанных1"):
ВЫБРАТЬ 0 КАК Родитель, 1 КАК Элемент
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 0, 2
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 0, 3
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1, 11
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1, 12
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2, 21
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2, 22
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 11, 111
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 11, 112

Связи набора указываем:
Источник связи: НаборДанных1
Приемник связи: НаборДанных1
Выражение источник: Элемент
Выражение приемник: Родитель

Настройки:
Отчет
    Родитель (Иерархия)
        <Детальные записи>

На не управляемую форму обработки помещена кнопка "Обновить" и Дерево значений.
По кнопке следующий код:

Процедура кнОбновитьНажатие(Элемент)
    СКД = ЭтотОбъект.ПолучитьМакет(Макет1);// В Макет1 описанное выше.

    Настройки = СКД.НастройкиПоУмолчанию;
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпановки = КомпоновщикМакета.Выполнить(СКД, Настройки, , , Тип(ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений));
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпановки);
    ПроцессВывода = Новый ПроцессВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    ПроцессВывода.УстановитьОбъект(ДЗ);
    ДЗ = ПроцессВывода.Вывести(ПроцессорКомпоновкиДанных, Истина);
    ЭлементыФормы.ДЗ.СоздатьКолонки();
КонецПроцедуры

В результате нажатия на кнопку не получается вывести вложенную иерархию. Получается вот так:
- 0
    0, 1
    0, 2
    0, 3
- 1
    1, 11
    1, 12
- 2
    2, 21
    2, 22
и т.д.

А требуется:
- 0
  - 1
    - 11
      - 111
      - 112
    - 12
  - 2
    - 21
    - 22
    3
 
 
   Said_We
 
1 - 05.04.18 - 10:27
А в ответ тишина....
   Said_We
 
2 - 05.04.18 - 11:00
Может что-то пояснить требуется....
   Said_We
 
3 - 05.04.18 - 12:02
За два часа тишина..... Это что-то новенькое.
   VS-1976
 
4 - 05.04.18 - 12:53
Оно и не должно получиться...
   Said_We
 
5 - 05.04.18 - 13:59
(4) Причина какая?
В примерах в (0) все получается.
   VS-1976
 
6 - 05.04.18 - 14:11
(5) Подумай какие имена полей у тебя будет после соединения, и какие ты выводишь. По какому полю у тебя группировка идёт. Разбери ссылки внимательнее
   Said_We
 
7 - 05.04.18 - 14:17
(6) Я уже ссылки смотрел внимательно. В ссылках приводится пример, но не приводится достаточных пояснений как и почему тем или иным образом ведет себя СКД. Рабочий пример на данных БД у меня есть. Он дает требуемый результат, но сам запрос, который данные вытаскивает, присоединяет много всего дополнительного и т.д. сложнее чем в примерах в (0).
Поэтому я и взял пример в (0) оторванный от жизни, что бы понять сам механизм, не задумываясь о природе данных.
   Said_We
 
8 - 05.04.18 - 14:22
(6) При этом тот пример что у меня есть. Иногда дерево строит не верно. В частности может получаться следующий вариант.

- 0
  - 1
    - 11
      - 11 (тут лишний элемент)
      - 111
      - 112
    - 12
  - 2
    - 2 (тут лишний элемент)
    - 21
    - 22
  - 3

При этом, как в примере в ссылках в (0) есть отбор, который говорит, начиная с какого уровня формировать дерево. Так вот в зависимости от того с какого уровня дерево строится ошибка формирования с лишними элементами на одних и тех же данных может как проявляться, так и не проявляться. Источник данных РС.
   Said_We
 
9 - 05.04.18 - 14:25
Ситуация похожа на вот эту.
https://www.forum.mista.ru/topic.php?id=797608
   Said_We
 
10 - 05.04.18 - 18:21
Получилось-таки.
 
 Рекламное место пустует
   Said_We
 
11 - 06.04.18 - 09:16
Получилось.
Для того что бы получилось, необходимо (0)+(9)+...(ссылки не сохранились).

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует