четверг, 13 июня 2013 г.

Группировка (Сгруппировать) и Итоги в запросе

Вроде и нет ничего проще,а с четким определением проблема.
Итак.

  Сгруппировать(группировка)- свернуть записи в группу по групповым полям (полям с одинаковым значением).
  Пример. Нам необходимо узнать общее количество товаров на определенном складе (...всего 999 тонн..). В регистр записывается каждое движение и даже элементарный запрос из двух полей (Склад и Количество) сформирует выборку из множества записей с одинаковым значением поля Склад и разными значениями поля Количество.
Свернуть (сгруппировать) остатки по полю Склад- это получить общее количество товара на этом складе.
  Отсюда вытекает необходимость (для нашего примера, но вообщем не обязательно) вычисления агрегатных функций (производят одиночное значение для определенной группы полей таблицы) по групповому полю (в терминах конструктора запросов- Суммируемое поле).
  В нашем примере- групповое поле Склад, а агрегатную функцию вычислим по полю Количество- получим ОБЩЕЕ КОЛИЧЕСТВО всех товаров на складе.
  Т.к. настолько простые запросы очень редки, то во всех иных случаях при применении Группировки, группироваться будут все поля запроса (за исключением Суммируемых) и  выборка будет сокращаться (сворачиваться) только на те записи, у которых все групповые поля одинаковы (одинаковый склад, одинаковый товар, одинаковый размер товара- эти записи свернуться, если хоть что-то разное- нет).

Итоги (т.н. общие)- дополнительные строки в результате запроса, содержащие итоги  по заданным полям и группировкам (т.н. промежуточные итоги).
Общие итоги- строка в результате запроса со значением итогов по всем записям.

Итоги по группировкам- значения агрегатных функций по групповым полям(полям с одинаковым значением).

Отличия запроса с группировками (СГРУППИРОВАТЬ ПО) от запроса с итогами по группировкам.
В первом случае в результат запроса попадут только итоговые строки. В примере групповое поле- номенклатура:

Во втором- итоги и исходные записи. Причина- в определении (итоги не "сворачивают" данные, а добавляют строки)!В примере групповое поле- номенклатура:





Важно! В запросе нет необходимости пользоваться и группировкой и итогами! Все зависит от того, что нам нужно...

Порядок группировок в запросе с итогами по группировкам имеет важное значение, т.к. итоги рассчитываются по порядку.

Итоги по иерархии. Если групповое (группировочное) поле является ссылкой на справочник, то для расчета итогов по группам справочника (или родительским элементам, если справочник без групп) необходимо указать ключевое слово ИЕРАРХИЯ. В этом случае в результат будут добавлены записи с итогами для уровней иерархии справочника.

Важно! В языке запросов допускается совместное использование различных итогов в одном запросе (общих, по группировкам и иерархических).

Синтаксис работы с итогами в выборке из результата запроса

Метод ТипЗаписи()
Пример:
Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке Тогда

         Продолжить;
КонецЕсли;



Описание:
Получает тип текущей записи выборки.

Возвращаемое значение:
Тип: ТипЗаписиЗапроса

Описание:
Содержит типы записей выборки результатов запроса.

Значения
ДетальнаяЗапись
Детальная (конечная) запись результата запроса.
ИтогПоГруппировке
Итоговая запись по группировке запроса.
ИтогПоИерархии
Итоговая запись по иерархии запроса.
ОбщийИтог
Общая итоговая запись запроса.

Применение.
В примере- если очередная строка выборки запроса имеет тип ИтогПоГруппировке то передать управление в начало цикла (пропустить эту строку).

1 комментарий:

  1. Еще очень важная функция Итогов и Группировок- "управление" визуализацией.
    В зависимости от того, что нам нужно увидеть в отчете (общий итог по группе, детальные записи или и то и то) используем либо итоги либо группировки или их сочетание...

    ОтветитьУдалить