Как правильно рассчитать эффективность и другие процентные показатели в итогах отчета СКД

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

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

Разбор типичной ошибки при расчете процентов

Рассмотрим ситуацию: нам нужно рассчитать эффективность по формуле (Валовая прибыль / Себестоимость) * 100. Если мы просто создадим вычисляемое поле с этой формулой и добавим его в ресурсы как Сумма(Эффективность), СКД на уровне итогов просто сложит все проценты. Например, если у одного товара эффективность 10%, а у другого 20%, в итоге по складу мы получим 30%, что абсолютно неверно с точки зрения управленческого учета.

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

Основное решение: Правильное выражение ресурса

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

Вместо использования простого суммирования вычисляемого поля, перейдем на вкладку Ресурсы и для поля Эффективность напишем следующее выражение:


Сумма(ВаловаяПрибыль) / Выбор Когда Сумма(Себестоимость) = 0 Тогда 1 Иначе Сумма(Себестоимость) Конец * 100

Рассмотрим подробнее, что здесь происходит:

  1. Сумма(ВаловаяПрибыль) — система сначала собирает всю прибыль по текущей группировке.
  2. Сумма(Себестоимость) — система суммирует всю себестоимость по этой же группировке.
  3. Деление — только после получения итоговых сумм выполняется деление одной суммы на другую.

Такой подход гарантирует, что на любом уровне иерархии (хоть по конкретному менеджеру, хоть по всей компании в целом) процент будет рассчитан математически верно.

Обработка деления на ноль

При расчете эффективности важно предусмотреть ситуацию, когда Себестоимость равна нулю (например, продажа услуг или ошибки в учете). Если этого не сделать, отчет может вывести пустые значения или ошибку Division by zero. Проанализируем безопасный вариант формулы:


Выбор 
    Когда Сумма(Себестоимость) <> 0 
    Тогда (Сумма(ВаловаяПрибыль) / Сумма(Себестоимость)) * 100 
    Иначе 0 
Конец

Использование конструкции ВЫБОР КОГДА в ресурсах — это стандарт надежной разработки. Также можно использовать функцию ЕСТЬNULL, если вы предполагаете наличие пустых значений в исходных данных.

Работа с функцией ВычислитьВыражение

Иногда возникают задачи, когда стандартного отношения сумм недостаточно — например, когда нужно рассчитать долю конкретной группы в общем итоге. В таких случаях программисты пытаются использовать ВычислитьВыражение. Однако, как мы видели в обсуждении, неправильное использование параметров этой функции приводит к "пропаданию" данных в вышестоящих группировках.

Если в параметрах функции жестко указать имя группировки, например "Контрагент", то расчет будет работать только внутри этой группы. На уровне "Склад" система уже не "увидит" контекста контрагента и вернет пустоту. Чтобы избежать этого, для разных уровней группировок на вкладке Ресурсы можно добавлять одно и то же поле несколько раз, указывая в колонке Рассчитывать по... конкретную группировку и свою формулу для неё.

Пример использования ВычислитьВыражение для расчета доли:


Сумма(ВаловаяПрибыль) / ВычислитьВыражение("Сумма(ВаловаяПрибыль)", , "ОбщийИтог") * 100

Оформление и точность вычислений

Посмотрим на финальный штрих — визуальное представление. Результат деления часто дает бесконечную дробь. Чтобы отчет выглядел профессионально, ограничим разрядность. Это можно сделать двумя способами:

  1. В выражении ресурса использовать функцию Выразить: Выразить(Сумма(ВаловаяПрибыль) / Сумма(Себестоимость) * 100, "Число(15,2)")
  2. В настройках оформления поля на вкладке Наборы данных или в Настройках отчета задать формат: ЧЦ=15; ЧДЦ=2.

Резюме для реализации

Разберем по шагам алгоритм действий для создания корректного отчета:

Использование агрегатных функций внутри выражений ресурсов — это самый надежный и простой способ заставить СКД правильно считать проценты на любом уровне вложенности отчета.

← На главную