Выборка из результата запроса всех вошедших в него значений группировок 

При обходе результата запроса нередко возникает необходимость получения всех значений группировок внутри какой-либо другой группировки. Такая возможность может понадобиться, например, при выводе кросс отчета. Для обеспечения такой возможности в объекте ВыборкаИзРезультатаЗапроса предусмотрен третий параметр функции Выбрать().

Рассмотрим пример. Пусть нам необходимо получить кросс-отчет по остаткам номенклатуры на различных складах. Номенклатуру необходимо вывести в строках, склады - в колонках. Запрос для получения остатков будет выглядеть так:

Копировать в буфер обмена

ВЫБРАТЬ
    УчетНоменклатурыОстатки.Номенклатура КАК Номенклатура,
    УчетНоменклатурыОстатки.Номенклатура.Представление,
    УчетНоменклатурыОстатки.Склад КАК Склад,
    УчетНоменклатурыОстатки.Склад.Представление,
    УчетНоменклатурыОстатки.КоличествоОстаток КАК КоличествоОстаток
ИЗ
    РегистрНакопления.УчетНоменклатуры.Остатки КАК УчетНоменклатурыОстатки
ИТОГИ СУММА(КоличествоОстаток) ПО 
    ОБЩИЕ,
    Номенклатура,
    Склад

Для обхода номенклатуры воспользуемся выборкой из результата запроса:

Копировать в буфер обмена

ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Номенклатура");
Пока ВыборкаНоменклатура.Следующий() Цикл
    ОбластьНоменклатура.Параметры.Заполнить(ВыборкаНоменклатура);
    ТабДок.Вывести(ОбластьНоменклатура);

Для обхода внутри номенклатуры всех складов, присутствующих в результате запроса, получим вложенную выборку от выборки номенклатуры, с указанием третьего параметра "ВСЕ":

Копировать в буфер обмена

ВыборкаСклад = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Склад", "ВСЕ");
Пока ВыборкаСклад.Следующий() Цикл
    ОбластьСклад.Параметры.Заполнить(ВыборкаСклад);
    ТабДок.Присоединить(ОбластьСклад);
КонецЦикла;

В случае если необходимо построить несколько отдельных кросс-таблиц для каждого значения некой группировки,  необходимо в качестве третьего параметра выборки указать имя группировки, внутри которой необходимо получить все значения, вошедшие в запрос. Пример:

Копировать в буфер обмена

ВыборкаСклад = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Склад", "Организация");

В данном примере будут получены все значения складов, присутствующие в ранее выбранной организации.

Пример вывода кросс-отчета с использованием выборок из результата запроса показан в демонстрационной конфигурации "Примеры ИТС", в отчете "ОстаткиНаСкладах".