Доброго дня, коллеги!
Часто слушатели обращаются к нашим тренерам с просьбой объяснить смысл текста из официальной документации. Вопрос обычно сопровождается фразой “Никак не могу понять, что написано в справке” или “Как-то в справке не очень понятно”. Следующий пример как раз из этой серии.
Вопрос
Подскажите, пожалуйста, какое назначение у флага схемы компоновки данных “Использовать группировки запроса если возможно”?
Ответ
При установленной галочке расчет агрегатных функций будет выполняться не процессором компоновки (то есть не на уровне сервера “1С:Предприятие”), а на уровне СУБД. Это должно ускорить расчёт.
Например, текст запроса набора данных выглядит следующим образом:
ВЫБРАТЬ РасходТовараТовары.Товар КАК Товар, РасходТовараТовары.Количество КАК Количество, РасходТовараТовары.Сумма КАК Сумма ИЗ Документ.РасходТовара.Товары КАК РасходТовараТовары
Есть 2 ресурса – Количество и Сумма, для которых используются выражения Сумма(Количество) и Сумма(Сумма).
Снимем галочку “Использовать группировки запроса если возможно” в наборе данных. Текст запроса в макете компоновки будет выглядеть следующим образом:
ВЫБРАТЬ РасходТовараТовары.Товар КАК Товар, РасходТовараТовары.Количество КАК Количество, РасходТовараТовары.Сумма КАК Сумма, ПРЕДСТАВЛЕНИЕССЫЛКИ(РасходТовараТовары.Товар) КАК ТоварПредставление, РасходТовараТовары.Товар.Наименование КАК ТоварНаименование ИЗ Документ.РасходТовара.Товары КАК РасходТовараТовары
Теперь установим галочку “Использовать группировки запроса если возможно” в наборе данных. Текст запроса в макете компоновки будет выглядеть по-другому:
ВЫБРАТЬ РасходТовараТовары.Товар КАК Товар, СУММА(РасходТовараТовары.Количество) КАК КоличествоСумма, СУММА(РасходТовараТовары.Сумма) КАК СуммаСумма, ПРЕДСТАВЛЕНИЕССЫЛКИ(РасходТовараТовары.Товар) КАК ТоварПредставление, РасходТовараТовары.Товар.Наименование КАК ТоварНаименование, ВЫБОР КОГДА РасходТовараТовары.Товар.Ссылка ЕСТЬ NULL ТОГДА 0 ИНАЧЕ 1 КОНЕЦ КАК ТоварПолеУпорядочивания1 ИЗ Документ.РасходТовара.Товары КАК РасходТовараТовары СГРУППИРОВАТЬ ПО РасходТовараТовары.Товар, РасходТовараТовары.Товар.Наименование, ВЫБОР КОГДА РасходТовараТовары.Товар.Ссылка ЕСТЬ NULL ТОГДА 0 ИНАЧЕ 1 КОНЕЦ УПОРЯДОЧИТЬ ПО ТоварПолеУпорядочивания1, ТоварНаименование, Товар
В этом случае в тексте запроса набора данных используются агрегатные функции (вместо расчета итогов на сервере “1С:Предприятие”).
Профессиональная разработка отчетов в 1С 8.3 на Системе Компоновки Данных (СКД).
так и зачем это нужно и когда это использовать?
Добрый день!
Эта галочка позволяет в некоторых случаях ускорить получение данных при помощи СКД. Ускорение происходит за счет того, что в запросе, выбирающем данные из базы, используются агрегатные функции. Поэтому группировка данных происходит на уровне сервера СУБД, а не на уровне сервера “1С:Предприятие” при обработке уже полученных из базы данных.
По умолчанию эта галочка в наборе данных включена, значит, СКД попробует таким образом оптимизировать получение данных из базы.
Из примера, что здесь описан, не понятно для чего она, что мешает мне написать сразу в запросе СУММА() и всё?
Например, если в детальных записях нужно, чтобы записи не сворачивались, выводились с детализацией до каждого регистратора, номера строки в табличной части.
Не очень понятно что мешает в запросе делать или нет группировку?
Потому что в настройках компоновки пользователь может задать различные варианты группировок, вложенных друг в друга. Все возможные варианты группировок в одном тексте запроса не получится предусмотреть.
Тогда другой вопрос: в каких случаях и зачем эту галочку нужно снять?
Вот описание этой галочки в документации:
Генератор макета компоновки данных, при создании запроса, используемого для получения набора, пытается использовать язык запросов СУБД для агрегации данных. Для агрегации данных используются функции СУММА(), МАКСИМУМ() и МИНИМУМ() языка запросов, применяемые к одному полю.
Источник: https://dl03.1c.ru/content/Platform/8_3_14_1630/1cv8upd_8_3_14_1630.htm#2f7dd713-a9ec-11e8-a3f7-0050569f678a
Когда Вам не нужна эта возможность, галочку надо снять. Тогда расчет итогов будет выполняться на сервере “1С:Предприятие”, а не на сервере СУБД.
На практике не встречал случаев, когда эта галочка действительно используется.