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


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

К списку родителей присоединить все элементы в иерархии

К списку родителей присоединить все элементы в иерархии
Я
   Loko
 
26.09.17 - 05:19
Всем привет. Есть список Родителей номенклатуры (произвольным образом сформирован), как присоединить к нему все элементы в иерархии к каждому родителю?
 
 
   mehfk
 
1 - 26.09.17 - 05:54
Запрос где?
   Loko
 
2 - 26.09.17 - 06:03
я делаю отчет в скд. делаю через один набор данных. возможно неправильно так.
более подробно задача: есть документ "План продаж". Там табличная Часть, где реквизит Группа номенклатуры и Сумма (план). И нужно прикрутить сколько было продаж за период по каждой указанной группе (факт).

запрос встал пока так(

ВЫБРАТЬ РАЗЛИЧНЫЕ
    СТ_ПланыПродаж.План,
    СТ_ПланыПродаж.ГруппаНоменклатуры
ИЗ
    Документ.СТ_ПланыПродаж.Планы КАК СТ_ПланыПродаж
ГДЕ
    СТ_ПланыПродаж.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода

а дальше как прикручивать продажи по каждой группе в сумме за период?
   МимохожийОднако
 
3 - 26.09.17 - 06:19
Добавь условие В ИЕРАРХИИ (&МассивГруппНоменклатурыИзТЧ)
   Loko
 
4 - 26.09.17 - 06:21
(3) а в СКД как этот массив добавить?
   МимохожийОднако
 
5 - 26.09.17 - 06:56
(4) Запросом к табличной части документа
   Loko
 
6 - 26.09.17 - 08:40
(5) хорошо, условие добавлю. отберу номенклатуру. но как потом соединить полученный список номенклатуры со списком родителей? номенклатура же на разных уровнях может быть, у каждой свой родитель...
   Loko
 
7 - 26.09.17 - 09:11
вот так сделал. но очень долго работает:

"ВЫБРАТЬ РАЗЛИЧНЫЕ
        |    ГруппыНоменклатуры.ГруппаНоменклатуры
        |ПОМЕСТИТЬ Родители
        |ИЗ
        |    &ГруппыНоменклатуры КАК ГруппыНоменклатуры
        |;
        |
        ////////////////////////////////////////////////////////////////////////////////

        |ВЫБРАТЬ
        |    Номенклатура.Ссылка,
        |    Номенклатура.Родитель,
        |    Родители.ГруппаНоменклатуры
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |        ЛЕВОЕ СОЕДИНЕНИЕ Родители КАК Родители
        |        ПО (Родители.ГруппаНоменклатуры = Номенклатура.Родитель)
        |                ИЛИ (Родители.ГруппаНоменклатуры = Номенклатура.Родитель.Родитель)
        |                ИЛИ (Родители.ГруппаНоменклатуры = Номенклатура.Родитель.Родитель.Родитель)
        |                ИЛИ (Родители.ГруппаНоменклатуры = Номенклатура.Родитель.Родитель.Родитель.Родитель)
        |                ИЛИ (Родители.ГруппаНоменклатуры = Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель)
        |                ИЛИ (Родители.ГруппаНоменклатуры = Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель)
        |                ИЛИ (Родители.ГруппаНоменклатуры = Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель)
        
        |ГДЕ
        |    Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппыНоменклатуры)
        |    И Номенклатура.ЭтоГруппа = ЛОЖЬ";
   Loko
 
8 - 26.09.17 - 09:12
может кто подскажет как оптимальнее сделать?
   DrShad
 
9 - 26.09.17 - 09:44
ВЫБРАТЬ
    Номенклатура.Ссылка
ПОМЕСТИТЬ Родители
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.Ссылка В(&мРодителей)
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Элемент
ПОМЕСТИТЬ Элементы
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.Ссылка В ИЕРАРХИИ
            (ВЫБРАТЬ
                Родители.Ссылка
            ИЗ
                Родители)
    И НЕ Номенклатура.ЭтоГруппа
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    Номенклатура.Ссылка КАК РодителиНижнегоУровня,
    ВЫБОР
        КОГДА Номенклатура.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
            ТОГДА Номенклатура.Ссылка
        ИНАЧЕ Номенклатура.Родитель
    КОНЕЦ КАК Родитель
ПОМЕСТИТЬ ТаблицаРодителей
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.ЭтоГруппа
    И Номенклатура.Ссылка В ИЕРАРХИИ
            (ВЫБРАТЬ
                Родители.Ссылка
            ИЗ
                Родители)
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    Элементы.Элемент,
    ТаблицаРодителей.Родитель
ИЗ
    ТаблицаРодителей КАК ТаблицаРодителей
        ЛЕВОЕ СОЕДИНЕНИЕ Элементы КАК Элементы
        ПО ТаблицаРодителей.РодителиНижнегоУровня = Элементы.Элемент.Родитель
   DrShad
 
10 - 26.09.17 - 09:45
как-то так
 
 Рекламное место пустует
   Loko
 
11 - 26.09.17 - 10:32
(10) спасибо!
   Loko
 
12 - 26.09.17 - 10:37
(10) хотя не работает, если уровней больше 2-х.
   DrShad
 
13 - 26.09.17 - 10:37
(12) да ладно
   DrShad
 
14 - 26.09.17 - 10:40
действительно, ща поправим
   Ildarovich
 
15 - 26.09.17 - 11:14
Еще вот этот подход http://catalog.mista.ru/public/158512/ для развития кругозора можно посмотреть, хотя при большом количестве элементов справочника тоже может быть долго.
   DrShad
 
16 - 26.09.17 - 11:47
проще всего собрать таблицу отношений всех групп к родителям верхнего уровня и ее загнать в запрос
   Ildarovich
 
17 - 26.09.17 - 11:54
(16) в (15) это делается запросом. Таблица называется "транзитивное замыкание"
   Radkt
 
18 - 26.09.17 - 12:35
(0) Почему нельзя список групп загнать в массив и сделать отбор по ним и иерархические итоги по номенклатуре??
   Radkt
 
19 - 26.09.17 - 12:36
в (3) видимо так же предложили
   DrShad
 
20 - 26.09.17 - 12:38
(18), (19) сделай пример
   DrShad
 
21 - 26.09.17 - 12:39
(17) это понятно, но там ограничение на уровень вложенности, а если верхнего родителя искать рекурсией, то ограничений не будет
   Radkt
 
22 - 26.09.17 - 12:49
(21)ну да если всю иерархию выводить не нужно, то не подойдет
   Ildarovich
 
23 - 26.09.17 - 13:19
(21) Ограничений на самом деле нет, поскольку каждый каскад там увеличивает число уровней вдвое, поэтому взяв пять каскадов, получим решение для максимум 32-х уровней. Для практических целей это более чем достаточно. Параноики могут использовать десять каскадов - 1024 уровня. Не думаю, что где-либо используется такой "глубокий" справочник.


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