Имя: Пароль:
1C
 
Обход выборки по группировкам с иерархией
0 Laddy
 
01.10.08
13:35
Коллеги, делаю простой запрос:
ВЫБРАТЬ
Номенклатура, Количество,Сумма
ИЗ
Документ.ПоступлениеТоваровУслуг.Товары
ИТОГИ Сумма(Количество),Сумма(Сумма) По Номенклатура ИЕРАРХИЯ
Выполняю запрос и делаю выборку:
Рез=Запрос.Выполнить();
Выборка= Рез.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
   Пока Выборка.Следующий() Цикл
       Выборка2=Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
           Пока Выборка2.Следующий() Цикл

       КонецЦикла;
   КонецЦикла;
Если в запросе убрать слово ИЕРАРХИЯ, то правильно открывается и обходится внутренняя выборка.
Если же указать слово ИЕРАРХИЯ, Выборка возвращает самый верхний итог по иерархии (Самую верхнюю группу). Выборка2 открывается, но ее метод Следующий() возвращает значение ложь. В документации заявлено, что при варианте обхода ПоГруппировкамСИерархией внутренняя выборка должна также содержать данные.
Что я делаю не так?
1 Пуд
 
01.10.08
13:54
Нужно добавить СГРУППИРОВАТЬ в запрос,имхо
2 Vitello
 
01.10.08
13:56
(0)У тебя группировка в итогах всего одна.
3 Laddy
 
01.10.08
14:05
(1) Пример учебный. Интересует чисто теоретический вопрос:
Как обойти всю выборку при способе обхода "ПоГруппировкамСИерархией", если
в выборке есть строки вида "ИтогПоИерархии", то есть после Номенклатуры указано слово ИЕРАРХИЯ.
(Нужно ли открывать подвыборки или еще - как-то).
(2) А почему тогда Выборка2 возвращает данные, если убрать слово ИЕРАРХИЯ в запросе. В документации написано:
"При дан­ном обходе обходятся только записи, находящиеся на одном уровне"
и далее:
"Возникает вопрос, как получать остальные записи результата за­проса. Для этого у объекта ВыборкаИзРезультатаЗапроса можно получить еще одну выборку, которая будет обходить под­чиненные записи текущей записи выборки"
4 Vitello
 
01.10.08
14:09
(3)Насколько я помню, обход выборки с иерархией осуществляется рекурсивно.
5 Laddy
 
01.10.08
14:16
(4) В данном случае нет разницы как открывать подчиненную выборку - рекурсивно или не рекурсивно, все равно обход первой выборки будет только по строчкам уровня 0 и Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией) вернет пустую подчиненную выборку.
Даже если первые 2 строки Выборки имеют тип "ИтогПоИерархии", выборка вернет только первую и остановится. Как проникнуть дальше?
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан