Как рассчитать процент валовой прибыли от общего итога в отчете на СКД?

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

При разработке аналитических отчетов в системе 1С:Предприятие, особенно в конфигурации Управление торговлей 10.3, часто возникает задача не просто вывести сумму прибыли по каждой номенклатурной позиции, но и понять, какую долю эта прибыль составляет в общем объеме доходов компании. Система компоновки данных (СКД) предоставляет для этого мощные встроенные инструменты, однако начинающие разработчики часто сталкиваются с трудностями при написании формул в ресурсах, получая некорректные результаты (например, 100% в каждой строке).

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

Разбор проблемы: почему ручной расчет в запросе не работает

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

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

Способ 1: Использование встроенных системных полей СКД

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

  1. Откроем схему компоновки данных и перейдем на закладку Настройки.
  2. Выберем нужный вариант отчета и перейдем на вкладку Выбранные поля.
  3. В списке доступных полей найдем наш ресурс ВаловаяПрибыль.
  4. Нажмем на значок "+" (плюс) рядом с названием поля. Система развернет список дочерних системных полей.
  5. Выберем поле ВаловаяПрибыль.ПроцентОбщий и перетащим его в список выбранных полей отчета.

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

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

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

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


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

Проанализируем параметры этой функции:

Важно помнить: чтобы формула работала корректно на всех уровнях иерархии, в колонке Рассчитывать по... на закладке ресурсов следует либо оставить пустое значение, либо указать все группировки, в которых должен производиться расчет.

Безопасность расчетов: обработка деления на ноль

В реальных базах данных возможны ситуации, когда общая валовая прибыль за выбранный период равна нулю или имеет отрицательное значение (например, из-за возвратов или корректировок себестоимости). Чтобы отчет не выводил ошибку или некорректные символы, рекомендуем использовать конструкцию ВЫБОР. Проанализируем пример безопасной формулы:


ВЫБОР 
    КОГДА ВычислитьВыражение("Сумма(ВаловаяПрибыль)", "ОбщийИтог") = 0 
    ТОГДА 0 
    ИНАЧЕ Сумма(ВаловаяПрибыль) / ВычислитьВыражение("Сумма(ВаловаяПрибыль)", "ОбщийИтог") * 100 
КОНЕЦ

Такой подход гарантирует стабильность работы отчета даже при "пустых" или специфических данных в информационной базе.

Различие между долей прибыли и рентабельностью

При настройке отчетов в УТ 10.3 важно не путать два разных экономических показателя, которые часто называют "процентом прибыли":

  1. Доля в прибыли (Share of Profit): Это то, что мы разбирали выше. Показывает вклад конкретного товара в общий доход. Используется для ABC-анализа.
  2. Рентабельность продаж (Margin): Показывает эффективность продажи конкретной единицы товара. Рассчитывается как отношение прибыли к выручке по этой же позиции.

Для расчета рентабельности в ресурсах СКД используется другая формула:

(Сумма(Выручка) - Сумма(Себестоимость)) / Сумма(Выручка) * 100

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

Оформление внешнего вида

Чтобы полученный результат выглядел презентабельно (например, 15,45% вместо 15.4512345), необходимо настроить формат поля. Рассмотрим, как это сделать:

  1. На закладке Наборы данных или в Выбранных полях найдите ваше вычисляемое поле.
  2. Нажмите на многоточие в колонке Оформление.
  3. Найдите параметр Формат.
  4. В строке формата установите ЧДЦ=2 (два знака после запятой).
  5. Чтобы добавить символ процента, в поле ЧЛС (Число левых символов) или через форматную строку добавьте суффикс %.

Особенности реализации в УТ 10.3

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

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

← На главную