1С: Запросы. Итоги в запросах
Описание
Примеры вывода итогов в запросе 1С. Итоги по иерархии, итоги по полю, общие итоги, итоги только по иерархии и др.
Оглавление (нажмите, чтобы раскрыть)
Итоги без агрегации
Пример вывода итогов без агрегации//добаляем группировочные строки по //иерархии материалов //без подсчета итоговых остатков Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Материал, | КоличествоОстаток КАК Количество |ИЗ | РегистрНакопления.ОстаткиМатериалов.Остатки |ИТОГИ |ПО | Материал ИЕРАРХИЯ"; Выборка = Запрос.Выполнить().Выбрать( ОбходРезультатаЗапроса.ПоГруппировкам); Пока Выборка.Следующий() Цикл Отступ = ""; Для Н = 0 По Выборка.Уровень() - 1 Цикл Отступ = Отступ + Символы.Таб; КонецЦикла; Если Выборка.ТипЗаписи() <> ТипЗаписиЗапроса.ИтогПоГруппировке Тогда //для обычной записи отображаем результат Сообщить(Отступ + Выборка.Материал); Иначе //для итоговой записи бежим по вложенным записям ВыборкаМатериал = Выборка.Выбрать(); Пока ВыборкаМатериал.Следующий() Цикл Сообщить(Отступ + ВыборкаМатериал.Материал + ": " + ВыборкаМатериал.Количество); КонецЦикла; КонецЕсли; КонецЦикла; //Пример результата: //Материалы // Радиодетали // Трансформатор: 3 // Транзистор: 5 // Прочие // Шланг: 12
Итоги по иерархии
Пример вывода итогов по иерархии//добаляем группировочные строки по //иерархии материалов //с подсчетом итоговых остатков Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Материал, | КоличествоОстаток КАК Количество |ИЗ | РегистрНакопления.ОстаткиМатериалов.Остатки |ИТОГИ | СУММА(КоличествоОстаток) |ПО | Материал ИЕРАРХИЯ"; Выборка = Запрос.Выполнить().Выбрать( ОбходРезультатаЗапроса.ПоГруппировкам); Пока Выборка.Следующий() Цикл Отступ = ""; Для Н = 0 По Выборка.Уровень()-1 Цикл Отступ = Отступ + Символы.Таб; КонецЦикла; Сообщить(Отступ + Выборка.Материал + ": " + Выборка.Количество); КонецЦикла; //Пример результата: //Материалы: 20 // Радиодетали: 8 // Трансформатор: 3 // Транзистор: 5 // Прочие: 12 // Шланг: 12
Итоги по полю
Пример вывода итогов по полю//Оператор ИТОГИ добавляет к результатам //запроса группирующие строки //Выбираем суммы начислений по //сотруднику и виду расчета. //Затем добавляем строки с итоговыми //суммами по виду рачета. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВидРасчета, | Сотрудник, | Результат |ИЗ | РегистрРасчета.Начисления |ИТОГИ | СУММА(Результат) |ПО | ВидРасчета"; Выборка = Запрос.Выполнить().Выбрать( ОбходРезультатаЗапроса.ПоГруппировкам); //цикл по группирующим строкам Пока Выборка.Следующий() Цикл Сообщить("" + Выборка.ВидРасчета + ": " + Выборка.Результат); ВыборкаСотр = Выборка.Выбрать(); //цикл по подчиненным строкам Пока ВыборкаСотр.Следующий() Цикл Сообщить(" " + ВыборкаСотр.Сотрудник + ": " + ВыборкаСотр.Результат); КонецЦикла; КонецЦикла; //Пример результата: //Оклад: 13500 // Иванов: 7000 // Петров: 6500 //Премия: 700 // Иванов: 700
Итоги только по иерархии
Пример вывода итогов только по иерархии//получаем только группировочные строки по //иерархии материалов //с подсчетом итоговых остатков Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Материал, | КоличествоОстаток КАК Количество |ИЗ | РегистрНакопления.ОстаткиМатериалов.Остатки |ИТОГИ | СУММА(КоличествоОстаток) |ПО | Материал ТОЛЬКО ИЕРАРХИЯ"; Выборка = Запрос.Выполнить().Выбрать( ОбходРезультатаЗапроса.ПоГруппировкам); Пока Выборка.Следующий() Цикл Отступ = ""; Для Н = 0 По Выборка.Уровень()-1 Цикл Отступ = Отступ + Символы.Таб; КонецЦикла; Сообщить(Отступ + Выборка.Материал + ": " + Выборка.Количество); КонецЦикла; //Пример результата: //Материалы: 20 // Радиодетали: 8 // Прочие: 12
Общие итоги
Пример вывода общих итогов//получаем только группировочные строки по //иерархии материалов //с подсчетом итоговых остатков Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Материал, | КоличествоОстаток КАК Количество |ИЗ | РегистрНакопления.ОстаткиМатериалов.Остатки |ИТОГИ | СУММА(КоличествоОстаток) |ПО | Материал ТОЛЬКО ИЕРАРХИЯ"; Выборка = Запрос.Выполнить().Выбрать( ОбходРезультатаЗапроса.ПоГруппировкам); Пока Выборка.Следующий() Цикл Отступ = ""; Для Н = 0 По Выборка.Уровень()-1 Цикл Отступ = Отступ + Символы.Таб; КонецЦикла; Сообщить(Отступ + Выборка.Материал + ": " + Выборка.Количество); КонецЦикла; //Пример результата: //Материалы: 20 // Радиодетали: 8 // Прочие: 12
Общие итоги и итоги по полю
Пример вывода общих итогов и итогов по полю//Выбираем суммы начислений по //сотруднику и виду расчета. //Затем добавляем строку с общей //суммой по всем начислениям и //и строки с суммами по виду расчета. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВидРасчета, | Сотрудник, | Результат |ИЗ | РегистрРасчета.Начисления |ИТОГИ | СУММА(Результат) |ПО | ОБЩИЕ, | ВидРасчета"; Выборка = Запрос.Выполнить().Выбрать( ОбходРезультатаЗапроса.ПоГруппировкам); //выводим итоговые данные Если Выборка.Следующий() Тогда Сообщить("Итого: " + Выборка.Результат); ВыборкаВидРачета = Выборка.Выбрать( ОбходРезультатаЗапроса.ПоГруппировкам); //цикл по видам расчета Пока ВыборкаВидРачета.Следующий() Цикл Сообщить(" " + ВыборкаВидРачета.ВидРасчета + ": " + ВыборкаВидРачета.Результат); ВыборкаСотр = ВыборкаВидРачета.Выбрать(); //цикл по подчиненным строкам Пока ВыборкаСотр.Следующий() Цикл Сообщить(" " + ВыборкаСотр.Сотрудник + ": " + ВыборкаСотр.Результат); КонецЦикла; КонецЦикла; КонецЕсли; //Пример результата: //Итого: 14200 // Оклад: 13500 // Иванов: 7000 // Петров: 6500 // Премия: 700 // Иванов: 700