Капитально об программе 1С 8.0-8.3-8.4, 7.7

ОбходРезультатаЗапроса ПоГруппировкам и вывод в табличный документ

Обход результата запроса по группировкам доступен при использовании конструкции Итоги <Итоговое поле> по <Поля итогов> языка запросов. 

При этом итоговые поля (суммы, количество), могут отсутствовать — производится просто группировка  по нужным полям, либо по общим итогам —  служебное поле «ОБЩИЕ»( флажок «Общие итоги»)

Конструктор запроса

Группировка добавляется на вкладке «Итоги», обратите внимание на флажок «Общие итоги», здесь же можно задать функцию итогов.

Не стоит путать функции группировки на вкладке «Группировки» с вкладкой «Итоги» (в общем случае для получения итогов группировка может не производится, либо производится по другому полю и с использованием другой функции) — это расчет итоговых показателей над готовой выборкой, а  не группировка входных данных.

Не стоит использовать итоги, если в этом нет необходимости:

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

 

В тексте запроса конструкция находится в нижней части:

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

Последняя группировка будет данными выборки, для которой вызов идет без параметра, либо с параметром ОбходРезультатаЗапроса.Прямой (по умолчанию).

Для примера, вывод результата произведем в табличный документ.

Чтобы вывести группировки в табличном документе, воспользуемся методом НачатьАвтогруппировкуСтрок(). После завершения вывода вызывается ЗакончитьАвтоГруппировкуСтрок() иначе группировка не сработает. Уровень группировки определяет второй параметр метода Вывести() табличного документа

Пример кода

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

Результат = Новый ТабличныйДокумент;
Макет     = ПолучитьМакет("Макет");
Область = Макет.ПолучитьОбласть("Шапка");
Результат.Вывести(Область);
Результат.НачатьАвтогруппировкуСтрок();

Пока Выборка.Следующий() Цикл
        Область = Макет.ПолучитьОбласть("Месяц");
        Область.Параметры.Месяц = Формат(Выборка.Период,"ДФ='MMMM yyyy'");
        
        Результат.Вывести(Область,1);

        ОБласть = Макет.ПолучитьОбласть("Строка");
        ОБласть.Параметры.Показатель = "Собрано всего";
        ОБласть.Параметры.Значение = Формат(Выборка.Сумма,"ЧЦ=14; ЧДЦ=2");
        Результат.Вывести(ОБласть,2);
КонецЦикла;
Результат.ЗакончитьАвтогруппировкуСтрок();

 

Результат будет выглядеть вот так:

Для того, чтобы свернуть табличный документ можно вызывать метод ПоказатьУровеньГруппировокСтрок(<Уровень>)