Имя: Пароль:
1C
1С v8
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 Тогда
           ВремРодитель = Неопределено;
       КонецЕсли;
           
       Если ВремРодитель = Неопределено Тогда
           НоваяСтрокаДерева = НоваяВетка.Добавить();
           НоваяСтрокаДерева.Показатель = ЗначениеГруппировки;
           
           ВремРодитель = ЗначениеГруппировки;    
           ВремСтрокаДерева = НоваяСтрокаДерева;        
       Иначе        
           НоваяСтрокаДерева = ВремСтрокаДерева.Строки.Добавить();
           НоваяСтрокаДерева.Показатель = ЗначениеГруппировки;
           
           Если ВремРодитель <> ЗначениеГруппировки.Родитель Тогда
               ВремСтрокаДерева = НоваяСтрокаДерева;
           КонецЕсли;
       КонецЕсли;
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.