Как 1С:ЗУП 3.1 рассчитывает остатки дополнительных отпусков при изменении прав в середине месяца

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

При работе в программе «1С:Зарплата и управление персоналом» (редакция 3.1) кадровые специалисты часто сталкиваются с ситуацией, когда при изменении количества дней дополнительного отпуска сотрудника в середине рабочего месяца программа рассчитывает остатки не так, как ожидается на бумаге. Например, при изменении нормы отпуска с 8 до 24 дней в середине рабочего года сотрудник может мгновенно «получить» лишние дни отпуска в ближайшем отчете по остаткам.

В этой статье мы подробно разберем, по какому алгоритму программа рассчитывает права на отпуск «под капотом», почему возникает такая разница и как правильно отразить подобные изменения в программе без ущерба для учета.

Почему программа начисляет «лишние» дни: разбираем внутренний алгоритм

Давайте проанализируем математику расчета на конкретном примере. Сотрудник принят на работу 23 октября 2019 года. Ему положено 28 дней основного отпуска и 8 дней дополнительного. С 3 марта 2020 года количество дней дополнительного отпуска увеличивают до 24 дней. Формируя отчет по остаткам на 6 марта 2020 года, пользователь видит, что программа уже начислила сотруднику новые дни в полном объеме за текущий месяц.

Выясним причину такого поведения системы. В 1С:ЗУП 3.1 начисление прав на отпуск привязано к индивидуальному рабочему году сотрудника, который делится на рабочие месяцы. Для нашего сотрудника рабочий месяц длится с 23-го числа текущего месяца по 22-е число следующего месяца.

Программа производит начисление очередного месячного «кусочка» отпуска не ежедневно, а при прохождении определенной контрольной точки. Эта контрольная точка наступает, когда сотрудник отрабатывает более половины рабочего месяца (то есть проходит порог в 15 календарных дней от начала рабочего месяца):

  1. Для рабочего месяца с 23 октября по 22 ноября контрольная точка наступает приблизительно 6-7 ноября. В этот момент сотруднику начисляется $8 / 12 = 0,67$ дня дополнительного отпуска.
  2. К началу пятого рабочего месяца (период с 23 февраля по 22 марта) сотрудник накопил: $0,67 \text{ (за 1-й мес.)} + 0,67 \text{ (за 2-й мес.)} + 0,67 \text{ (за 3-й мес.)} + 0,67 \text{ (за 4-й мес.)} = 2,67$ дня отпуска.
  3. Очередная контрольная точка для пятого рабочего месяца приходится на 6 марта.
  4. 3 марта (до наступления контрольной точки) документом изменяется норма дополнительного отпуска до 24 дней в год. Новый ежемесячный заработанный лимит теперь составляет $24 / 12 = 2$ дня в месяц.
  5. Когда наступает 6 марта, программа обращается к регистру сведений и видит, что на дату контрольной точки у сотрудника действует норма в 24 дня. Механизм пропорционального деления дней внутри одного месяца в программе не предусмотрен. Поэтому за весь текущий месяц (с 23 февраля по 22 марта) система начисляет полные 2 дня по новой ставке.

В результате на 6 марта остаток составляет: $2,67 \text{ (накоплено ранее)} + 2 \text{ (за текущий месяц)} = 4,67$ дня. Сотрудник получает выгоду, так как за период с 23 февраля по 2 марта ему начислили отпуск исходя из новой, более высокой нормы.

---

Варианты корректного отражения изменений в программе

Если специфика вашего учета требует точного расчета и исключает любые «подарки» сотрудникам в виде авансового начисления дней, рассмотрим три практических способа решения этой задачи.

Способ 1. Административный перенос даты изменения прав

Самый простой способ избежать переплат без ручных расчетов — регистрировать кадровое изменение (документом Кадровый перевод или изменением прав на отпуск) строго на следующий день после прохождения контрольной точки текущего рабочего месяца.

В нашем примере контрольная точка за рабочий месяц с 23 февраля по 22 марта приходится на 6 марта. Поступим следующим образом:

  1. Дожидаемся наступления 6 марта. Программа автоматически начисляет сотруднику 0,67 дня по старой норме (8 дней в год).
  2. С 7 марта регистрируем изменение прав на отпуск до 24 дней в год.
  3. В следующую контрольную точку (6 апреля) программа начислит полноценные 2 дня уже по новым правилам.

При таком подходе сотрудник не теряет заработанные дни и не получает лишнего.

Способ 2. Использование документа «Ввод остатков отпусков» для фиксации периода

Если изменить дату кадрового события невозможно, мы можем зафиксировать остатки вручную на дату изменения прав. Документ Ввод остатков отпусков позволяет принудительно «перекрыть» автоматические алгоритмы программы.

Разберем этот вариант по шагам:

  1. Рассчитаем остаток отпуска сотрудника вручную на дату изменения прав (3 марта). Нам нужно высчитать точное пропорциональное количество дней за отработанное время с начала рабочего года по старой ставке.
  2. Создаем документ Ввод остатков отпусков с датой 3 марта 2020 года.
  3. В табличной части документа фиксируем рассчитанные вручную остатки по старому виду отпуска.
  4. В этом же документе (или в кадровом переводе) прекращаем действие старого отпуска и назначаем сотруднику новый вид дополнительного отпуска с нормой 24 дня, установив для него дату начала рабочего года с 3 марта 2020 года.

В результате программа начнет отсчет по новому отпуску строго с 3 марта, а накопленный ранее баланс будет заморожен и сохранен.

Способ 3. Автоматизация для организаций с частым изменением условий (плавсостав)

Для крупных компаний (например, судоходных или промышленных предприятий со штатом более 500 человек), где сотрудники постоянно меняют районы работы, судна и условия вредности, ручной ввод документов по каждому изменению невозможен. В этом случае типовой механизм ЗУП 3.1 требует доработки.

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

Ниже приведен пример концептуального кода на языке 1С для автоматического создания и заполнения документа ввода остатков отпусков:


// Создание документа ввода остатков программным путем
НовыйДокумент = Документы.ВводОстатковОтпусков.СоздатьДокумент();
НовыйДокумент.Дата = РабочаяДата;
НовыйДокумент.Организация = ВыбраннаяОрганизация;
НовыйДокумент.Сотрудник = ТекущийСотрудник;
НовыйДокумент.ДатаОстатков = ДатаИзмененияПрав;

// Заполнение табличной части остатков отпусков
НоваяСтрока = НовыйДокумент.ЕжегодныеОтпуска.Добавить();
НоваяСтрока.ВидОтпуска = Справочники.ВидыОтпусков.НайтиПоНаименованию("Дополнительный отпуск");
НоваяСтрока.КоличествоДней = РассчитанныйВручнуюОстаток;
НоваяСтрока.РабочийГодНачало = ДатаНачалаРабочегоГода;
НоваяСтрока.РабочийГодОкончание = ДатаОкончанияРабочегоГода;

// Запись и проведение документа
Попытка
    НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
Исключение
    Сообщить("Ошибка проведения документа по сотруднику " + ТекущийСотрудник);
КонецПопытки;

Использование программного формирования документов позволяет оперативно актуализировать данные по сотням сотрудников без риска допустить механическую ошибку при ручном расчете.

← На главную