При формировании кадровых отчетов по расчету среднесписочной численности (ССЧ) за календарный год пользователи и разработчики нередко сталкиваются с ситуацией, когда итоговый показатель рассчитывается некорректно. Например, если подразделение или организация вели деятельность не полный год (или в последние месяцы года все сотрудники были уволены), система делит сумму среднемесячной численности не на 12 месяцев расчетного периода, а только на количество месяцев, в которых фактически присутствовали сотрудники.
Разберем методологические требования к расчету, выясним техническую причину такого поведения отчетов на базе Системы компоновки данных (СКД) и рассмотрим по шагам, как исправить расчет.
Согласно указаниям Росстата по заполнению форм федерального статистического наблюдения, расчет среднесписочной численности строится по следующим правилам:
Проанализируем работу механизма Системы компоновки данных. В большинстве кадровых отчетов для расчета итоговой строки по группировкам на вкладке «Ресурсы» схемы компоновки данных разработчиками по умолчанию указывается агрегатная функция Среднее(...):
Среднее(СреднесписочнаяЧисленность)
Логика работы функции Среднее() в СКД заключается в вычислении среднего арифметического исключительно по тем строкам выборки, которые вернул запрос. Если по подразделению в октябре, ноябре и декабре кадровых движений и сотрудников не было, запрос не возвращает строк за эти периоды. В результате в выборке присутствуют только 9 записей (с января по сентябрь), и функция Среднее() находит сумму за 9 месяцев и делит её на 9, полностью игнорируя месяцы с нулевыми показателями.
Рассмотрим самый быстрый способ исправления в схеме компоновки данных без переписывания тела основного запроса. Для этого перейдем в конфигураторе или через консоль отчетов на вкладку «Ресурсы».
Вместо стандартного вызова функции Среднее() настроим явный расчет через суммирование показателей и деление на количество месяцев.
Если отчет формируется строго за один календарный год, выражение для поля ресурса в строке общих итогов можно задать следующим образом:
Сумма(СреднесписочнаяЧисленность) / 12
Если же отчет универсальный и формируется за произвольный период, определяемый параметрами &ПериодНачала и &ПериодОкончания, воспользуемся расчетным выражением с функцией РазностьДат:
Сумма(СреднесписочнаяЧисленность) / (РазностьДат(&ПериодНачала, &ПериодОкончания, "Месяц") + 1)
В этом случае в итоговой строке сумма среднемесячной численности будет разделена на реальное число месяцев в выбранном интервале, независимо от того, сколько строк вернул кадровый срез.
Другой подход заключается в обеспечении гарантированного присутствия всех периодов в результирующей выборке. Для этого доработаем запрос СКД:
ЛЕВОЕ СОЕДИНЕНИЕ.ЕСТЬNULL(ТаблицаКадров.Численность, 0).При таком подходе запрос вернет ровно 12 строк (для месяцев без сотрудников значение ресурса будет равно нулю), и стандартная агрегатная функция СКД Среднее(СреднесписочнаяЧисленность) отработает абсолютно корректно.
Обратим внимание, что в регламентированной статистической отчетности (в частности, в форме П-4 и годовых формах статистики) расчет среднесписочной численности реализован во встроенном программном коде регламентированных отчетов. Там деление на 12 для годовых срезов заложено на уровне алгоритма заполнения, поэтому различия в значениях между произвольным кадровым отчетом на СКД и утвержденной статотчетностью чаще всего вызваны именно описанной настройкой ресурсов СКД.