При разработке аналитических отчетов в системе 1С:Предприятие, особенно в конфигурации Управление торговлей 10.3, часто возникает задача не просто вывести сумму прибыли по каждой номенклатурной позиции, но и понять, какую долю эта прибыль составляет в общем объеме доходов компании. Система компоновки данных (СКД) предоставляет для этого мощные встроенные инструменты, однако начинающие разработчики часто сталкиваются с трудностями при написании формул в ресурсах, получая некорректные результаты (например, 100% в каждой строке).
В этой статье мы подробно разберем, как правильно реализовать расчет доли валовой прибыли, проанализируем типичные ошибки и рассмотрим несколько способов решения задачи: от использования стандартных системных полей до написания сложных выражений с использованием функций СКД.
Рассмотрим типичную ситуацию: разработчик пытается вычислить процент прямо в тексте запроса или через простое суммирование полей в ресурсах. Например, формула вида (Сумма(Прибыль) / Сумма(Прибыль)) * 100 всегда будет давать 100, так как СКД рассчитывает ресурсы в контексте текущей группировки. Если мы находимся в строке "Товар 1", то и числитель, и знаменатель будут содержать сумму только по этому товару.
Для корректного расчета нам необходимо разделить прибыль текущей строки на сумму прибыли всего отчета (общий итог) или вышестоящей группы. Давайте выясним, как это сделать правильно.
Это самый простой и производительный метод, который часто упускают из виду. Платформа 1С автоматически генерирует дополнительные поля для каждого числового ресурса. Разберем по шагам, как их задействовать:
ВаловаяПрибыль.ВаловаяПрибыль.ПроцентОбщий и перетащим его в список выбранных полей отчета.ВаловаяПрибыль.ПроцентОбщий автоматически рассчитывает долю текущей записи относительно итога по всему отчету. Если же вам нужно посчитать долю товара внутри конкретной категории (папки), используйте поле ВаловаяПрибыль.ПроцентВГруппе. Эти поля оптимизированы на уровне движка СКД и работают максимально быстро.
Если вам требуется более сложная логика или вы хотите создать отдельное вычисляемое поле с собственным наименованием, на помощь приходит функция ВычислитьВыражение. Она позволяет обращаться к данным вне контекста текущей строки группировки.
Рассмотрим структуру формулы, которую необходимо прописать на закладке Ресурсы для вашего поля (например, ДоляПрибыли):
Сумма(ВаловаяПрибыль) / ВычислитьВыражение("Сумма(ВаловаяПрибыль)", "ОбщийИтог") * 100
Проанализируем параметры этой функции:
Важно помнить: чтобы формула работала корректно на всех уровнях иерархии, в колонке Рассчитывать по... на закладке ресурсов следует либо оставить пустое значение, либо указать все группировки, в которых должен производиться расчет.
В реальных базах данных возможны ситуации, когда общая валовая прибыль за выбранный период равна нулю или имеет отрицательное значение (например, из-за возвратов или корректировок себестоимости). Чтобы отчет не выводил ошибку или некорректные символы, рекомендуем использовать конструкцию ВЫБОР. Проанализируем пример безопасной формулы:
ВЫБОР
КОГДА ВычислитьВыражение("Сумма(ВаловаяПрибыль)", "ОбщийИтог") = 0
ТОГДА 0
ИНАЧЕ Сумма(ВаловаяПрибыль) / ВычислитьВыражение("Сумма(ВаловаяПрибыль)", "ОбщийИтог") * 100
КОНЕЦ
Такой подход гарантирует стабильность работы отчета даже при "пустых" или специфических данных в информационной базе.
При настройке отчетов в УТ 10.3 важно не путать два разных экономических показателя, которые часто называют "процентом прибыли":
Для расчета рентабельности в ресурсах СКД используется другая формула:
(Сумма(Выручка) - Сумма(Себестоимость)) / Сумма(Выручка) * 100
Обратите внимание, что здесь мы не используем ОбщийИтог, так как нам нужно соотнести показатели одной и той же строки.
Чтобы полученный результат выглядел презентабельно (например, 15,45% вместо 15.4512345), необходимо настроить формат поля. Рассмотрим, как это сделать:
ЧДЦ=2 (два знака после запятой). %.Поскольку Управление торговлей 10.3 базируется на обычных формах, использование СКД в ней имеет свои нюансы. Если вы создаете отчет с нуля, убедитесь, что вы используете универсальный механизм отчетов или правильно инициализируете настройки компоновки в программном коде. Если расчеты в пользовательских полях не отображаются, проверьте, передаются ли настройки (Settings) в процессор компоновки данных при формировании документа.
Использование функции ВычислитьВыражение и системных полей процентов позволяет значительно сократить время разработки и избежать написания сложного кода на языке запросов 1С, перекладывая тяжелые вычисления на оптимизированный движок системы компоновки данных.