Как в СКД рассчитать коэффициент отношения текущего месяца к предыдущему?

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

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

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

Это наиболее современный и эффективный метод, который позволяет выполнять вычисления «на лету» без усложнения основного запроса. Функция ВычислитьВыражение позволяет обращаться к значениям других группировок или строк. Разберем по шагам, как настроить расчет коэффициента в поле «Ресурсы».

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


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

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

  1. "Сумма(Количество)" — агрегатное выражение, которое мы хотим вычислить.
  2. "Месяц" — имя группировки, в разрезе которой происходит смещение (название поля из настроек СКД).
  3. "Группировка" — область поиска данных (указываем, что расчет идет внутри текущей группировки).
  4. "Предыдущая", "Предыдущая" — начальная и конечная записи диапазона. Указывая оба раза «Предыдущая», мы сообщаем системе, что нужно взять значение ровно из одной предыдущей ячейки.

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


ВЫБОР 
    КОГДА ВычислитьВыражение("Сумма(Количество)", "Месяц", "Группировка", "Предыдущая", "Предыдущая") > 0 
    ТОГДА Сумма(Количество) / ВычислитьВыражение("Сумма(Количество)", "Месяц", "Группировка", "Предыдущая", "Предыдущая") 
    ИНАЧЕ 0 
КОНЕЦ

Способ 2: Настройка кросс-таблицы

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

Чтобы коэффициент считался строго по горизонтали (по месяцам внутри категории товара), выполним следующие действия:

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

Способ 3: Использование связей наборов данных (через запрос)

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

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

В настройках «Связи наборов данных» укажем следующее условие:


Источник связи: ОсновнойНабор
Приемник связи: ПредыдущийПериод
Условие связи: ОсновнойНабор.Категория = ПредыдущийПериод.Категория 
               И ОсновнойНабор.Месяц = ДобавитьКДате(ПредыдущийПериод.Месяц, "МЕСЯЦ", 1)

После такой настройки в каждой строке ОсновногоНабора нам станет доступно поле ПредыдущийПериод.Количество. Теперь расчет коэффициента превращается в простую арифметику в поле «Вычисляемые поля» или в ресурсах:

ЕстьNull(Количество, 0) / ЕстьNull(КоличествоПрошлыйМесяц, 1)

Способ 4: Расчет относительно базисного периода

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

Посмотрим на пример выражения:


Сумма(Количество) / ВычислитьВыражение("Сумма(Количество)", "Месяц", "Группировка", "Первая", "Первая")

Использование ключевого слова "Первая" заставит систему всегда брать значение из самой первой колонки текущей строки, что позволит построить график роста относительно начала года.

Рекомендации по оформлению

Чтобы отчет был читаемым, рекомендуем применить следующие настройки оформления для вычисляемого коэффициента:

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

← На главную