В практике управленческого учета часто возникает задача: бюджет планируется на календарный месяц, но для оперативного контроля отчетность должна выводиться в разрезе недель. При этом простое деление суммы на количество недель (например, на 4 или 5) является некорректным, так как оно не учитывает праздничные дни и фактическое количество рабочих смен. В этой статье мы подробно разберем, как реализовать механизм пропорционального распределения бюджета по рабочим дням и правильно настроить отчет в Системе компоновки данных (СКД).
Рассмотрим ситуацию: в системе есть документ планирования, где бюджет зафиксирован одной суммой на месяц (или по колонкам «Месяц 1», «Месяц 2», «Месяц 3» внутри квартала). Нам необходимо вывести отчет, в котором этот бюджет будет «размазан» по неделям месяца. Главное условие — сумма недели должна зависеть от количества рабочих дней производственного календаря, попавших в эту неделю.
Для решения нам потребуется выполнить следующие шаги:
Чтобы распределение было точным, проанализируем данные регистра сведений ДанныеПроизводственногоКалендаря. Нам нужно получить общее количество рабочих дней в выбранном месяце и количество рабочих дней для каждой недели, входящей в этот период.
Разберем логику запроса. Сначала мы определим рабочие дни в периоде отчета. Если в типовой конфигурации (например, УТ 11 или ERP) используется производственный календарь, запрос будет выглядеть следующим образом:
ВЫБРАТЬ
Календарь.Дата КАК Дата,
НАЧАЛОПЕРИОДА(Календарь.Дата, НЕДЕЛЯ) КАК ПериодНеделя,
1 КАК РабочийДень
ПОМЕСТИТЬ ВТ_РабочиеДни
ИЗ
РегистрСведений.ДанныеПроизводственногоКалендаря КАК Календарь
ГДЕ
Календарь.ВидДня В (ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий),
ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))
И Календарь.Дата МЕЖДУ &НачалоПериода И &КонецПериода
;
Этот временный набор данных позволит нам в дальнейшем точно определить «вес» каждой недели в общем месячном бюджете.
Проанализируем ситуацию, когда план хранится в регистре в разрезе месяцев. Нам нужно сопоставить таблицу рабочих дней с таблицей плановых показателей. Выясним причину, по которой обычное соединение может не сработать: неделя может начинаться в одном месяце, а заканчиваться в другом. Поэтому при расчете мы должны жестко ограничивать даты рамками планируемого месяца.
Рассмотрим пример формирования таблицы распределения:
ВЫБРАТЬ
Дни.ПериодНеделя КАК Период,
СУММА(Дни.РабочийДень) КАК РабочихДнейВНеделе,
ОбщиеДни.ВсегоРабочихДнейВМесяце КАК ВсегоДней
ПОМЕСТИТЬ ВТ_Коэффициенты
ИЗ
ВТ_РабочиеДни КАК Дни
ЛЕВОЕ СОЕДИНЕНИЕ (
ВЫБРАТЬ СУММА(РабочийДень) КАК ВсегоРабочихДнейВМесяце
ИЗ ВТ_РабочиеДни
) КАК ОбщиеДни ПО ИСТИНА
СГРУППИРОВАТЬ ПО
Дни.ПериодНеделя, ОбщиеДни.ВсегоРабочихДнейВМесяце
;
Теперь перейдем к подготовке данных для СКД. Важно помнить, что план и факт лучше собирать через ОБЪЕДИНИТЬ ВСЕ, чтобы избежать потери данных при отсутствии фактических движений. Посмотрим на структуру запроса, предложенную в обсуждении на форуме, и оптимизируем ее.
Для выбора нужного месяца из квартального планирования мы используем конструкцию ВЫБОР КОГДА. Это позволяет динамически определять, какую колонку ресурса (Месяц1, Месяц2 или Месяц3) брать в расчет в зависимости от параметра &Месяц.
ВЫБРАТЬ
План.СтатьяДДС КАК СтатьяДДС,
План.Подразделение КАК Подразделение,
ВТ_Коэффициенты.Период КАК Период,
(ВЫБОР
КОГДА МЕСЯЦ(&Месяц) В (1, 4, 7, 10) ТОГДА План.Месяц1
КОГДА МЕСЯЦ(&Месяц) В (2, 5, 8, 11) ТОГДА План.Месяц2
ИНАЧЕ План.Месяц3
КОНЕЦ) * (ВТ_Коэффициенты.РабочихДнейВНеделе / ВТ_Коэффициенты.ВсегоДней) КАК СуммаПлан,
0 КАК СуммаФакт
ИЗ
РегистрНакопления.ГАФ_ПланированиеБюджета КАК План
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Коэффициенты ПО ИСТИНА
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
Факт.СтатьяДвиженияДенежныхСредств,
Факт.Подразделение,
НАЧАЛОПЕРИОДА(Факт.Период, НЕДЕЛЯ),
0,
Факт.СуммаОборот
ИЗ
РегистрНакопления.ДвиженияДенежныхСредств.Обороты(&НачалоПериода, &КонецПериода, Неделя, ) КАК Факт
Многие разработчики сталкиваются с тем, что при добавлении новых полей в настройки СКД отчет «ломается» или колонки отображаются некорректно. Чтобы этого избежать, придерживайтесь следующих правил настройки кросс-таблицы:
Подразделение и СтатьяДДС. В колонках добавьте группировку по полю Период.&НачалоПериода и &КонецПериода.ИмяНедели с выражением:
"Неделя " + Строка(Целое((День(Период) + ДеньНедели(НачалоПериода(Период, "МЕСЯЦ")) - 2) / 7) + 1)
Для корректного план-фактного анализа в ресурсах СКД необходимо определить три поля:
СуммаПлан — выражение Сумма(СуммаПлан).СуммаФакт — выражение Сумма(СуммаФакт).Отклонение — выражение Сумма(СуммаПлан) - Сумма(СуммаФакт).Важный нюанс: при расчете ресурсов убедитесь, что поле Период входит в список рассчитываемых измерений, иначе агрегатные функции могут выдать неверный результат при иерархических группировках.
Мы проанализировали процесс трансформации месячного бюджета в недельный отчет. Ключом к успеху здесь является использование производственного календаря для вычисления весовых коэффициентов. Использование виртуальных таблиц с периодичностью Неделя в сочетании с механизмом дополнения периодов в СКД позволяет создать гибкий и надежный инструмент для финансового контроля. Помните, что корректная подготовка данных в запросе (объединение наборов) избавляет от большинства проблем с настройкой внешнего вида отчета.