|
К списку родителей присоединить все элементы в иерархии | ☑ | ||
---|---|---|---|---|
0
Loko
26.09.17
✎
05:19
|
Всем привет. Есть список Родителей номенклатуры (произвольным образом сформирован), как присоединить к нему все элементы в иерархии к каждому родителю?
|
|||
1
mehfk
26.09.17
✎
05:54
|
Запрос где?
|
|||
2
Loko
26.09.17
✎
06:03
|
я делаю отчет в скд. делаю через один набор данных. возможно неправильно так.
более подробно задача: есть документ "План продаж". Там табличная Часть, где реквизит Группа номенклатуры и Сумма (план). И нужно прикрутить сколько было продаж за период по каждой указанной группе (факт). запрос встал пока так( ВЫБРАТЬ РАЗЛИЧНЫЕ СТ_ПланыПродаж.План, СТ_ПланыПродаж.ГруппаНоменклатуры ИЗ Документ.СТ_ПланыПродаж.Планы КАК СТ_ПланыПродаж ГДЕ СТ_ПланыПродаж.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода а дальше как прикручивать продажи по каждой группе в сумме за период? |
|||
3
Мимохожий Однако
26.09.17
✎
06:19
|
Добавь условие В ИЕРАРХИИ (&МассивГруппНоменклатурыИзТЧ)
|
|||
4
Loko
26.09.17
✎
06:21
|
(3) а в СКД как этот массив добавить?
|
|||
5
Мимохожий Однако
26.09.17
✎
06:56
|
(4) Запросом к табличной части документа
|
|||
6
Loko
26.09.17
✎
08:40
|
(5) хорошо, условие добавлю. отберу номенклатуру. но как потом соединить полученный список номенклатуры со списком родителей? номенклатура же на разных уровнях может быть, у каждой свой родитель...
|
|||
7
Loko
26.09.17
✎
09:11
|
вот так сделал. но очень долго работает:
"ВЫБРАТЬ РАЗЛИЧНЫЕ | ГруппыНоменклатуры.ГруппаНоменклатуры |ПОМЕСТИТЬ Родители |ИЗ | &ГруппыНоменклатуры КАК ГруппыНоменклатуры |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Номенклатура.Ссылка, | Номенклатура.Родитель, | Родители.ГруппаНоменклатуры |ИЗ | Справочник.Номенклатура КАК Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ Родители КАК Родители | ПО (Родители.ГруппаНоменклатуры = Номенклатура.Родитель) | ИЛИ (Родители.ГруппаНоменклатуры = Номенклатура.Родитель.Родитель) | ИЛИ (Родители.ГруппаНоменклатуры = Номенклатура.Родитель.Родитель.Родитель) | ИЛИ (Родители.ГруппаНоменклатуры = Номенклатура.Родитель.Родитель.Родитель.Родитель) | ИЛИ (Родители.ГруппаНоменклатуры = Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель) | ИЛИ (Родители.ГруппаНоменклатуры = Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель) | ИЛИ (Родители.ГруппаНоменклатуры = Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель) |ГДЕ | Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппыНоменклатуры) | И Номенклатура.ЭтоГруппа = ЛОЖЬ"; |
|||
8
Loko
26.09.17
✎
09:12
|
может кто подскажет как оптимальнее сделать?
|
|||
9
DrShad
26.09.17
✎
09:44
|
ВЫБРАТЬ
Номенклатура.Ссылка ПОМЕСТИТЬ Родители ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка В(&мРодителей) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Номенклатура.Ссылка КАК Элемент ПОМЕСТИТЬ Элементы ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка В ИЕРАРХИИ (ВЫБРАТЬ Родители.Ссылка ИЗ Родители) И НЕ Номенклатура.ЭтоГруппа ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Номенклатура.Ссылка КАК РодителиНижнегоУровня, ВЫБОР КОГДА Номенклатура.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) ТОГДА Номенклатура.Ссылка ИНАЧЕ Номенклатура.Родитель КОНЕЦ КАК Родитель ПОМЕСТИТЬ ТаблицаРодителей ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.ЭтоГруппа И Номенклатура.Ссылка В ИЕРАРХИИ (ВЫБРАТЬ Родители.Ссылка ИЗ Родители) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Элементы.Элемент, ТаблицаРодителей.Родитель ИЗ ТаблицаРодителей КАК ТаблицаРодителей ЛЕВОЕ СОЕДИНЕНИЕ Элементы КАК Элементы ПО ТаблицаРодителей.РодителиНижнегоУровня = Элементы.Элемент.Родитель |
|||
10
DrShad
26.09.17
✎
09:45
|
как-то так
|
|||
11
Loko
26.09.17
✎
10:32
|
(10) спасибо!
|
|||
12
Loko
26.09.17
✎
10:37
|
(10) хотя не работает, если уровней больше 2-х.
|
|||
13
DrShad
26.09.17
✎
10:37
|
(12) да ладно
|
|||
14
DrShad
26.09.17
✎
10:40
|
действительно, ща поправим
|
|||
15
Ildarovich
26.09.17
✎
11:14
|
Еще вот этот подход http://catalog.mista.ru/public/158512/ для развития кругозора можно посмотреть, хотя при большом количестве элементов справочника тоже может быть долго.
|
|||
16
DrShad
26.09.17
✎
11:47
|
проще всего собрать таблицу отношений всех групп к родителям верхнего уровня и ее загнать в запрос
|
|||
17
Ildarovich
26.09.17
✎
11:54
|
(16) в (15) это делается запросом. Таблица называется "транзитивное замыкание"
|
|||
18
Radkt
26.09.17
✎
12:35
|
(0) Почему нельзя список групп загнать в массив и сделать отбор по ним и иерархические итоги по номенклатуре??
|
|||
19
Radkt
26.09.17
✎
12:36
|
в (3) видимо так же предложили
|
|||
20
DrShad
26.09.17
✎
12:38
|
(18), (19) сделай пример
|
|||
21
DrShad
26.09.17
✎
12:39
|
(17) это понятно, но там ограничение на уровень вложенности, а если верхнего родителя искать рекурсией, то ограничений не будет
|
|||
22
Radkt
26.09.17
✎
12:49
|
(21)ну да если всю иерархию выводить не нужно, то не подойдет
|
|||
23
Ildarovich
26.09.17
✎
13:19
|
(21) Ограничений на самом деле нет, поскольку каждый каскад там увеличивает число уровней вдвое, поэтому взяв пять каскадов, получим решение для максимум 32-х уровней. Для практических целей это более чем достаточно. Параноики могут использовать десять каскадов - 1024 уровня. Не думаю, что где-либо используется такой "глубокий" справочник.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |