Почему ЗУП 3.1 неправильно считает остатки отпуска при увольнении после ввода начальных данных?

Программист 1С v8.3 (Управляемые формы)
← На главную

При переходе с версии ЗУП 2.5 на ЗУП 3.1 многие пользователи сталкиваются с неприятной ситуацией: после ввода начальных остатков отпусков программа начинает «странно» считать дни компенсации при увольнении. Например, вы вводите остаток 2.33 дня на начало года, сотрудник увольняется в середине февраля, и вместо ожидаемых 7 дней (2.33 за прошлый год + 2.33 за январь + 2.33 за февраль) система упорно выдает 4.67 или иные цифры. Давайте подробно разберем, почему это происходит и как настроить систему для корректного расчета.

Различие в алгоритмах: ЗУП 2.5 против ЗУП 3.1

Для начала проанализируем корень проблемы. В ЗУП 2.5 расчет остатков строился по принципу «от документов». Система смотрела на фактические отпуска и считала разницу. В ЗУП 3.1 используется принципиально иной, более сложный механизм прогнозирования прав. Ключевым объектом здесь является регистр накопления ЗаработанныеПраваНаОтпуск.

Система не просто суммирует дни, она создает «засечки» (срезы) на определенные даты, соответствующие окончанию рабочего месяца сотрудника. Право на очередные 2.33 дня возникает не 1-го числа календарного месяца, а в день завершения месяца рабочего года. Если рабочий год сотрудника начался 18 мая, то право на очередной месяц отпуска зачтется только 17 числа следующего месяца.

Критическая важность даты ввода остатков: 31.12 или 01.01?

Одной из самых частых ошибок является ввод начальных остатков датой 01.01.2022. Проанализируем, как это видит программа:

  1. Если вы указываете дату 01.01.2022, система считает, что на начало дня 1 января у сотрудника уже есть зафиксированный остаток.
  2. При расчете прав за январь программа может «пропустить» накопление за текущий рабочий месяц, так как точка отсчета установлена слишком поздно.
  3. Решение: всегда вводите документ ВводНачальныхОстатковОтпусков датой 31.12.2021 (последний день предыдущего периода). В этом случае программа корректно «подхватывает» непрерывный стаж и правильно выстраивает цепочку прав в регистре ЗаработанныеПраваНаОтпуск с первого дня нового года.

Влияние отсутствий и смещение рабочего года

Рассмотрим ситуацию, когда у сотрудника были отпуска без сохранения оплаты. Согласно ст. 121 ТК РФ, отпуска за свой счет свыше 14 дней за рабочий год отодвигают дату окончания рабочего года. В ЗУП 3.1 это реализовано динамически.

Если в ЗУП 2.5 этот сдвиг часто учитывался только справочно, то в 3.1 он напрямую влияет на даты в регистре ЗаработанныеПраваНаОтпуск. Если из-за прогула или отпуска «за свой счет» рабочий месяц закончился не 17-го, а 21-го числа, и вы увольняете сотрудника 20-го — он потеряет 2.33 дня за этот месяц, так как месяц не будет считаться отработанным (если не набралось 15 дней стажа для округления).

Выясним причину расхождений через анализ регистра. Для этого выполните следующие шаги:

  1. Перейдите в меню «Функции для технического специалиста».
  2. Найдите регистр накопления ЗаработанныеПраваНаОтпуск.
  3. Отфильтруйте записи по конкретному сотруднику.
  4. Посмотрите на колонку «Дата». Если даты «засечек» не совпадают с вашими ожиданиями, значит, рабочий год сместился из-за документов отсутствия.

Правило 11 месяцев и округление

Проанализируем еще одну тонкость: ЗУП 3.1 умеет применять правило, по которому сотрудник, отработавший 11 месяцев в рабочем году, получает полную компенсацию за 28 дней. Иногда это приводит к тому, что при увольнении в 11-м месяце программа начисляет «лишние» дни, чтобы дотянуть остаток до полного года. Это не ошибка, а реализация алгоритмов законодательства, которые в версии 2.5 могли не срабатывать автоматически.

Как «подогнать» остатки вручную, если ничего не помогает

Если после изменения даты ввода на 31.12 и проверки всех отсутствий результат вас всё равно не устраивает, можно воспользоваться механизмом корректировки. Рассмотрим два варианта:

Вариант 1: Использование документа «Корректировка остатков отпусков»

Этот документ позволяет принудительно установить нужное количество дней на определенную дату. Однако будьте осторожны: если ввести корректировку «в середине» рабочего года, последующие автоматические расчеты системы могут снова дать дробные значения, которые вам покажутся неверными.

Вариант 2: Детализация вводе остатков

Вместо того чтобы вводить остаток одной строкой за всё время работы, разбейте его по рабочим годам внутри документа ВводНачальныхОстатковОтпусков. Посмотрим на пример:

Если сотрудник работает с 2019 года, создайте несколько строк:

Такая детализация помогает программному коду УчетОтпусков более точно определить границы текущего периода и применить правила округления при увольнении.

Практические советы при проверке

Для программиста, пытающегося отладить этот механизм, полезно будет взглянуть на то, как система формирует таблицу прав. В коде конфигурации за это отвечают модули, работающие с запросами к регистру ЗаработанныеПраваНаОтпуск. Посмотрим на упрощенную логику запроса, которую можно использовать в консоли отчетов для проверки:


ВЫБРАТЬ
    ЗаработанныеПрава.Сотрудник,
    ЗаработанныеПрава.Дата,
    ЗаработанныеПрава.КоличествоДней,
    ЗаработанныеПрава.ВидЕжегодногоОтпуска
ИЗ
    РегистрСведений.ЗаработанныеПраваНаОтпуск КАК ЗаработанныеПрава
ГДЕ
    ЗаработанныеПрава.Сотрудник = &Сотрудник
УПОРЯДОЧИТЬ ПО
    ЗаработанныеПрава.Дата

Резюме: Если ЗУП 3.1 считает остатки не так, как вы привыкли в 2.5, первым делом проверьте дату документа ввода остатков (ставьте 31.12) и проанализируйте рабочий год сотрудника с учетом всех отсутствий. Помните, что 3.1 ориентируется на рабочие месяцы, а не на календарные, и это — главная причина большинства «ошибок».

← На главную