1С: Запросы. Группировка записей

Запросы. Группировка записей

Оглавление (нажмите, чтобы раскрыть)

Количество записей

Пример выбора общего и различного количества записей в запросе 1С
//По каждому сотруднику получаем общее количество
//записей и количество видов расчета в регистре "Начисления"

Запрос = Новый Запрос;
Запрос.Текст =
    "ВЫБРАТЬ 
    |   Сотрудник.Наименование КАК ФИО,
    |   КОЛИЧЕСТВО(*) Количество,
    |   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВидРасчета) КАК КоличествоВидовРасчета
    |ИЗ
    |   РегистрРасчета.Начисления
    |
    |СГРУППИРОВАТЬ ПО
    |   Сотрудник";

 Выборка = Запрос.Выполнить().Выбрать();

 Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.ФИО + ": " + Выборка.Количество +
        ", " + Выборка.КоличествоВидовРасчета);
КонецЦикла;

Минимальное, максимальное и среднее значения

Пример выбора минимального, максимального и среднего значения в запросе 1С
//Получаем масимальное, минимальное и среднее
//начисление по каждому виду расчета

Запрос = Новый Запрос;
Запрос.Текст =
    "ВЫБРАТЬ 
    |   ВидРасчета,
    |   МИНИМУМ(Результат) КАК Мин,
    |   МАКСИМУМ(Результат) КАК Макс,
    |   СРЕДНЕЕ(Результат) КАК Сред
    |ИЗ
    |   РегистрРасчета.Начисления
    |
    |СГРУППИРОВАТЬ ПО
    |   ВидРасчета";

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    Сообщить("" + Выборка.ВидРасчета + ": " +
        Выборка.Мин + ", " + Выборка.Макс + ", " +
         Выборка.Сред);
КонецЦикла;

Простая группировка

Пример использования простой группировки в запросе 1С
//Получаем итоговые суммы по каждому виду расчета

Запрос = Новый Запрос;
Запрос.Текст =
    "ВЫБРАТЬ 
    |   ВидРасчета,
    |   СУММА(Результат) КАК Результат
    |ИЗ
    |   РегистрРасчета.Начисления
    |
    |СГРУППИРОВАТЬ ПО
    |   ВидРасчета";

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    Сообщить("" + Выборка.ВидРасчета + ": " +
        Выборка.Результат);
КонецЦикла;

Условие после группировки

Пример задания условия после группировки в запросе 1С
//По каждому сотруднику получаем количество видов расчета в регистре "Начисления"
//Затем выводим только записи, у которых количество различных видов расчета больше 2

Запрос = Новый Запрос;
Запрос.Текст =
    "ВЫБРАТЬ 
    |   Сотрудник.Наименование КАК ФИО,
    |   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВидРасчета) КАК Количество
    |ИЗ
    |   РегистрРасчета.Начисления
    |
    |СГРУППИРОВАТЬ ПО
    |   Сотрудник
    |ИМЕЮЩИЕ 
    |   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВидРасчета) > 2";

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.ФИО + ": " + Выборка.Количество);
КонецЦикла;
Ключи: |