Почему в 1С:ЗУП при расчете дополнительного отпуска не исключаются праздничные дни?

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

При оформлении отпусков расчетчики нередко сталкиваются с ситуацией, когда период ежегодного дополнительного отпуска выпадает на праздничные нерабочие дни, однако программа включает эти дни в оплачиваемый период. В соответствии со статьей 120 Трудового кодекса РФ, нерабочие праздничные дни, приходящиеся на период как основного, так и ежегодного дополнительного оплачиваемого отпуска, в число календарных дней отпуска не включаются и оплате не подлежат. Выясним причину такого поведения конфигурации «1С:Зарплата и управление персоналом 2.5» и разберем по шагам, как исправить настройки для корректного подсчета дней.

Анализ программного механизма расчета дней отпуска

Чтобы понять, почему платформа может игнорировать праздники для дополнительного отпуска, проанализируем типовой программный код документа начисления отпуска. Логика программы разделена на два ключевых этапа: определение необходимости исключения праздников и непосредственно подсчет календарных дней через производственный календарь.

Посмотрим на функцию ВключатьПраздникиВПериодОтпуска, определяющую флаг учета праздничных дней:


Функция ВключатьПраздникиВПериодОтпуска(ВидОтпуска)
    ВключатьПраздники = Ложь;
    Если ТипЗнч(ВидОтпуска) = Тип("ПланВидовРасчетаСсылка.ОсновныеНачисленияОрганизаций") Тогда
        ВключатьПраздники = НЕ ЗначениеЗаполнено(ВидОтпуска) 
            ИЛИ ОбщегоНазначенияЗК.ПолучитьЗначениеРеквизита(ВидОтпуска, "ОбозначениеВТабелеУчетаРабочегоВремени") 
                 <> Справочники.КлассификаторИспользованияРабочегоВремени.ДополнительныйОтпуск;
    КонецЕсли;
    Если ТипЗнч(ВидОтпуска) = Тип("ПеречислениеСсылка.ПричиныОтсутствияНаРаботеВОрганизации") Тогда
        ВключатьПраздники = ВидОтпуска <> Перечисления.ПричиныОтсутствияНаРаботеВОрганизации.ОтпускЕжегодный;
    КонецЕсли;
    Возврат ВключатьПраздники;
КонецФункции

Обратим внимание на строгое условие: если вид отпуска задан планом видов расчета ОсновныеНачисленияОрганизаций, значение реквизита ОбозначениеВТабелеУчетаРабочегоВремени должно в точности совпадать с предопределенным элементом Справочники.КлассификаторИспользованияРабочегоВремени.ДополнительныйОтпуск. Если это условие не выполняется, переменная ВключатьПраздники принимает значение Истина, то есть праздничные дни включаются в отпуск.

Рассмотрим далее функцию КоличествоДнейОтпускаПоКалендарнымДням, которая выполняет вычисление:


Функция КоличествоДнейОтпускаПоКалендарнымДням(ДатаНачала, ДатаОкончания, ВключатьПраздники = Ложь)
    Если НЕ ВключатьПраздники Тогда
        Запрос = Новый Запрос(
            "ВЫБРАТЬ
            |    СУММА(РегламентированныйПроизводственныйКалендарь.КалендарныеДни) КАК КоличествоДней
            |ИЗ
            |    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
            |ГДЕ
            |    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря >= &ДатаНачала
            |    И РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= &ДатаОкончания");
        Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
        Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
        Выборка = Запрос.Выполнить().Выбрать();
        Если Выборка.Следующий() Тогда
            КоличествоДней = Выборка.КоличествоДней;
        Иначе
            ОбщегоНазначенияЗК.СообщитьОбОшибке("Проверьте заполнение производственного календаря!");
            КоличествоДней = Неопределено;
        КонецЕсли;
    Иначе
        КоличествоДней = (НачалоДня(ДатаОкончания) - НачалоДня(ДатаНачала)) / 86400 + 1;
    КонецЕсли;
    Возврат КоличествоДней;
КонецФункции

Из текста запроса видно: когда параметр ВключатьПраздники равен Ложь, программа обращается к регистру сведений РегламентированныйПроизводственныйКалендарь и суммирует ресурс КалендарныеДни. Для дней со статусом «Праздник» этот ресурс равен нулю, соответственно, они отбрасываются. Если же флаг равен Истина, дни вычисляются как простая математическая разница дат без обращения к календарю.

Решение 1. Проверка и настройка вида расчета дополнительного отпуска

Разберем основной и самый частый источник проблемы — некорректное заполнение реквизитов вида начисления.

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

Решение 2. Проверка производственного календаря

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

  1. Перейдем в меню: Предприятие — Производственный календарь.
  2. Найдем спорные даты (например, 4 и 6 ноября). Федеральный праздник 4 ноября должен иметь статус Праздник.
  3. Проверим региональный праздник (6 ноября). Если день просто помечен как перенесенный выходной или суббота/воскресенье, в регистре сведений РегламентированныйПроизводственныйКалендарь поле КалендарныеДни останется равным единице. Чтобы день исключился из отпуска, он должен иметь статус именно Праздник.
  4. Нажмем кнопку Записать для обязательной перезаписи движений в регистре сведений.

Важное ограничение: в конфигурации редакции 2.5 производственный календарь является единым для всех организаций и подразделений информационной базы. Назначение регионального праздника сделает его нерабочим праздничным для всех сотрудников предприятия.

Решение 3. Ручная корректировка или разделение периодов

Рассмотрим альтернативные действия, если конфигурацию нельзя перенастраивать глобально из-за различий в регионах подразделений:

  1. Ручное исправление дней в документе: поле Количество дней на вкладке начислений доступно для прямого редактирования расчетчиком. Изменив значение с 6 на 4, мы получим верную сумму начисления отпускных без изменения исходного периода отсутствия сотрудника.
  2. Разбиение приказа на интервалы: период дополнительного отпуска можно оформить двумя отдельными интервалами — до наступления праздничных дней и после них. Это исключит влияние региональных дат на общий производственный календарь всей базы.
← На главную