Почему не выводится группировка в отчете на СКД и как это исправить

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

При разработке отчетов на Системе компоновки данных (СКД) разработчики иногда сталкиваются с ситуацией, когда одна из настроенных группировок не отображается в итоговом отчете. При этом данные в консоли запросов выводятся полностью, права доступа настроены корректно, а кеш платформы очищен. Разберем причинно-следственные связи этой проблемы и выработаем надежные способы ее устранения.

Анализ проблемы: конфликт агрегации в запросе и механизмов СКД

Рассмотрим типовой пример, когда в отчете задана иерархия группировок: Партнер > Организация > Детальные записи. На уровне отчета группировки Организация и Детальные записи выводятся без ошибок, но уровень Партнер полностью отсутствует.

Проанализируем текст запроса, который вызывает подобное поведение:


ВЫБРАТЬ
	ПриходныйКассовыйОрдер.Ссылка КАК Ссылка,
	ПриходныйКассовыйОрдерРасшифровкаПлатежа.Партнер КАК Партнер,
	ПриходныйКассовыйОрдер.Организация КАК Организация,
	ПриходныйКассовыйОрдер.ХозяйственнаяОперация КАК ХозяйственнаяОперация,
	СУММА(ПриходныйКассовыйОрдерРасшифровкаПлатежа.Сумма) КАК Сумма
ИЗ
	Документ.ПриходныйКассовыйОрдер.РасшифровкаПлатежа КАК ПриходныйКассовыйОрдерРасшифровкаПлатежа
	ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
	ПО ПриходныйКассовыйОрдерРасшифровкаПлатежа.Ссылка = ПриходныйКассовыйОрдер.Ссылка
ГДЕ
	ПриходныйКассовыйОрдер.Проведен = ИСТИНА
	И ПриходныйКассовыйОрдер.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&ДатаНачала, ДЕНЬ) И КОНЕЦПЕРИОДА(&ДатаОкончания, ДЕНЬ)
	И ПриходныйКассовыйОрдерРасшифровкаПлатежа.Партнер В(&Партнер)
СГРУППИРОВАТЬ ПО
	ПриходныйКассовыйОрдер.Ссылка,
	ПриходныйКассовыйОрдерРасшифровкаПлатежа.Партнер

Главная причина крылась в секции СГРУППИРОВАТЬ ПО внутри текста запроса при обращении к табличной части документа. Когда мы агрегируем данные непосредственно в SQL-запросе и одновременно пытаемся группировать их средствами СКД, компоновщик данных может некорректно определить роли полей и порядок вычисления итогов. В результате цепочка группировок нарушается.

Решение 1. Отказ от группировки в запросе и перенос расчета в ресурсы СКД

Основное правило работы с СКД — доверять группировку и суммирование показателей самому компоновщику данных, а не делать это вручную в запросе. Выполним следующие шаги для исправления структуры:

  1. Уберем конструкцию СГРУППИРОВАТЬ ПО и функцию СУММА() из текста запроса, получая детальные записи.
  2. На вкладке Ресурсы в схеме компоновки данных добавим поле Сумма и укажем для него выражение рассчитываемого итога: Сумма(Сумма).
  3. В настройках отчета (вкладка Настройки) сформируем нужную структуру группировок.

Посмотрим на обновленный текст запроса без ручной агрегации:


ВЫБРАТЬ
	ПриходныйКассовыйОрдер.Ссылка КАК Ссылка,
	ПриходныйКассовыйОрдерРасшифровкаПлатежа.Партнер КАК Партнер,
	ПриходныйКассовыйОрдер.Организация КАК Организация,
	ПриходныйКассовыйОрдер.ХозяйственнаяОперация КАК ХозяйственнаяОперация,
	ПриходныйКассовыйОрдерРасшифровкаПлатежа.Сумма КАК Сумма
ИЗ
	Документ.ПриходныйКассовыйОрдер.РасшифровкаПлатежа КАК ПриходныйКассовыйОрдерРасшифровкаПлатежа
	ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
	ПО ПриходныйКассовыйОрдерРасшифровкаПлатежа.Ссылка = ПриходныйКассовыйОрдер.Ссылка
ГДЕ
	ПриходныйКассовыйОрдер.Проведен = ИСТИНА
	И ПриходныйКассовыйОрдер.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&ДатаНачала, ДЕНЬ) И КОНЕЦПЕРИОДА(&ДатаОкончания, ДЕНЬ)

После этого поле Партнер начнет штатно выводиться в качестве верхнего или промежуточного уровня группировки.

Решение 2. Программное заполнение параметров в корректных событиях

Если в отчете используется программная установка параметров схемы компоновки данных, необходимо следить за тем, в каких обработчиках модулей она выполняется. Передавать значения параметров отбора (например, список партнеров или границы периода) следует в событии ПриКомпоновкеРезультата модуля объекта отчета, а не в форме (ПриСозданииНаСервере или ПриОткрытии).

Пример корректного заполнения параметров в модуле объекта отчета:


Процедура ПриКомпоновкеРезультата(ИсполнительКомпоновки, СхемаКомпоновки, Настройки, ДанныеРасшифровки, СтандартнаяОбработка)
	
	// Получаем нужный параметр из настроек компоновки
	ПараметрПартнер = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Партнер"));
	Если ПараметрПартнер <> Неопределено Тогда
		ПараметрПартнер.Значение = МассивПартнеров;
		ПараметрПартнер.Использование = Истина;
	КонецЕсли;

КонецПроцедуры

Дополнительные проверки при проблемах с группировками

Если после упрощения запроса группировка все еще не выводится, рекомендуем проверить следующие настройки СКД:

  1. Выбранные поля группировки: Зайдем в настройки конкретной группировки (например, Партнер) и убедимся, что в окне "Выбранные поля" находится либо элемент Авто, либо само поле Партнер добавлено явно.
  2. Ограничение доступности полей: На вкладке "Наборы данных" проверим столбцы "Ограничение доступности" и "Ограничение группировки". Флаги для проверяемого поля должны быть сняты.
  3. Пользовательские настройки: При тестировании отчета в режиме "1С:Предприятие" необходимо сбросить настройки пользователя к стандартным (меню "Еще" — "Установить стандартные настройки"), так как сохраненный ранее вариант отчета в информационной базе может скрывать определенные поля.
← На главную