Разберем распространенную ситуацию в конфигурации 1С:Зарплата и Управление Персоналом (ЗУП 2.5), когда при расчете среднего заработка программа некорректно определяет количество календарных дней за прошлые периоды. Основная сложность заключается в поведении виртуальной таблицы ФактическийПериодДействия, которая «отказывается» видеть вытесняющие записи, введенные более поздним месяцем регистрации.
Проанализируем ситуацию: сотрудник болел в апреле, но предоставил больничный лист только в мае. Документ «Больничный лист» проводится в мае (период регистрации — май), но его период действия относится к апрелю. При расчете среднего заработка, например, в августе, система обращается к виртуальной таблице ФактическийПериодДействия за апрель. Выясним, почему вытеснение не отрабатывает автоматически:
ФактическийПериодДействия всегда будет равен полному периоду действия, независимо от наличия других документов.Одним из самых надежных способов решения задачи является отказ от виртуальной таблицы в пользу прямой работы с физической таблицей регистра расчета ОсновныеНачисленияРаботниковОрганизаций. Рассмотрим, как это реализовать:
Вместо обращения к ФактическийПериодДействия, мы можем составить запрос к основной таблице регистра. В условии запроса необходимо указать фильтр по сотруднику и интересующему нас ПериодДействия (апрель), полностью игнорируя ПериодРегистрации. Таким образом, мы увидим все записи, которые «претендуют» на время в апреле: и основной оклад, и больничный, зарегистрированный в мае.
Если нам необходимо получить корректные данные через стандартные механизмы, проанализируем наличие сторно-записей. Для этого следует обращать внимание на записи с отрицательным результатом. В ЗУП 2.5 корректный расчет календарных дней часто опирается на то, что записи сторно уменьшают время, отработанное в прошлом периоде.
Посмотрим на пример логики: при получении данных о фактически отработанном времени за апрель, мы должны просуммировать записи, период действия которых попадает в апрель, включая те, что были зарегистрированы в мае (сторно). Это позволит вычислить реальное количество дней отсутствия.
Для целей расчета среднего заработка в ЗУП 2.5 часто эффективнее использовать не регистры расчета, а регистр сведений СостояниеРаботниковОрганизаций. Проанализируем, почему это удобно:
Если вы все же используете виртуальную таблицу ФактическийПериодДействия, необходимо убедиться, что параметры запроса не ограничивают выборку только одним периодом регистрации. Разберем по шагам:
ПериодДействия.Перерасчеты (основные начисления). Если их нет, механизм вытеснения может не сработать.При написании запроса для получения данных о фактически отработанных днях, рекомендуем использовать конструкцию, объединяющую данные из начислений и данные о сторнировании. Это гарантирует, что «майский» больничный уменьшит «апрельские» дни. Используйте ВЫБРАТЬ РАЗРЕШЕННЫЕ и всегда проверяйте настройки приоритетов видов расчета в плане видов расчета ОсновныеНачисления, так как одинаковый приоритет блокирует вытеснение.