Как в СКД объединить план и факт продаж в одном отчете с расчетом среднего и процентов?

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

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

Шаг 1. Подготовка запроса и объединение источников данных

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

Наиболее надежный и производительный способ решения задачи — сборка единого набора данных через конструкцию ОБЪЕДИНИТЬ ВСЕ в запросе. При таком подходе строки автоматически свернутся по общим группировкам на уровне СКД. Рассмотрим текст запроса для набора данных:


ВЫБРАТЬ
    ПродажиОбороты.Контрагент КАК Контрагент,
    ПродажиОбороты.Период КАК Период,
    ПродажиОбороты.СтоимостьОборот КАК СуммаФакт,
    0 КАК СуммаПлан
ИЗ
    РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, Месяц, ) КАК ПродажиОбороты

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ПланПродаж.Контрагент КАК Контрагент,
    НАЧАЛОПЕРИОДА(ПланПродаж.Период, МЕСЯЦ) КАК Период,
    0 КАК СуммаФакт,
    ПланПродаж.Сумма КАК СуммаПлан
ИЗ
    РегистрСведений.ПланПродаж КАК ПланПродаж
ГДЕ
    ПланПродаж.Период МЕЖДУ &ДатаНач И &ДатаКон

Обратим внимание на синхронизацию периодов: даты записей из обоих регистров должны быть строго приведены к единой точке времени — началу месяца (01.ММ.ГГГГ 00:00:00). Для регистра сведений обязательно используем функцию НАЧАЛОПЕРИОДА(ПланПродаж.Период, МЕСЯЦ), иначе СКД разнесет фактические и плановые показатели в разные колонки отчета.

Шаг 2. Настройка параметров отчета

Для корректного захвата данных за весь выбранный интервал необходимо правильно настроить параметры виртуальных таблиц:

  1. Для параметра &ДатаНач устанавливаем выражение НАЧАЛОПЕРИОДА(&ПериодОтчета.ДатаНачала, "МЕСЯЦ").
  2. Для параметра &ДатаКон устанавливаем выражение КОНЕЦПЕРИОДА(&ПериодОтчета.ДатаОкончания, "ДЕНЬ"), чтобы движения за последние сутки вошли в выборку целиком.
  3. Добавим дополнительный расчетный параметр &КоличествоМесяцев, который понадобится для вычисления среднего: РАЗНОСТЬДАТ(&ДатаНач, &ДатаКон, "МЕСЯЦ") + 1

Шаг 3. Настройка ресурсов и формул расчета показателей

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

Настроим расчет ресурсов с помощью точных выражений:

  1. Поле СуммаФакт: Сумма(СуммаФакт)
  2. Поле СуммаПлан: Сумма(СуммаПлан)
  3. Поле СреднееФакт (вычисляемое поле или ресурс): Сумма(СуммаФакт) / &КоличествоМесяцев
  4. Поле ПроцентВыполнения:
    
    ВЫБОР 
        КОГДА Сумма(СуммаПлан) = 0 ТОГДА 0 
        ИНАЧЕ (Сумма(СуммаФакт) / Сумма(СуммаПлан)) * 100 
    КОНЕЦ
    
  5. Поле Отклонение: Сумма(СуммаФакт) - Сумма(СуммаПлан)

Шаг 4. Формирование структуры отчета в виде таблицы

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

  1. Добавляем в структуру элемент Таблица.
  2. В раздел Строки таблицы добавляем группировку Контрагент (при необходимости включаем тип группировки «Иерархия»).
  3. В раздел Колонки таблицы добавляем две независимые ветки:
    1. Первая ветка колонок: создаем группировку по полю Период. В окне «Выбранные поля» для этой ветки оставляем исключительно поле СуммаФакт. Это позволит вывести помесячные продажи в виде динамического ряда.
    2. Вторая ветка колонок: создаем группировку без указания поля (общая колонка). В ее «Выбранные поля» помещаем итоговые расчетные ресурсы: СреднееФакт, СуммаПлан, СуммаФакт, Отклонение и ПроцентВыполнения.

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

← На главную