|   |   | 
| 
 | v8: Выборка запроса с формированием в дерево номенклатуры. | ☑ | ||
|---|---|---|---|---|
| 0
    
        Maniac 17.09.11✎ 10:33 | 
        Бьюсь уже и так и сяк.
  Короче говоря есть рекрусивная процедура обхода результата запроса. Почему рекрусивная? - Универсально перебирает группировки. В этой процедуре формируется дерево значений по группировкам. Т.е. Группировка 1 - Строки Группировка 2 и т.д. Так вот. Проблема вылезла с иерархическими группировками. Не получается сделать так чтобы в дерево иерархия тоже вписывалась на уровне Папка (главная строка) - Потом подстроки и т.д. Иерархия может быть любой вложенности. Не могу впоймать. Выборка группировки например номенклатуры перебирает и папки и группы. А так как выборка рекурсивная то я не могу сделать в дереве подчиненность. | |||
| 1
    
        Maniac 17.09.11✎ 10:34 | 
        По группировкам все получается зашибись. По по иерархии все получается на одном уровне.     | |||
| 2
    
        Maniac 17.09.11✎ 10:37 | 
        Выгружать запрос сразу в дерево не предлагать.
  Решение связано именно с тем что нужно выборкой перебрать и сформировать программно дерево. | |||
| 3
    
        poligraf 17.09.11✎ 10:38 | 
        На http://subsystems.ru должны быть платные обработки по этой проблеме.     | |||
| 4
    
        Alexandr Puzakov 17.09.11✎ 10:39 | 
        ДеревоЗначений = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);     | |||
| 5
    
        Maniac 17.09.11✎ 10:40 | 
        (4) нет нет. выгрузка не подходит под специфику отчета.
  И не подходит если выгрузить и потом обходить дерево. | |||
| 6
    
        Maniac 17.09.11✎ 10:41 | 
        (3) спасибо. пойду поищу там.     | |||
| 7
    
        Alexandr Puzakov 17.09.11✎ 10:42 | 
        (2) запрос нормальный напиши, и метод Выгрузить() выплюнет дерево нужной структуры.     | |||
| 8
    
        Maniac 17.09.11✎ 10:44 | 
        (7) нельзя.
  У меня порядка 15 запросов и одно дерево. Все запросы не связаны между собой. Их связывает только одна группировка которая идет по вертикали. по периодам. Каждый запрос дополняет дерево. | |||
| 9
    
        Maniac 17.09.11✎ 10:45 | 
        Т.е. дерево короче говоря определенной структуры. в нем и формулы считаются.     | |||
| 10
    
        poligraf 17.09.11✎ 10:47 | 
        (8) семершный метод детектед?     | |||
| 11
    
        Maniac 17.09.11✎ 10:51 | 
        (10) специфичный отчет.     | |||
| 12
    
        Maniac 17.09.11✎ 10:54 | 
        короче весь сыр в бор что в цикле
  НоваяСтрокаДерева = НоваяВетка.Добавить(); НоваяСтрокаДерева.Показатель = ЗначениеГруппировки; но так как выборка цикла выбирает иерархию то я не могу впоймать как сделать чтобы добавлять в дерево подчиненные строки. Когда происходит переход на другую группировку все легко получается т.к. в рекурсии передается параметр строки. А в рамках одной не получается. | |||
| 13
    
        Maniac 17.09.11✎ 10:55 | 
        Уже пытался ставить условия ЭтоГруппа и прочее.
  Но фигня получается. Промежуточную может попробовать. | |||
| 14
    
        acsent 17.09.11✎ 11:03 | 
        Кроссс отчет делаешь? Забей на Выбрать(, "ВСЕ"). Сформируй массив значений группировки и иего обходи всегда     | |||
| 15
    
        Maniac 17.09.11✎ 11:28 | 
        УРА. получилось!
  Перед выборкой в рекурсивной процйедуре обхода завел две переменные. Одна запоминала родителя. Другая строку дерева. И организовал условия. Таким образом при обходе иерархиеческой группировки получилось сделать формирование подчиненного дерева. | |||
| 16
    
        Maniac 17.09.11✎ 11:29 | 
        Если Уровень = 0 Тогда
  ВремРодитель = Неопределено; КонецЕсли; Если ВремРодитель = Неопределено Тогда НоваяСтрокаДерева = НоваяВетка.Добавить(); НоваяСтрокаДерева.Показатель = ЗначениеГруппировки; ВремРодитель = ЗначениеГруппировки; ВремСтрокаДерева = НоваяСтрокаДерева; Иначе НоваяСтрокаДерева = ВремСтрокаДерева.Строки.Добавить(); НоваяСтрокаДерева.Показатель = ЗначениеГруппировки; Если ВремРодитель <> ЗначениеГруппировки.Родитель Тогда ВремСтрокаДерева = НоваяСтрокаДерева; КонецЕсли; КонецЕсли; | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |