Почему в табеле ЗУП 3.1 праздничный день в дополнительном отпуске отмечается кодом ОД и как это исправить

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

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

Законодательная база: Ежегодный дополнительный отпуск и праздники

Прежде чем переходить к программным настройкам, проанализируем требования законодательства. Согласно статье 120 Трудового кодекса РФ, нерабочие праздничные дни, приходящиеся на период ежегодного основного или ежегодного дополнительного оплачиваемого отпуска, в число календарных дней отпуска не включаются. Это фундаментальное правило означает, что отпуск должен продлеваться на количество праздничных дней, а сами праздники не подлежат оплате.

Важно различать ежегодный дополнительный отпуск (например, за ненормированный рабочий день или вредные условия труда) и учебный отпуск. Для учебных отпусков действуют иные правила: они предоставляются в календарных днях строго по справке-вызову, и праздничные дни из них не исключаются. Именно в этом различии кроется одна из причин сложности программной реализации.

Выясним причину проблемы в коде 1С:ЗУП 3.1

Проанализируем ситуацию с точки зрения внутреннего устройства программы. В системе ЗУП 3.1 разделены механизмы расчета начислений и механизмы формирования печатных форм (в частности, табеля учета рабочего времени Т-13). Проблема с отображением ОД вместо В в праздники является следствием жестко прописанной логики в общих модулях программы.

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


| ВЫБОР
| КОГДА ДанныеУчетаВремениПоСостояниям.ВидУчетаВремени = &ОсновнойОтпуск
| И ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Праздник)
| ТОГДА &Выходной
| ИНАЧЕ ДанныеУчетаВремениПоСостояниям.ВидУчетаВремени
| КОНЕЦ КАК ВидУчетаВремени

Как мы видим, в типовом решении условие на замену кода отпуска на код В (параметр &Выходной) прописано только для основного отпуска. Для всех остальных видов времени, включая ДополнительныйОтпуск, программа просто транслирует установленный вид учета времени, игнорируя тот факт, что день является праздничным.

Как исправить ошибку с помощью программной доработки

Если вы столкнулись с необходимостью привести табель в строгое соответствие с ТК РФ, чтобы в праздничные дни доп. отпуска стоял код В, необходимо модифицировать логику запроса. Ранее программисты вносили изменения непосредственно в конфигурацию, но сейчас рекомендуется использовать расширения конфигурации. Это позволит сохранить программу на поддержке и избежать проблем при обновлении.

Посмотрим на пример исправленного кода, который должен быть внедрен в запрос функции ЗапросВТДанныеУчетаВремениИСостоянийСотрудников через механизм &Вместо или &ИзменениеЗапроса:


| ВЫБОР
| КОГДА (ДанныеУчетаВремениПоСостояниям.ВидУчетаВремени = &ОсновнойОтпуск 
|        ИЛИ ДанныеУчетаВремениПоСостояниям.ВидУчетаВремени = &ДополнительныйОтпуск)
| И ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Праздник)
| ТОГДА &Выходной
| ИНАЧЕ ДанныеУчетаВремениПоСостояниям.ВидУчетаВремени
| КОНЕЦ

Добавление условия ИЛИ ДанныеУчетаВремениПоСостояниям.ВидУчетаВремени = &ДополнительныйОтпуск заставит систему проверять производственный календарь и для дополнительных ежегодных отпусков. После применения такой правки в табеле на месте праздничного дня появится заветная буква «В».

Проверка настроек видов начислений и видов времени

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

  1. Перейдем в раздел Настройка — Начисления.
  2. Найдем вид начисления, соответствующий вашему дополнительному отпуску.
  3. На вкладке Основное проверьте, какой выбран Вид отпуска. Он должен быть связан с ежегодным дополнительным отпуском.
  4. На вкладке Учет времени посмотрите поле Вид времени. Обычно там указано Дополнительный отпуск.

Если в настройках начисления на вкладке Основное указано, что отпуск предоставляется в календарных днях (по ТК РФ), то расчет дней будет идти правильно вне зависимости от отображения в табеле. Однако, если для начисления ошибочно выбран вид времени, предназначенный для учебных отпусков (например, Дополнительный учебный отпуск (оплачиваемый)), то программа целенаправленно будет ставить ОД (или У) в праздничные дни, так как это соответствует логике предоставления учебных отпусков.

Рекомендации по исправлению без изменения конфигурации

Рассмотрим альтернативные варианты решения проблемы, если вы не планируете привлекать программиста для написания расширения:

  1. Обновление системы: Данная проблема признана ошибкой 1С (код ошибки 10223700). Проверьте актуальность вашего релиза. В последних патчах и версиях ЗУП 3.1 (начиная с 3.1.23 и выше) разработчики постепенно вносят правки в универсальные механизмы запросов учета времени.
  2. Ручная корректировка Табеля: Если в организации используется документ Табель, вы можете вручную изменить код ОД на В в нужные даты. Помните, что ручные правки в табеле не влияют на расчет зарплаты, если документ Отпуск уже проведен, но они важны для корректности печатной формы Т-13.
  3. Использование расширений из сообщества: На специализированных ресурсах часто выкладываются готовые расширения для исправления именно этой ошибки. Это самый быстрый способ «починить» табель без риска для основной конфигурации.

Важные нюансы: Учебный отпуск vs Ежегодный дополнительный

Проанализируем ситуацию, когда поведение программы может показаться ошибочным, но на самом деле оно верно. Если ваш сотрудник уходит в учебный отпуск, и этот период охватывает праздничные дни, то в табеле должен стоять код учебного отпуска (У или ОД в зависимости от настроек), а не В. Это связано с тем, что учебный отпуск оплачивается строго за весь период, указанный в справке-вызове, включая выходные и праздники. Поэтому, прежде чем вносить правки в программный код, убедитесь, что вы не «сломаете» отображение учебных отпусков, сделав их продлеваемыми на праздники.

Итоги

Подведем итоги нашего разбора. Несоответствие обозначений в табеле для основного и дополнительного отпуска в ЗУП 3.1 связано с недоработкой в типовом запросе формирования данных учета времени. Рассмотрим пошаговый алгоритм действий при обнаружении проблемы:

Использование предложенного кода в расширении позволит вам достичь полного соответствия кадрового учета требованиям статьи 120 ТК РФ и избежать лишних вопросов со стороны проверяющих органов при анализе печатных форм табелей Т-13.

← На главную