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