ТипЗаписиЗапроса

Темы платформы · QueryRecordType

Содержит типы записей выборки результатов запроса.

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

ТипЗаписиЗапроса (QueryRecordType)

ТипЗаписиЗапроса (QueryRecordType)

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

Значения
ДетальнаяЗапись (DetailRecord)
ИтогПоГруппировке (GroupTotal)
ИтогПоИерархии (TotalByHierarchy)
ОбщийИтог (Overall)

Описание:

Содержит типы записей выборки результатов запроса.

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

Сервер, толстый клиент, внешнее соединение.
Возможен обмен с сервером.

См. также:
ВыборкаИзРезультатаЗапроса, метод ТипЗаписи

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

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

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

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

Разобрать ТипЗаписиЗапроса.ИтогПоИерархии на своей иерархии

Источник — собственная группа и два подчинённых элемента с настоящими иерархическими итогами. Пример различает детали, группировку, общий и иерархический итоги, не подменяя их строковыми метками.

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

Серверный модуль своей учебной обработки: источник перед основным блоком, функция обхода отдельно на уровне того же модуля.

Подготовка

  1. В отдельной учебной конфигурации создайте собственный иерархический справочник УчебныеИзданияДиаграммы: группы и элементы, код Строка 10 с автонумерацией, наименование 100, не менее двух уровней.

  2. Перед основным блоком в теле одной серверной процедуры своей обработки выполните дополнительный блок источника. Он создаёт новую собственную группу и две записи с количествами 3 и 5.

  3. Запрос использует настоящие собственные ссылки, ОБЩИЕ и Товар ИЕРАРХИЯ. Строковый текст Книга сам по себе иерархии не создаёт.

  4. Добавьте отдельную функцию ПосчитатьЗаписиТипа в тот же серверный модуль. Она рекурсивно спускается только из итоговой записи; для детали дочерняя выборка не запрашивается.

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

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

  1. Создаём известную собственную иерархию и результат запроса с нужными итогами.

  2. Выбираем прямой либо групповой иерархический обход.

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

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

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

  2. Общий итог и собственная группа дают количество 8, но это не дополнительные продажи к деталям 3 и 5. Код считает записи выбранного типа, не суммирует повторно их ресурсы.

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

Тип записи и способ обхода показаны на реальном собственном результате с различимыми уровнями.

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

  1. Не суммируйте вместе детали и итоги: это повторный учёт одних и тех же собственных количеств.

  2. Не вызывайте Выбрать у детальной записи ради бесконечного повторного обхода. Рекурсия ограничена деревом фактических итогов.

  3. Код 1С при сборке HTML не исполнялся; собственные и рабочие записи агентом не создавались.

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

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

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

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

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