При разработке отчетов на Системе компоновки данных (СКД) разработчики иногда сталкиваются с ситуацией, когда одна из настроенных группировок не отображается в итоговом отчете. При этом данные в консоли запросов выводятся полностью, права доступа настроены корректно, а кеш платформы очищен. Разберем причинно-следственные связи этой проблемы и выработаем надежные способы ее устранения.
Рассмотрим типовой пример, когда в отчете задана иерархия группировок: Партнер > Организация > Детальные записи. На уровне отчета группировки Организация и Детальные записи выводятся без ошибок, но уровень Партнер полностью отсутствует.
Проанализируем текст запроса, который вызывает подобное поведение:
ВЫБРАТЬ
ПриходныйКассовыйОрдер.Ссылка КАК Ссылка,
ПриходныйКассовыйОрдерРасшифровкаПлатежа.Партнер КАК Партнер,
ПриходныйКассовыйОрдер.Организация КАК Организация,
ПриходныйКассовыйОрдер.ХозяйственнаяОперация КАК ХозяйственнаяОперация,
СУММА(ПриходныйКассовыйОрдерРасшифровкаПлатежа.Сумма) КАК Сумма
ИЗ
Документ.ПриходныйКассовыйОрдер.РасшифровкаПлатежа КАК ПриходныйКассовыйОрдерРасшифровкаПлатежа
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
ПО ПриходныйКассовыйОрдерРасшифровкаПлатежа.Ссылка = ПриходныйКассовыйОрдер.Ссылка
ГДЕ
ПриходныйКассовыйОрдер.Проведен = ИСТИНА
И ПриходныйКассовыйОрдер.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&ДатаНачала, ДЕНЬ) И КОНЕЦПЕРИОДА(&ДатаОкончания, ДЕНЬ)
И ПриходныйКассовыйОрдерРасшифровкаПлатежа.Партнер В(&Партнер)
СГРУППИРОВАТЬ ПО
ПриходныйКассовыйОрдер.Ссылка,
ПриходныйКассовыйОрдерРасшифровкаПлатежа.Партнер
Главная причина крылась в секции СГРУППИРОВАТЬ ПО внутри текста запроса при обращении к табличной части документа. Когда мы агрегируем данные непосредственно в SQL-запросе и одновременно пытаемся группировать их средствами СКД, компоновщик данных может некорректно определить роли полей и порядок вычисления итогов. В результате цепочка группировок нарушается.
Основное правило работы с СКД — доверять группировку и суммирование показателей самому компоновщику данных, а не делать это вручную в запросе. Выполним следующие шаги для исправления структуры:
СГРУППИРОВАТЬ ПО и функцию СУММА() из текста запроса, получая детальные записи.Сумма и укажем для него выражение рассчитываемого итога: Сумма(Сумма).Посмотрим на обновленный текст запроса без ручной агрегации:
ВЫБРАТЬ
ПриходныйКассовыйОрдер.Ссылка КАК Ссылка,
ПриходныйКассовыйОрдерРасшифровкаПлатежа.Партнер КАК Партнер,
ПриходныйКассовыйОрдер.Организация КАК Организация,
ПриходныйКассовыйОрдер.ХозяйственнаяОперация КАК ХозяйственнаяОперация,
ПриходныйКассовыйОрдерРасшифровкаПлатежа.Сумма КАК Сумма
ИЗ
Документ.ПриходныйКассовыйОрдер.РасшифровкаПлатежа КАК ПриходныйКассовыйОрдерРасшифровкаПлатежа
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
ПО ПриходныйКассовыйОрдерРасшифровкаПлатежа.Ссылка = ПриходныйКассовыйОрдер.Ссылка
ГДЕ
ПриходныйКассовыйОрдер.Проведен = ИСТИНА
И ПриходныйКассовыйОрдер.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&ДатаНачала, ДЕНЬ) И КОНЕЦПЕРИОДА(&ДатаОкончания, ДЕНЬ)
После этого поле Партнер начнет штатно выводиться в качестве верхнего или промежуточного уровня группировки.
Если в отчете используется программная установка параметров схемы компоновки данных, необходимо следить за тем, в каких обработчиках модулей она выполняется. Передавать значения параметров отбора (например, список партнеров или границы периода) следует в событии ПриКомпоновкеРезультата модуля объекта отчета, а не в форме (ПриСозданииНаСервере или ПриОткрытии).
Пример корректного заполнения параметров в модуле объекта отчета:
Процедура ПриКомпоновкеРезультата(ИсполнительКомпоновки, СхемаКомпоновки, Настройки, ДанныеРасшифровки, СтандартнаяОбработка)
// Получаем нужный параметр из настроек компоновки
ПараметрПартнер = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Партнер"));
Если ПараметрПартнер <> Неопределено Тогда
ПараметрПартнер.Значение = МассивПартнеров;
ПараметрПартнер.Использование = Истина;
КонецЕсли;
КонецПроцедуры
Если после упрощения запроса группировка все еще не выводится, рекомендуем проверить следующие настройки СКД:
Партнер) и убедимся, что в окне "Выбранные поля" находится либо элемент Авто, либо само поле Партнер добавлено явно.