Как правильно вывести среднее значение в отчете СКД без лишних строк?

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

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

Использование функции ВычислитьВыражение с отбором по группировке

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

Для жесткой привязки расчета к конкретной группировке отлично подходит встроенная функция языка выражений СКД ВычислитьВыражение. Проанализируем пример решения этой задачи:


ВычислитьВыражение("Среднее(ТаможенныеРасходы + ТранспортныеРасходы + ФинансовыеРасходы + ЦенаЗакупочная)", "Номенклатура")

В этом примере мы передаем вторым параметром имя группировки "Номенклатура". Таким образом, мы принудительно указываем системе, что рассчитывать среднее нужно исключительно в контексте данной группировки. Это отсекает расчет на других уровнях и позволяет получить аккуратный итог в одной нужной строке.

Настройка на вкладке «Ресурсы» и поле «Рассчитывать по...»

Вместо того чтобы прописывать сложные условия прямо в вычисляемых полях, мы можем решить задачу стандартными визуальными средствами СКД. Посмотрим на возможности вкладки «Ресурсы».

  1. Перенесем нужное нам поле (или сумму полей) в раздел ресурсов.
  2. В колонке «Выражение» укажем стандартную агрегатную функцию Среднее().
  3. В колонке «Рассчитывать по...» выберем из выпадающего списка нашу группировку Номенклатура.

При таких настройках СКД вычислит и выведет среднее значение только в строке итогов по указанной номенклатуре. В общих итогах (в подвале отчета) или на уровнях выше (например, группировка по складам) это поле останется пустым. Это один из самых простых и правильных способов убрать «лишние» данные.

Исключение нулевых значений при расчете среднего

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

Чтобы избежать этой ошибки, мы должны преобразовать нули в значение NULL, так как агрегатные функции СКД автоматически игнорируют NULL при подсчете количества элементов. Посмотрим на пример выражения для ресурса:

Среднее(ВЫБОР КОГДА МоеПоле = 0 ТОГДА NULL ИНАЧЕ МоеПоле КОНЕЦ)

С помощью конструкции ВЫБОР КОГДА ... ТОГДА ... мы подменяем нули на пустое значение базы данных, и математика расчета среднего становится абсолютно корректной.

Продвинутый расчет через ВычислитьВыражениеСГруппировкойМассив

Иногда структура отчета бывает сложной: имеются множественные вложенные группировки, или нам необходимо отсечь детальные записи по какому-то специфическому условию до момента расчета среднего. В таком случае нам на помощь приходит мощная функция ВычислитьВыражениеСГруппировкойМассив.

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

Сумма(ВычислитьВыражениеСГруппировкойМассив("Среднее(Поле)", "Номенклатура"))

Этот подход гарантирует, что мы сначала агрегируем данные внутри нужного узла, а затем сворачиваем их в единый показатель.

Избавление от «простыни» детальных записей

Часто под «кучей лишнего» разработчики и пользователи подразумевают вывод детальных записей там, где нужны только сводные итоги. Проанализируем ситуацию в настройках структуры отчета:

  1. Откройте вкладку «Настройки» в схеме компоновки данных.
  2. Проверьте дерево группировок (нижняя левая часть окна). Если вам нужны исключительно итоги по товарам, убедитесь, что добавлена только группировка по полю Номенклатура.
  3. Удалите или снимите флажок с элемента <Детальные записи> (это группировка с пустым полем). Именно детальные записи генерируют строки для каждого отдельного документа или регистратора, раздувая отчет.
  4. Если в группировке используется вывод с иерархией, могут возникать дублирующие пустые строки для папок (групп справочника). Чтобы этого избежать, настройте вывод ресурсов только для элементов, добавив в отбор проверку по системному полю ЭтоГруппа = Ложь.

Используя эти приемы совместно, мы сможем создать чистый, понятный и технически правильный отчет на компоновке данных, где средние значения будут находиться строго на своих местах без искажений.

← На главную