При разработке отчетов в системе компоновки данных (СКД) разработчики часто сталкиваются с ситуацией, когда ресурсные поля определены на соответствующей закладке, но в итоговом отчете ячейки с ресурсами остаются пустыми или не рассчитываются. Проанализируем основные причины такого поведения и разберем по шагам варианты решения проблемы.
Рассмотрим наиболее распространенный случай. По умолчанию во вложенных группировках отчета на закладке Выбранные поля присутствует служебный элемент Автополе. Он отвечает за автоматическое наследование всех выбранных полей и ресурсов, заданных на верхнем уровне отчета.
Если в настройках конкретной группировки отключить автоматический состав полей (снять флаг или удалить элемент Автополе) и указать собственное поле, наследование прекращается. В результате все ресурсы отчета скрываются для данной группировки.
Выясним, как исправить эту ситуацию:
Автополе был удален, заново добавим в список выбранных полей сам ресурс (например, СуммаОстаток или Количество) либо вернем элемент Автополе.Разберем ситуацию, когда отчет использует несколько источников данных (наборов данных), но связи между ними на закладке Связи наборов данных не заданы. В этом случае СКД не может объединить данные из разных источников в одной общей группировке.
Для корректного вывода ресурсов из двух независимых наборов данных выполним следующие настройки структуры:
Если же требуется объединить данные двух запросов в один общий список, то эффективнее использовать один Набор данных - Запрос с конструкцией ОБЪЕДИНИТЬ ВСЕ или применить Набор данных - Объединение на уровне схемы компоновки.
Проанализируем настройки самой схемы компоновки данных. На закладке Ресурсы для каждого ресурса указываются выражение и уровни расчета:
Сумма(СуммаОстаток) или Количество(Ссылка). Если указать просто имя поля без агрегатной функции, расчет итогов производиться не будет.Посмотрим на особенности обработки данных при соединении наборов. Если при связывании таблиц или выполнении запросов возникает значение NULL, математические операции с такими полями возвращают пустой результат.
Для предотвращения потерь итогов в выражениях ресурсов рекомендуется оборачивать поля в функцию проверки на пустые значения:
ЕСТЬNULL(СуммаОборот, 0)
Также важно убедиться, что исходное поле в запросе имеет числовой тип данных (Число), так как агрегатная функция Сумма не работает со строковыми или составными типами данных.