|
|
Обход выборки по группировкам с иерархией |
☑ |
|
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 строки Выборки имеют тип "ИтогПоИерархии", выборка вернет только первую и остановится. Как проникнуть дальше?
|
|