При обходе результата запроса нередко возникает необходимость получения всех значений группировок внутри какой-либо другой группировки. Такая возможность может понадобиться, например, при выводе кросс отчета. Для обеспечения такой возможности в объекте ВыборкаИзРезультатаЗапроса предусмотрен третий параметр функции Выбрать().
Рассмотрим пример. Пусть нам необходимо получить кросс-отчет по остаткам номенклатуры на различных складах. Номенклатуру необходимо вывести в строках, склады — в колонках.
Запрос для получения остатков будет выглядеть так:
1 2 3 4 5 6 7 8 9 10 11 12 |
ВЫБРАТЬ УчетНоменклатурыОстатки.Номенклатура КАК Номенклатура, УчетНоменклатурыОстатки.Номенклатура.Представление, УчетНоменклатурыОстатки.Склад КАК Склад, УчетНоменклатурыОстатки.Склад.Представление, УчетНоменклатурыОстатки.КоличествоОстаток КАК КоличествоОстаток ИЗ РегистрНакопления.УчетНоменклатуры.Остатки КАК УчетНоменклатурыОстатки ИТОГИ СУММА(КоличествоОстаток) ПО ОБЩИЕ, Номенклатура, Склад |
Для обхода номенклатуры воспользуемся выборкой из результата запроса:
1 2 3 4 |
ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Номенклатура"); Пока ВыборкаНоменклатура.Следующий() Цикл ОбластьНоменклатура.Параметры.Заполнить(ВыборкаНоменклатура); ТабДок.Вывести(ОбластьНоменклатура); |
Для обхода внутри номенклатуры всех складов, присутствующих в результате запроса, получим вложенную выборку от выборки номенклатуры, с указанием третьего параметра "ВСЕ":
1 2 3 4 5 |
ВыборкаСклад = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Склад", "ВСЕ"); Пока ВыборкаСклад.Следующий() Цикл ОбластьСклад.Параметры.Заполнить(ВыборкаСклад); ТабДок.Присоединить(ОбластьСклад); КонецЦикла; |
В случае если необходимо построить несколько отдельных кросс-таблиц для каждого значения некой группировки, необходимо в качестве третьего параметра выборки указать имя группировки, внутри которой необходимо получить все значения, вошедшие в запрос.
Пример:
1 |
ВыборкаСклад = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Склад", "Организация"); |
В данном примере будут получены все значения складов, присутствующие в ранее выбранной организации.