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