|
Построение произвольной иерархии по произвольным данным с помощью СКД | ☑ | ||
---|---|---|---|---|
0
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 |
|||
1
Said_We
05.04.18
✎
10:27
|
А в ответ тишина....
|
|||
2
Said_We
05.04.18
✎
11:00
|
Может что-то пояснить требуется....
|
|||
3
Said_We
05.04.18
✎
12:02
|
За два часа тишина..... Это что-то новенькое.
|
|||
4
VS-1976
05.04.18
✎
12:53
|
Оно и не должно получиться...
|
|||
5
Said_We
05.04.18
✎
13:59
|
(4) Причина какая?
В примерах в (0) все получается. |
|||
6
VS-1976
05.04.18
✎
14:11
|
(5) Подумай какие имена полей у тебя будет после соединения, и какие ты выводишь. По какому полю у тебя группировка идёт. Разбери ссылки внимательнее
|
|||
7
Said_We
05.04.18
✎
14:17
|
(6) Я уже ссылки смотрел внимательно. В ссылках приводится пример, но не приводится достаточных пояснений как и почему тем или иным образом ведет себя СКД. Рабочий пример на данных БД у меня есть. Он дает требуемый результат, но сам запрос, который данные вытаскивает, присоединяет много всего дополнительного и т.д. сложнее чем в примерах в (0).
Поэтому я и взял пример в (0) оторванный от жизни, что бы понять сам механизм, не задумываясь о природе данных. |
|||
8
Said_We
05.04.18
✎
14:22
|
(6) При этом тот пример что у меня есть. Иногда дерево строит не верно. В частности может получаться следующий вариант.
- 0 - 1 - 11 - 11 (тут лишний элемент) - 111 - 112 - 12 - 2 - 2 (тут лишний элемент) - 21 - 22 - 3 При этом, как в примере в ссылках в (0) есть отбор, который говорит, начиная с какого уровня формировать дерево. Так вот в зависимости от того с какого уровня дерево строится ошибка формирования с лишними элементами на одних и тех же данных может как проявляться, так и не проявляться. Источник данных РС. |
|||
9
Said_We
05.04.18
✎
14:25
|
Ситуация похожа на вот эту.
https://www.forum.mista.ru/topic.php?id=797608 |
|||
10
Said_We
05.04.18
✎
18:21
|
Получилось-таки.
|
|||
11
Said_We
06.04.18
✎
09:16
|
Получилось.
Для того что бы получилось, необходимо (0)+(9)+...(ссылки не сохранились). |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |