ЗапросВыбораСхемыЗапроса.ОбщиеИтоги

Свойства · Overall

Тип: Булево. Указывает необходимость вывода в результат общих итогов. Соответствует ключевому слову ОБЩИЕ в выражении ИТОГИ ПО языка запросов. Доступно только, если у схемы запроса выключен режим компоновки данных.

Полное описание, параметры и ограничения

ЗапросВыбораСхемыЗапроса.ОбщиеИтоги (QuerySchemaSelectQuery.Overall)

ЗапросВыбораСхемыЗапроса (QuerySchemaSelectQuery)

ОбщиеИтоги (Overall)

Доступен, начиная с версии 8.3.5.

Использование:
Чтение и запись.
Описание:
Тип: Булево.
Указывает необходимость вывода в результат общих итогов.
Соответствует ключевому слову ОБЩИЕ в выражении ИТОГИ ПО языка запросов.
Доступно только, если у схемы запроса выключен режим компоновки данных.
Доступность:

Сервер, толстый клиент, внешнее соединение.

Использование в версии:

Доступен, начиная с версии 8.3.5.

Методическая информация

Практические примеры

Разделить режим СКД и обычную схему запроса

Переключаем режим компоновки на собственном запросе без итогов. Недоступные в этом режиме свойства итогов не читаются; после возврата обычного режима выполняем запрос.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. В учебной обработке или общем модуле выполните каждый фрагмент отдельно на сервере. Все запросы используют только свои числа и параметры, без справочников, документов и регистров рабочей базы.

  2. СхемаЗапроса редактирует структуру и формирует текст, а Запрос выполняет этот текст. Родительская схема должна оставаться в переменной, пока используются её дочерние объекты.

  3. Не переносите полученные дочерние объекты между разными схемами и не обращайтесь к элементу после его удаления. Упражнения удаления работают только со своей структурой в памяти.

Схема = Новый СхемаЗапроса;
Схема.УстановитьТекстЗапроса("ВЫБРАТЬ 3 КАК Количество, 250 КАК Цена");
Если Схема.ПакетЗапросов.Количество() <> 1 Тогда
    ВызватьИсключение "Ожидался один собственный запрос";
КонецЕсли;
Выбор = Схема.ПакетЗапросов.Получить(0);
Если ТипЗнч(Выбор) <> Тип("ЗапросВыбораСхемыЗапроса") Тогда
    ВызватьИсключение "Первый собственный запрос не является выборкой";
КонецЕсли;
Схема.РежимКомпоновкиДанных = Истина;
Сообщить(Схема.РежимКомпоновкиДанных);
Сообщить(Выбор.Колонки.Количество() = 2);
Схема.РежимКомпоновкиДанных = Ложь;
Выбор.Автопорядок = Ложь;
Выбор.ВыбиратьРазрешенные = Ложь;
Сообщить(Не Схема.РежимКомпоновкиДанных);
Сообщить(Не Выбор.ОбщиеИтоги);
Сообщить(Не Выбор.Автопорядок И Не Выбор.ВыбиратьРазрешенные);
Сообщить(Выбор.ТаблицаДляПомещения = "" И Выбор.ТаблицаДляДобавления = "");
Запрос = Новый Запрос(Схема.ПолучитьТекстЗапроса());
Таблица = Запрос.Выполнить().Выгрузить();
Если Таблица.Количество() <> 1 Тогда
    ВызватьИсключение "Ожидалась одна собственная строка";
КонецЕсли;
Сообщить(Таблица[0].Количество * Таблица[0].Цена = 750);

Разбор по шагам

  1. Исходный запрос содержит свои два числовых поля и не имеет выражения ИТОГИ.

  2. РежимКомпоновкиДанных=Истина меняет режим схемы. ОбщиеИтоги, КонтрольныеТочкиИтогов и ВыраженияИтогов в нём недоступны и в этом участке не читаются.

  3. Возвращаем Ложь до обращения к ОбщиеИтоги. У своего запроса без ИТОГИ ожидаем Ложь.

  4. Автопорядок и ВыбиратьРазрешенные выключаются только в собственном запросе констант. Это не инструкция отключать ограничения доступа в рабочих запросах.

  5. Пустые имена временных таблиц показывают, что запрос не выполняет ПОМЕСТИТЬ или ДОБАВИТЬ. Выполненная строка по-прежнему даёт 750.

Как проверить результат

  1. Семь сравнений Истина.

  2. Чтение ОбщиеИтоги идёт только после выключения режима СКД; скрытые итоговые коллекции не затрагиваются.

Ожидаемый результат

Разобраны режим схемы и отдельные флаги выборки без неверного доступа к итогам.

На что обратить внимание

  1. РежимКомпоновкиДанных не превращает объект в настройки или процессор СКД.

  2. Ложь у ВыбиратьРазрешенные не означает включение привилегированного режима.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Отличить выражение итога от трёх детальных строк

Две строки книги 3/2 и строка ручки 1 остаются деталями. Общий итог 6 вычисляется отдельной агрегатной записью.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. В учебной обработке или общем модуле выполните каждый фрагмент отдельно на сервере. Все запросы используют только свои числа и параметры, без справочников, документов и регистров рабочей базы.

  2. СхемаЗапроса редактирует структуру и формирует текст, а Запрос выполняет этот текст. Родительская схема должна оставаться в переменной, пока используются её дочерние объекты.

  3. Не переносите полученные дочерние объекты между разными схемами и не обращайтесь к элементу после его удаления. Упражнения удаления работают только со своей структурой в памяти.

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

Разбор по шагам

  1. Режим компоновки выключен до работы с ОбщиеИтоги, как требует контракт свойства.

  2. ВыраженияИтогов — определения вычислений. НайтиПоПолю ищет имя колонки Количество; отсутствие проверяется до чтения Поле.

  3. Поле только для чтения указывает на колонку, а Выражение содержит агрегатную функцию СУММА.

  4. ПоГруппировкам позволяет отличить запись ОбщийИтог от деталей через ТипЗаписи.

  5. Внутри общего итога отдельная прямая выборка обходит 3 детальные записи. Их сумма также 6, но сами записи не заменились одной строкой.

Как проверить результат

  1. Девять сообщений Истина.

  2. Общий итог 6 и 3 детальные строки с суммой 6 проверены независимо.

Ожидаемый результат

Показано различие определений итогов, групповых записей и исходных строк.

На что обратить внимание

  1. ИТОГИ не равнозначно СГРУППИРОВАТЬ ПО: детали сохраняются.

  2. Динамическое поле Выборка.Количество — значение строки, не метод Количество коллекции.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.