При работе в программе 1С:Зарплата и управление персоналом 8.3 (редакция 3.1) пользователи часто сталкиваются с ситуацией, когда типовые отчеты по численности выводят избыточные данные. Типичный пример: сотрудник сменил должность в середине отчетного периода (например, перевелся с позиции врача-терапевта на административную должность). При формировании отчета «Численность и текучесть кадров» с фильтром по старой должности «Терапевт», программа продолжает включать этого сотрудника в отчет даже в те месяцы, когда он уже занимал другую позицию. Это приводит к завышению списочной численности и искажению кадровой статистики.
В этой статье мы подробно разберем, почему возникает такая ошибка, проанализируем механизм работы системы компоновки данных (СКД) и пошагово настроим отчет так, чтобы он выдавал верные результаты.
Для начала выясним причину такого поведения программы. Большинство кадровых отчетов в 1С:ЗУП построены на базе Системы компоновки данных (СКД). Когда мы устанавливаем отбор по должности на самом верхнем уровне (в шапке отчета или в основных настройках), система интерпретирует это условие глобально для всей выборки данных за период.
Рассмотрим ситуацию: отчет формируется за полугодие. Сотрудник был терапевтом с января по апрель, а в мае перевелся. Если мы ставим условие Должность Равно "Терапевт" на уровне всего отчета, СКД находит записи, соответствующие этому условию. Поскольку сотрудник хотя бы раз за указанный период занимал эту должность, он попадает в итоговый набор данных. Далее отчет начинает распределять данные по месяцам, и из-за особенностей архитектуры запроса в старых релизах (таких как 3.1.10) или специфических настроек группировок, строка сотрудника может «продублироваться» в последующие месяцы, так как он уже прошел «входной фильтр» отчета.
Проанализируем технический нюанс: отчет оперирует срезами данных на разные даты. Если отбор наложен на весь отчет, он может срабатывать как «жесткое» ограничение выборки сотрудников, а не как фильтр конкретных состояний в конкретном месяце. Чтобы исправить это, нам нужно применить механизм «тонкой фильтрации».
Как выяснилось в ходе обсуждения проблемы, наиболее эффективным способом является перенос фильтра по должности непосредственно в группировку по сотрудникам. Это заставит программу проверять соответствие должности для каждой строки сотрудника отдельно в каждом периоде.
Рассмотрим алгоритм действий подробно:
Сотрудник.Сотрудник, добавим новый элемент отбора: поле Должность, вид сравнения Равно, значение — нужная нам должность (например, Терапевт).После таких манипуляций отчет будет работать следующим образом: система сначала соберет все данные за период, а затем при выводе каждой строки по сотруднику проверит — занимает ли он указанную должность в конкретном месяце. Если в мае сотрудник уже не терапевт, условие на уровне группировки не выполнится, и данные в ячейку этого месяца не попадут.
Чтобы окончательно убедиться в корректности данных, мы можем настроить временную группировку, которая наглядно покажет движение сотрудника. Рассмотрим, как это сделать:
Сотрудник, а под ним — Должность.При настройке отчетов по численности стоит обратить внимание на следующие моменты, которые могут влиять на результат:
1. Использование периодических показателей. В расширенных настройках СКД иногда доступны поля типа Должность (на конец периода) или Должность (периодический показатель). Если типовой отбор не срабатывает даже внутри группировки, попробуйте поискать в доступных полях те, которые явно привязаны к дате среза.
2. История штатного расписания. Если в вашей базе ведется история штатного расписания, убедитесь, что документ «Кадровый перевод» не только изменил должность сотрудника, но и корректно отразил изменение позиции штатного расписания. Если позиция осталась прежней (изменилось только название должности в справочнике без фиксации перевода), отчет может продолжать «тянуть» старые данные.
3. Сброс настроек. Если вы долго экспериментировали с настройками и отчет начал выдавать «ерунду» (как выразился автор вопроса), рекомендуется выполнить полный сброс: Кнопка "Еще" — Установить стандартные настройки. После этого повторите настройку фильтра внутри группировки с чистого листа.
4. Особенности релиза. В старых релизах (линейка 3.1.10 и ранее) встречались ошибки в текстах запросов типовых отчетов, когда данные «залипали» на начало периода. Если перевод сотрудника был выполнен первым числом месяца (01.05), попробуйте для проверки сформировать отчет не за полугодие, а отдельно за май. Если в отдельном отчете за май сотрудника-терапевта нет, значит, проблема именно в механизме «сворачивания» данных за длительный период, который лечится именно описанным выше способом (настройкой отбора на уровне группировки).
Мы выяснили, что для получения корректной списочной численности по конкретной должности при наличии кадровых переводов внутри периода, нельзя полагаться на стандартный фильтр в шапке отчета.
Главное правило настройки: устанавливайте отбор по должности на уровне группировки Сотрудник. Это гарантирует, что программа будет анализировать должность сотрудника в каждом конкретном периоде (месяце) отчета отдельно, а не проверять его «вхождение» в список терапевтов за весь год разом. Такой подход является универсальным для многих отчетов в 1С:ЗУП 3.1, построенных на СКД, включая отчеты по штатным сотрудникам и анализу кадрового состава.