Как правильно рассчитать коэффициент или долю в отчете на СКД?

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

Часто при разработке отчетов в системе компоновки данных (СКД) разработчики сталкиваются с тем, что результат деления одного вычисляемого поля на другое выдает некорректные значения, например, всегда «1» или «0». Разберем, почему это происходит и как правильно настроить такие расчеты.

Почему расчет в вычисляемых полях не дает нужного результата?

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

Для корректного расчета коэффициента или доли от общей суммы нам необходимо, чтобы деление происходило после того, как будут подведены итоги по группировкам.

Решение через использование ресурсов

Самый надежный способ решить данную задачу — перенести формулу расчета непосредственно в Ресурсы. В этом случае мы будем использовать агрегатные функции, такие как СУММА(), которые принудительно выполняют суммирование данных перед выполнением арифметической операции деления.

Давайте разберем по шагам, как это реализовать:

  1. Откройте настройки СКД и перейдите на вкладку Вычисляемые поля.
  2. Создайте новое поле (например, КоэффициентОклада), выражение для него оставляем пустым.
  3. Перейдите на вкладку Ресурсы.
  4. Добавьте созданное поле в список ресурсов.
  5. В колонке Выражение для этого ресурса пропишите формулу, используя агрегатные функции.

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


СУММА(ВЫБОР КОГДА Условие1 ТОГДА Сумма ИНАЧЕ 0 КОНЕЦ) /
СУММА(ВЫБОР КОГДА Условие2 ТОГДА Сумма ИНАЧЕ 0 КОНЕЦ)

Использование СУММА() вокруг каждого выражения гарантирует, что 1С сначала вычислит итоговую сумму для конкретной группировки (например, по подразделению или сотруднику), и только потом выполнит деление одной суммы на другую.

Как избежать ошибки деления на ноль

При расчете коэффициентов всегда существует риск, что знаменатель может быть равен нулю. Чтобы отчет не «падал» с ошибкой, используйте конструкцию ВЫБОР КОГДА:


ВЫБОР КОГДА СУММА(СуммаЗнаменатель) = 0 ТОГДА 0
ИНАЧЕ СУММА(СуммаЧислитель) / СУММА(СуммаЗнаменатель)
КОНЕЦ

Использование функции ВЫЧИСЛИТЬ

Если вам требуется получить коэффициент, где знаменатель — это не просто сумма по группировке, а, например, общий итог по всему отчету, используйте встроенную функцию ВЫЧИСЛИТЬ. Это позволяет избежать дублирования условий:

СУММА(СуммаПродаж) / ВЫЧИСЛИТЬ("СУММА(СуммаПродаж)", "ОбщийИтог")

Этот подход значительно упрощает поддержку отчета, так как вам не нужно копировать сложные условия ВЫБОР КОГДА в несколько разных мест настроек.

Важные советы по форматированию

Если после настройки ресурса значение отображается без дробной части или с лишними нулями, не забудьте проверить настройки Оформление для данного поля в настройках СКД:

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

← На главную