При переходе с версии ЗУП 2.5 на ЗУП 3.1 многие пользователи сталкиваются с неприятной ситуацией: после ввода начальных остатков отпусков программа начинает «странно» считать дни компенсации при увольнении. Например, вы вводите остаток 2.33 дня на начало года, сотрудник увольняется в середине февраля, и вместо ожидаемых 7 дней (2.33 за прошлый год + 2.33 за январь + 2.33 за февраль) система упорно выдает 4.67 или иные цифры. Давайте подробно разберем, почему это происходит и как настроить систему для корректного расчета.
Для начала проанализируем корень проблемы. В ЗУП 2.5 расчет остатков строился по принципу «от документов». Система смотрела на фактические отпуска и считала разницу. В ЗУП 3.1 используется принципиально иной, более сложный механизм прогнозирования прав. Ключевым объектом здесь является регистр накопления ЗаработанныеПраваНаОтпуск.
Система не просто суммирует дни, она создает «засечки» (срезы) на определенные даты, соответствующие окончанию рабочего месяца сотрудника. Право на очередные 2.33 дня возникает не 1-го числа календарного месяца, а в день завершения месяца рабочего года. Если рабочий год сотрудника начался 18 мая, то право на очередной месяц отпуска зачтется только 17 числа следующего месяца.
Одной из самых частых ошибок является ввод начальных остатков датой 01.01.2022. Проанализируем, как это видит программа:
ВводНачальныхОстатковОтпусков датой 31.12.2021 (последний день предыдущего периода). В этом случае программа корректно «подхватывает» непрерывный стаж и правильно выстраивает цепочку прав в регистре ЗаработанныеПраваНаОтпуск с первого дня нового года.Рассмотрим ситуацию, когда у сотрудника были отпуска без сохранения оплаты. Согласно ст. 121 ТК РФ, отпуска за свой счет свыше 14 дней за рабочий год отодвигают дату окончания рабочего года. В ЗУП 3.1 это реализовано динамически.
Если в ЗУП 2.5 этот сдвиг часто учитывался только справочно, то в 3.1 он напрямую влияет на даты в регистре ЗаработанныеПраваНаОтпуск. Если из-за прогула или отпуска «за свой счет» рабочий месяц закончился не 17-го, а 21-го числа, и вы увольняете сотрудника 20-го — он потеряет 2.33 дня за этот месяц, так как месяц не будет считаться отработанным (если не набралось 15 дней стажа для округления).
Выясним причину расхождений через анализ регистра. Для этого выполните следующие шаги:
ЗаработанныеПраваНаОтпуск.Проанализируем еще одну тонкость: ЗУП 3.1 умеет применять правило, по которому сотрудник, отработавший 11 месяцев в рабочем году, получает полную компенсацию за 28 дней. Иногда это приводит к тому, что при увольнении в 11-м месяце программа начисляет «лишние» дни, чтобы дотянуть остаток до полного года. Это не ошибка, а реализация алгоритмов законодательства, которые в версии 2.5 могли не срабатывать автоматически.
Если после изменения даты ввода на 31.12 и проверки всех отсутствий результат вас всё равно не устраивает, можно воспользоваться механизмом корректировки. Рассмотрим два варианта:
Этот документ позволяет принудительно установить нужное количество дней на определенную дату. Однако будьте осторожны: если ввести корректировку «в середине» рабочего года, последующие автоматические расчеты системы могут снова дать дробные значения, которые вам покажутся неверными.
Вместо того чтобы вводить остаток одной строкой за всё время работы, разбейте его по рабочим годам внутри документа ВводНачальныхОстатковОтпусков. Посмотрим на пример:
Если сотрудник работает с 2019 года, создайте несколько строк:
Такая детализация помогает программному коду УчетОтпусков более точно определить границы текущего периода и применить правила округления при увольнении.
Для программиста, пытающегося отладить этот механизм, полезно будет взглянуть на то, как система формирует таблицу прав. В коде конфигурации за это отвечают модули, работающие с запросами к регистру ЗаработанныеПраваНаОтпуск. Посмотрим на упрощенную логику запроса, которую можно использовать в консоли отчетов для проверки:
ВЫБРАТЬ
ЗаработанныеПрава.Сотрудник,
ЗаработанныеПрава.Дата,
ЗаработанныеПрава.КоличествоДней,
ЗаработанныеПрава.ВидЕжегодногоОтпуска
ИЗ
РегистрСведений.ЗаработанныеПраваНаОтпуск КАК ЗаработанныеПрава
ГДЕ
ЗаработанныеПрава.Сотрудник = &Сотрудник
УПОРЯДОЧИТЬ ПО
ЗаработанныеПрава.Дата
Резюме: Если ЗУП 3.1 считает остатки не так, как вы привыкли в 2.5, первым делом проверьте дату документа ввода остатков (ставьте 31.12) и проанализируйте рабочий год сотрудника с учетом всех отсутствий. Помните, что 3.1 ориентируется на рабочие месяцы, а не на календарные, и это — главная причина большинства «ошибок».