Тип: КолонкаСхемыЗапроса. Содержит поле выражения итога.
Полное описание, параметры и ограничения
ВыражениеИтогаСхемыЗапроса.Поле (QuerySchemaTotalExpression.Field)
ВыражениеИтогаСхемыЗапроса (QuerySchemaTotalExpression)
Поле (Field)
Доступен, начиная с версии 8.3.5.
Использование:
Только чтение.
Описание:
Тип: КолонкаСхемыЗапроса.
Содержит поле выражения итога.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.3.5.
Методическая информация
Практические примеры
Отличить выражение итога от трёх детальных строк
Две строки книги 3/2 и строка ручки 1 остаются деталями. Общий итог 6 вычисляется отдельной агрегатной записью.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
В учебной обработке или общем модуле выполните каждый фрагмент отдельно на сервере. Все запросы используют только свои числа и параметры, без справочников, документов и регистров рабочей базы.
СхемаЗапроса редактирует структуру и формирует текст, а Запрос выполняет этот текст. Родительская схема должна оставаться в переменной, пока используются её дочерние объекты.
Не переносите полученные дочерние объекты между разными схемами и не обращайтесь к элементу после его удаления. Упражнения удаления работают только со своей структурой в памяти.
Схема = Новый СхемаЗапроса;
Схема.РежимКомпоновкиДанных = Ложь;
Схема.УстановитьТекстЗапроса("ВЫБРАТЬ Строки.Наименование КАК Наименование, Строки.Количество КАК Количество
|ИЗ (ВЫБРАТЬ ""Книга"" КАК Наименование, 3 КАК Количество
|ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ""Книга"", 2
|ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ""Ручка"", 1) КАК Строки
|ИТОГИ СУММА(Количество) ПО ОБЩИЕ, Наименование");
Если Схема.ПакетЗапросов.Количество() <> 1 Тогда
ВызватьИсключение "Ожидался один собственный запрос итогов";
КонецЕсли;
Выбор = Схема.ПакетЗапросов.Получить(0);
Если ТипЗнч(Выбор) <> Тип("ЗапросВыбораСхемыЗапроса") Тогда
ВызватьИсключение "Ожидалась выборка собственных итогов";
КонецЕсли;
Если Не Выбор.ОбщиеИтоги Тогда
ВызватьИсключение "Собственный запрос должен содержать ОБЩИЕ";
КонецЕсли;
Итоги = Выбор.ВыраженияИтогов;
ИтогКоличество = Итоги.НайтиПоПолю("Количество");
Если ИтогКоличество = Неопределено Тогда
ВызватьИсключение "Нет итога собственной колонки Количество";
КонецЕсли;
Если Итоги.Количество() <> 1 Тогда
ВызватьИсключение "Ожидалось одно выражение итога";
КонецЕсли;
Сообщить(ИтогКоличество.Поле.Псевдоним = "Количество");
Сообщить(ИтогКоличество.Выражение.СодержитАгрегатнуюФункцию());
Сообщить(Итоги.НайтиПоВыражению(Строка(ИтогКоличество.Выражение)) <> Неопределено);
Сообщить(Итоги.Индекс(ИтогКоличество) = 0);
Сообщить(Итоги.Получить(0).Поле.Псевдоним = "Количество");
Сообщить(Выбор.ОбщиеИтоги);
Запрос = Новый Запрос(Схема.ПолучитьТекстЗапроса());
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
НайденОбщий = Ложь;
Пока Выборка.Следующий() Цикл
Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ОбщийИтог Тогда
НайденОбщий = Истина;
Сообщить(Выборка.Количество = 6);
Детальные = Выборка.Выбрать(ОбходРезультатаЗапроса.Прямой);
ЧислоСтрок = 0;
СуммаСтрок = 0;
Пока Детальные.Следующий() Цикл
ЧислоСтрок = ЧислоСтрок + 1;
СуммаСтрок = СуммаСтрок + Детальные.Количество;
КонецЦикла;
Сообщить(ЧислоСтрок = 3 И СуммаСтрок = 6);
КонецЕсли;
КонецЦикла;
Если Не НайденОбщий Тогда
ВызватьИсключение "Не найден собственный общий итог";
КонецЕсли;
Сообщить(НайденОбщий);
Разбор по шагам
Режим компоновки выключен до работы с ОбщиеИтоги, как требует контракт свойства.
ВыраженияИтогов — определения вычислений. НайтиПоПолю ищет имя колонки Количество; отсутствие проверяется до чтения Поле.
Поле только для чтения указывает на колонку, а Выражение содержит агрегатную функцию СУММА.
ПоГруппировкам позволяет отличить запись ОбщийИтог от деталей через ТипЗаписи.
Внутри общего итога отдельная прямая выборка обходит 3 детальные записи. Их сумма также 6, но сами записи не заменились одной строкой.
Как проверить результат
Девять сообщений Истина.
Общий итог 6 и 3 детальные строки с суммой 6 проверены независимо.
Ожидаемый результат
Показано различие определений итогов, групповых записей и исходных строк.
На что обратить внимание
ИТОГИ не равнозначно СГРУППИРОВАТЬ ПО: детали сохраняются.
Динамическое поле Выборка.Количество — значение строки, не метод Количество коллекции.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.