КонтрольныеТочкиИтоговСхемыЗапроса

Типы · QuerySchemaTotalCalculationFields

Коллекция контрольных точек итогов. Представляет собой список полей итогов из выражения ИТОГИ ПО языка запросов.

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

КонтрольныеТочкиИтоговСхемыЗапроса (QuerySchemaTotalCalculationFields)

КонтрольныеТочкиИтоговСхемыЗапроса (QuerySchemaTotalCalculationFields)

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

Элементы коллекции:
КонтрольнаяТочкаИтоговСхемыЗапроса
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются контрольные точки итогов.
Возможно обращение к контрольной точке итогов посредством оператора [...]. В качестве аргумента передается индекс.

Методы:
Добавить (Add)
Индекс (IndexOf)
Количество (Count)
НайтиПоВыражению (FindByExpression)
НайтиПоИмениКолонки (FindByColumnName)
Очистить (Clear)
Переместить (MoveTo)
Получить (Get)
Сдвинуть (Move)
Удалить (Delete)

Описание:

Коллекция контрольных точек итогов.
Представляет собой список полей итогов из выражения ИТОГИ ПО языка запросов.

Доступность:

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

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

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

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

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

Переставить и восстановить контрольные точки итогов

Создаём две собственные контрольные точки Наименование и Количество, проверяем индексы после перестановки. Выполнение проверяем только после возврата к одной группировке.

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

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

Подготовка

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

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

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

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

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

  1. КонтрольныеТочкиИтогов соответствует полям после ИТОГИ ПО. ОБЩИЕ задаётся отдельным флагом, а не дополнительной точкой этой коллекции.

  2. Наименование — обычная строка, не иерархическая ссылка и не дата. Поэтому выбираем Элементы и БезДополнения, границы периодов только читаем.

  3. Вторая точка Количество нужна для упражнения порядка. Переместить задаёт абсолютный индекс, Сдвинуть — смещение в современном режиме совместимости.

  4. После удаления точки Количество и очистки не используем полученные ранее дочерние объекты.

  5. Создаём новую точку Наименование, затем выполняем восстановленный собственный запрос: общий итог 6, три детали.

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

  1. Четырнадцать сообщений Истина.

  2. Порядок точек проверен индексами; итог проверяется только после восстановления структуры.

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

Разобрана коллекция контрольных точек без ложной имитации периодического регистра.

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

  1. В режиме совместимости 8.3.10 и ниже Сдвинуть имеет старую семантику; упражнение рассчитано на современный режим.

  2. Для дополнения периодами нужен отдельный пример с полем даты, строки товара недостаточно.

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

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

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

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

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