В процессе разработки отчетов на системе компоновки данных (СКД) часто возникают бизнес-задачи, требующие «сквозной» аналитики. Например, нам необходимо, чтобы во всех строках отчета отображалось определенное число (например, «15»), но только в том случае, если общая сумма показателя Стоимость по всему отчету превышает установленный порог (например, 200 000).
Давайте разберем, как реализовать такую логику, избегая сложных объединений запросов, используя встроенный механизм выражений СКД.
Самый эффективный и элегантный способ решить эту задачу — воспользоваться функцией ВычислитьВыражение. Эта функция позволяет нам «выйти» за пределы текущей строки и обратиться к агрегатным значениям всей выборки или конкретной группировки.
Для реализации поставленной задачи выполним следующие шаги:
БонусноеЧисло.Стоимость.Рассмотрим пример кода, который нужно использовать в выражении:
ВЫБОР
КОГДА ВычислитьВыражение("Сумма(Стоимость)", , "ОбщийИтог") > 200000
ТОГДА 15
ИНАЧЕ 0
КОНЕЦ
Почему это работает?
Функция ВычислитьВыражение принимает три основных параметра: само выражение для агрегации, группировку, по которой нужно считать, и тип итога. Использование строки "ОбщийИтог" в третьем параметре заставляет систему проигнорировать текущую строку и вычислить сумму Стоимость по всей таблице данных. Таким образом, в каждой детальной записи мы получаем результат сравнения, который позволяет нам вывести нужное число.
Иногда число, которое нужно отобразить, является не константой, а динамическим значением, задаваемым пользователем перед формированием отчета. В таком случае мы можем использовать параметры запроса.
Рассмотрим, как правильно настроить передачу данных:
&Число.ВЫБРАТЬ Ссылка, &Число КАК ЗначениеИзПараметра ИЗ Справочник.Номенклатура.&Число значение, которое должно отображаться в строках.Настроек или программное изменение параметров в модуле отчета.Разбирая подобные задачи, мы часто сталкиваемся с вопросом: «Почему не использовать Условное оформление?» Важно понимать, что Условное оформление предназначено исключительно для визуального изменения ячеек (цвет, шрифт, формат). Оно не умеет проводить математические расчеты сумм по всему отчету.
Если вы попробуете применить Условное оформление без предварительно вычисленного поля, вы не сможете сослаться на «общую сумму» всей таблицы, так как условное оформление работает в контексте текущей записи.
Основные советы при работе с вычисляемыми полями:
"ОбщийИтог", функция Сумма() в ВычислитьВыражение будет возвращать значение только текущей группировки, что приведет к неверным результатам.Стоимость доступно во всех наборах, иначе функция вернет NULL.ВычислитьВыражение отрабатывает корректно до того, как вы наложите условие ВЫБОР КОГДА.Используя предложенные методы, вы сможете гибко управлять выводом информации в отчетах любой сложности, сохраняя при этом производительность системы и чистоту кода.