Перейти к содержимому

7.7 Можно ли, используя конструктор запроса, получить итоги по иерархии?

Опубликовано: Обновлено:

Telegram → Просто о платформе 1С

❓ 7.7 Можно ли, используя конструктор запроса, получить итоги по иерархии?


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

В отличие от группировки в основном запросе, итоги секции ИТОГИ рассчитываются платформой 1С при формировании результата запроса, а не СУБД.

В конструкторе запроса итоги настраиваются на закладке «Итоги». Для запроса, помещающего данные во временную таблицу, эта закладка недоступна.

При использовании СГРУППИРОВАТЬ ПО исходные записи объединяются в группы. Для получения значения по группе используются агрегатные функции, например СУММА(), КОЛИЧЕСТВО(), МИНИМУМ() или МАКСИМУМ().

Например, есть данные о продажах:

Номенклатура    Количество
Товар А         10
Товар А          5
Товар Б          7

Запрос с группировкой может выглядеть так:

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

Здесь Номенклатура определяет, по какому полю записи объединяются в группы, а СУММА(Количество) определяет, как рассчитывается значение для каждой группы.

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

Номенклатура    Количество
Товар А         15
Товар Б          7

Секция ИТОГИ работает иначе. Основные записи результата сохраняются, а платформа дополнительно рассчитывает итоговые записи.

Например:

ИТОГИ
СУММА(Количество)
ПО
Номенклатура

Результат можно представить так:

Номенклатура    Количество
Товар А         15   ← итог по Товару А
    Товар А         10
    Товар А          5

Товар Б          7   ← итог по Товару Б
    Товар Б          7

То есть:

СГРУППИРОВАТЬ ПО
исходные записи
        ↓
объединяются по полям группировки
        ↓
агрегатная функция рассчитывает значение группы

ИТОГИ
основные записи результата сохраняются
        +
формируются итоговые записи

Помимо итогов по группировкам, можно получить общий итог по всему результату запроса. Для этого используется ключевое слово ОБЩИЕ:

ИТОГИ
СУММА(Количество)
ПО
ОБЩИЕ

Например, для исходных данных:

Номенклатура    Количество
Товар А         10
Товар А          5
Товар Б          7

результат можно представить так:

Общий итог      22
    Товар А         10
    Товар А          5
    Товар Б          7

ОБЩИЕ можно использовать вместе с другими группировками итогов:

ИТОГИ
СУММА(Количество)
ПО
ОБЩИЕ,
Номенклатура

Тогда формируется общий итог и итоги по значениям Номенклатура:

Общий итог      22
    Товар А         15
        Товар А         10
        Товар А          5
    Товар Б          7
        Товар Б          7

В конструкторе запроса общий итог также настраивается на закладке «Итоги». Для этого устанавливается флаг «Общие итоги».

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

Для этого после группировочного поля используется ключевое слово ИЕРАРХИЯ:

ИТОГИ
СУММА(Количество)
ПО
Номенклатура ИЕРАРХИЯ

В этом случае платформа рассчитывает итоги по элементам и по группам иерархии, в которые входят эти элементы.

Например:

Номенклатура             Количество
Бытовая техника          22
    Холодильники            15
        Товар А              10
            Товар А              6
            Товар А              4
        Товар Б               5
            Товар Б              5
    Стиральные машины       7
        Товар В               7
            Товар В              3
            Товар В              4

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

Если итоги по самим элементам не нужны, используется конструкция ТОЛЬКО ИЕРАРХИЯ:

ИТОГИ
СУММА(Количество)
ПО
Номенклатура ТОЛЬКО ИЕРАРХИЯ

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

Номенклатура             Количество
Бытовая техника          22
    Холодильники            15
        Товар А               6
        Товар А               4
        Товар Б               5
    Стиральные машины       7
        Товар В               3
        Товар В               4

В отличие от ИЕРАРХИЯ, здесь нет отдельных итоговых записей Товар А — 10, Товар Б — 5 и Товар В — 7. Итоги рассчитаны только для групп иерархии.

Различие можно представить так:

КонструкцияКакие итоговые записи формируются
Номенклатура ИЕРАРХИЯПо элементам и по группам иерархии
Номенклатура ТОЛЬКО ИЕРАРХИЯТолько по группам иерархии

Те же режимы можно задать без ручного написания текста запроса.

На закладке «Итоги» для группировочного поля в свойстве «Тип итогов» доступны соответствующие значения:

Настройка итогов в конструкторе запросов

Настройка в конструктореКонструкция языка запросовЧто рассчитывается
Флаг «Общие итоги»ОБЩИЕОбщий итог по результату запроса
Тип итогов «Элементы»поле без ИЕРАРХИЯИтоги по самим элементам
Тип итогов «Элементы и иерархия»поле ИЕРАРХИЯИтоги по элементам и группам иерархии
Тип итогов «Только иерархия»поле ТОЛЬКО ИЕРАРХИЯИтоги только по группам иерархии

Флаг «Общие итоги» отвечает за формирование общего итога по результату запроса, а свойство «Тип итогов» определяет, какие итоги будут рассчитаны для конкретного группировочного поля.


Секция ИТОГИ позволяет получать общие итоги, итоги по отдельным значениям и итоги с учетом иерархии. В конструкторе запроса общий итог задается флагом «Общие итоги», а для группировочного поля можно выбрать тип итогов «Элементы», «Элементы и иерархия» или «Только иерархия».