| 
    
        
     
     | 
    
  | 
Рекурсивный вывод группировок в СКД | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        AlexShapOld    
     07.12.22 
            ✎
    20:38 
 | 
         
        Добрый день!
 
        Есть набор данных связанных с собой : !Глава ! Подчинен ! Уровень ! --------------------------------- ! А ! ! 1 ! ! Б ! А ! 2 ! ! В ! Б ! 3 ! ! Г ! ! 1 ! ! Д ! ! 1 ! ! Е ! Д ! 2 ! ! И ! ! 1 ! и т.д. я думаю принцип понятен. Потчиненные могут быть, на разном уровне, а могут и не быть. Мне Необходимо на СКД выводить подчиненную группировку типа: А Уровень 1 + Б Уровень 2 + В Уровень 3 Г Уровень 1 Д Уровень 1 + Е Уровень 2 И Уровень 1 Я тут схематично написал, надеюсь понятно. Просто не понял, как в сообщении вводить по другому.  | 
|||
| 
    1
    
        AlexShapOld    
     07.12.22 
            ✎
    20:53 
 | 
         
        Подскажите пожалуйста, как это сделать? И возможно ли это сделать?     
         | 
|||
| 
    2
    
        fly7    
     07.12.22 
            ✎
    21:49 
 | 
         
        для каждого уровня сделать свою ВТ, в выборке собрать в плоскую таблицу, для каждого уровня свой столбец     
         | 
|||
| 
    3
    
        fly7    
     07.12.22 
            ✎
    22:02 
 | 
         
        ТипСтр = Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(20));
 
        ТипЧис = Новый ОписаниеТипов("Число",,, Новый КвалификаторыЧисла(10, 2)); Таб = Новый ТаблицаЗначений; Таб.Колонки.Добавить("Глава", ТипСтр); Таб.Колонки.Добавить("Родитель", ТипСтр); Таб.Колонки.Добавить("Уровень", ТипЧис); Нов = Таб.Добавить(); Нов.Глава = "А"; Нов.Родитель = ""; Нов.Уровень = 1; Нов = Таб.Добавить(); Нов.Глава = "Б"; Нов.Родитель = "А"; Нов.Уровень = 2; Нов = Таб.Добавить(); Нов.Глава = "В"; Нов.Родитель = "Б"; Нов.Уровень = 3; Нов = Таб.Добавить(); Нов.Глава = "Г"; Нов.Родитель = ""; Нов.Уровень = 1; Нов = Таб.Добавить(); Нов.Глава = "Д"; Нов.Родитель = ""; Нов.Уровень = 1; Нов = Таб.Добавить(); Нов.Глава = "Е"; Нов.Родитель = "Д"; Нов.Уровень = 2; Нов = Таб.Добавить(); Нов.Глава = "И"; Нов.Родитель = ""; Нов.Уровень = 1; Запрос = Новый Запрос; Запрос.УстановитьПараметр("Таб", Таб); Запрос.Текст = "ВЫБРАТЬ | Таб.Глава КАК Глава, | Таб.Родитель КАК Родитель, | Таб.Уровень КАК Уровень |ПОМЕСТИТЬ Таб |ИЗ | &Таб КАК Таб |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Таб.Глава КАК Глава, | Таб.Родитель КАК Родитель, | Таб.Уровень КАК Уровень |ПОМЕСТИТЬ ВТ_1 |ИЗ | Таб КАК Таб |ГДЕ | Таб.Уровень = 1 |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Таб.Глава КАК Глава, | Таб.Родитель КАК Родитель, | Таб.Уровень КАК Уровень |ПОМЕСТИТЬ ВТ_2 |ИЗ | Таб КАК Таб |ГДЕ | Таб.Уровень = 2 |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Таб.Глава КАК Глава, | Таб.Родитель КАК Родитель, | Таб.Уровень КАК Уровень |ПОМЕСТИТЬ ВТ_3 |ИЗ | Таб КАК Таб |ГДЕ | Таб.Уровень = 3 |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_1.Глава КАК Глава1, | ВТ_2.Глава КАК Глава2, | ВТ_3.Глава КАК Глава3 |ИЗ | ВТ_1 КАК ВТ_1 | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_2 КАК ВТ_2 | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_3 КАК ВТ_3 | ПО ВТ_2.Глава = ВТ_3.Родитель | ПО ВТ_1.Глава = ВТ_2.Родитель"; Выборка = Запрос.Выполнить().Выгрузить();  | 
|||
| 
    4
    
        fly7    
     07.12.22 
            ✎
    22:03 
 | 
         
        в скд подсунуть выборку через Набор данных - объект     
         | 
|||
| 
    5
    
        toypaul    
     гуру 
    08.12.22 
            ✎
    08:58 
 | 
||||
| 
    6
    
        AlexShapOld    
     08.12.22 
            ✎
    12:13 
 | 
         
        Спасибо большое. Буду пробовать     
         | 
|||
| 
    7
    
        AlexShapOld    
     08.12.22 
            ✎
    16:56 
 | 
         
        Попробовал способом предложенным в (5).
 
        Но что-то у меня не выводит иерархию. Первый набор данных1; ВЫБРАТЬ РегистрацияРеферала.ИнвесторРеферал КАК Инвестор, РегистрацияРеферала.Уровень КАК Уровень ИЗ РегистрСведений.РегистрацияРеферала КАК РегистрацияРеферала ГДЕ РегистрацияРеферала.ИнвесторРеферал = РегистрацияРеферала.ИнвесторРеферер При равенстве РегистрацияРеферала.ИнвесторРеферал = РегистрацияРеферала.ИнвесторРеферер означает, что он имеет 1 верхний уровень. ИнвесторРеферер это верхний в иерархии и имеет подчиненных ИнвсеторовРефералов Второй набор данных: ВЫБРАТЬ ШАА_РегистрацияРеферала.ИнвесторРеферал КАК Инвестор, ШАА_РегистрацияРеферала.ИнвесторРеферер КАК Реферер, ШАА_РегистрацияРеферала.Уровень КАК Уровень ИЗ РегистрСведений.ШАА_РегистрацияРеферала КАК ШАА_РегистрацияРеферала ГДЕ ШАА_РегистрацияРеферала.ИнвесторРеферал В(&Инвестор) На вкладке Связи наборов данных сделал: Источник Приемник Выражение источник Выражение приемник Параметр Набор 2 Набор 2 Реферер Инвестор Инвестор Набор 1 Набор 2 Инвестор Инвестор Инвестор На вкладке настройки: Отчет Детальные записи И везде авто поля. Но не выводит он иерархию как в примере на its. Я и пытался по-разному связь настроить. Не выводит, только верхний уровень.  | 
|||
| 
    8
    
        AlexShapOld    
     08.12.22 
            ✎
    16:57 
 | 
         
        Выводит только верхний уровень. Или я не правильно понимаю построение связей в наборах. Может кто сможет показать мне  нужное направление.     
         | 
|||
| 
    9
    
        Прохожий    
     08.12.22 
            ✎
    19:47 
 | 
         
        (8) См 5 ....     
         | 
|||
| 
    10
    
        AlexShapOld    
     09.12.22 
            ✎
    13:19 
 | 
         
        (9) Все делаю по (5). Но не выходит. Может из-за того, что у меня источник это регистр сведений? Я скачал пример с (5). Все делаю как там. Но не формирует иерархию.     
         | 
|||
| 
    11
    
        mistеr    
     09.12.22 
            ✎
    14:52 
 | 
         
        Нужно один набор и соединять сам с собой.     
         | 
|||
| 
    12
    
        AlexShapOld    
     09.12.22 
            ✎
    17:34 
 | 
         
        (11) Не прокатило. Думаю из-за того, что у меня регистр сведений.
 
        Сделал по принципу предложенному в (3). Спасибо за помощь.  | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |