ВыборкаИзРезультатаЗапроса.Группировка

Методы · Group

Получает имя группировки текущей записи выборки.

Синтаксис

Группировка()

Примеры платформы

ТекГруппировка = Выборка.Группировка();
Полное описание, параметры и ограничения

ВыборкаИзРезультатаЗапроса.Группировка (QueryResultSelection.Group)

ВыборкаИзРезультатаЗапроса (QueryResultSelection)

Группировка (Group)

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

Синтаксис:
Группировка()
Возвращаемое значение:
Тип: Строка.
Имя группировки текущей записи. Если группировки нет, возвращается пустая строка.
Описание:

Получает имя группировки текущей записи выборки.

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

Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.

Пример:

ТекГруппировка = Выборка.Группировка();

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

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

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

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

Обойти групповые итоги и детальные записи без двойного подсчёта

Итог Книга=5 и строка Книга=3 — разные уровни результата. Складывать одновременно все уровни нельзя.

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

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

Подготовка

  1. Разместите полную процедуру на уровне серверного общего модуля; не вставляйте её в другую процедуру.

  2. Три записи заданы в тексте. Справочники, иерархия товаров и база продаж не требуются.


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

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

  1. ИТОГИ не сворачивает исходные строки как СГРУППИРОВАТЬ ПО: результат содержит уровни итогов и детали.

  2. Выборка ПоГруппировкам получает две группы Название. ТипЗаписи, Группировка и Уровень объясняют вид текущей записи.

  3. Из каждой группы создаём вложенную Прямую выборку только её деталей и сверяем сумму с итогом.

  4. В общей сумме учитываем только групповые итоги: 5+1=6. Детали отдельно считаем как три строки.

  5. Выгрузить с обходом ПоГруппировкам возвращает ДеревоЗначений, а Прямой обход возвращает ТаблицаЗначений.

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

  1. Итоги по названиям: Книга=5 и Ручка=1; общий контроль 6 и три детальные строки.

  2. Для каждой группы сумма её деталей совпадает с групповой Количество.

  3. Выгрузка групп имеет тип ДеревоЗначений; сообщения о уровне используются для наблюдения, не как жёстко заданный номер.

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

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

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

  1. Нельзя суммировать в один показатель детали и их итоги — это двойной учёт.

  2. Это группировка по значению, не обход иерархического справочника.

  3. Порядок групп не обещан: для отображения задавайте сортировку отдельно.

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

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

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

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

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