Язык запросов системы
1С:Предприятие 8.0 имеет очень мощную возможность расчета итогов, чего нет в
стандартном языке SQL. Данный механизм дает возможность включить в результат
запроса дополнительные строки, содержащие общие и промежуточные итоги по
заданным полям и группировкам.
Общие итоги
Рассмотрим сначала общие итоги, как более простые для понимания. Следующий запрос выбирает из регистра накопления Продажи все записи за заданный период и рассчитывает общий объем продаж:
ВЫБРАТЬ Номенклатура, Сумма
ИЗ РегистрНакопления.Продажи
ИТОГИ СУММА(Сумма) ПО Общие
В результате запроса появляется дополнительная итоговая строка:
При обходе результата запроса итоговые строки можно отличить от обычных с помощью метода ТипЗаписи(). Например, выведем результат данного запроса в окно сообщений, а итоговую строку выделим заглавными буквами:
Запрос = Новый Запрос("
|ВЫБРАТЬ Номенклатура, Сумма
|ИЗ РегистрНакопления.Продажи
|ИТОГИ СУММА(Сумма) ПО Общие");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ОбщийИтог Тогда
Сообщить("ОБЩИЙ ИТОГ: " + Выборка.СуммаПродажи);
Иначе
Сообщить("Товар/услуга: " + Выборка.Номенклатура +
"Сумма: " + Выборка.СуммаПродажи);
КонецЕсли;
КонецЦикла;
При расчете итогов по группировкам вычисляются значения агрегатных функций по выборкам с одинаковыми значениями полей, по которым производится группировка. Например, в следующей таблице значения группировок выделены жирным шрифтом:
Простой запрос с итогами по группировкам выглядит следующим образом:
ВЫБРАТЬ Номенклатура, Период, Сумма
ИЗ РегистрНакопления.Продажи
ИТОГИ СУММА(Сумма) ПО Номенклатура
АВТОУПОРЯДОЧИВАНИЕ
Результат запроса включает в себя обычные записи из регистра и итоги по каждому товару:
Обратите внимание, что запрос с итогами по группировкам отличается от обычной группировки (свертки) с помощью предложения СГРУППИРОВАТЬ ПО с агрегатными функциями. В последнем случае в результат запроса не включаются исходные записи, а остаются только итоговые строки.
Например, следующий запрос выводит объем продаж, сгруппированный по каждой номенклатуре, и не выводит детальные записи регистра накопления:
ВЫБРАТЬ Номенклатура, СУММА(Сумма) КАК Сумма
ИЗ РегистрНакопления.Продажи
СГРУППИРОВАТЬ ПО Номенклатура
АВТОУПОРЯДОЧИВАНИЕ
Можно рассчитать итоги по комбинации группировок, перечислив их через запятую:
ВЫБРАТЬ Контрагент, Номенклатура, Сумма
ИЗ РегистрНакопления.Продажи
ИТОГИ СУММА(Сумма)
ПО Контрагент, Номенклатура
АВТОУПОРЯДОЧИВАНИЕ
В данном запросе будет рассчитан объем продаж по каждой комбинации подразделения и номенклатуры. Кроме того, в запрос будут включены исходные записи из регистра накоплений:
Порядок группировок в тексте запроса имеет довольно важное значение, поскольку сначала рассчитываются итоги по первому группировочному полю, затем по второму и т.д.
Если в предыдущем примере поменять местами контрагента и номенклатуру, то получим следующий результат:
ВЫБРАТЬ Контрагент, Номенклатура, Сумма
ИЗ РегистрНакопления.Продажи
ИТОГИ СУММА(Сумма)
ПО Номенклатура, Контрагент
АВТОУПОРЯДОЧИВАНИЕ
Результат запроса показан ниже:
В 1С:Предприятии 8.0 реализована возможность обхода группировок в произвольном порядке. То есть из одного результата запроса возможно получать отчеты с различной последовательностью группировок. Например, в отчете на основе одного результата запроса могут выводиться сначала группировки по товарам, а затем по поставщикам.
Итоги по иерархии
Если группировочное поле является ссылкой на справочник, то для расчета итогов по группам справочника (или родительским элементам, если справочник состоит из одних элементов) необходимо указать ключевое слово ИЕРАРХИЯ. В этом случае в результат будут добавлены записи с итогами для уровней иерархии справочника.
Например, выберем записи справочника Номенклатура, рассчитаем объем продаж по каждой позиции и по группам справочника:
ВЫБРАТЬ Номенклатура, Сумма
ИЗ РегистрНакопления.Продажи
ИТОГИ СУММА (Сумма) ПО Номенклатура ИЕРАРХИЯ
АВТОУПОРЯДОЧИВАНИЕ
Заметьте, что в результат запроса включены группы справочника, и по ним подсчитаны итоги:
В языке запросов допускается совместное использование различных итогов в одном запросе, например, общих, иерархических и итогов по группировкам.
Ниже представлен запрос, который выбирает данные из расходных накладных и дополнительно подсчитывает общие итоги, итоги по контрагентам, по каждому товару и группе товаров.
ВЫБРАТЬ
НаклСостав.Ссылка.Контрагент КАК Контрагент,
НаклСостав.Номенклатура КАК Номенклатура,
НаклСостав.Ссылка.Номер,
НаклСостав.Сумма КАК Продажи
ИЗ Документ.РасходнаяНакладная.Состав КАК НаклСостав
ИТОГИ СУММА(Продажи) ПО
ОБЩИЕ,
Контрагент,
Номенклатура ИЕРАРХИЯ