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

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

В практике бухгалтерского учета часто возникают ситуации, когда стандартные формулы 1С не подходят под требования локальных нормативных актов предприятия. Одной из таких задач является расчет оплаты за работу в праздники, где база (условный оклад или фиксированная сумма) должна делиться не на норму дней и не только на явку, а на совокупность всех фактически отработанных дней, включая сами праздничные выходы. Рассмотрим подробно, как реализовать алгоритм 1000 руб (база) / (Явка + Праздники) * Праздники в программе 1С:Зарплата и управление персоналом 3.1.

Анализ исходной задачи и выбор стратегии

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

Способ 1. Использование показателя «Отработано дней» и настройка видов времени

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

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

Важнейшим этапом здесь является настройка вкладки Учет времени. Рассмотрим подробнее: чтобы ОтработаноДней включил в себя всё время, в списке «Дополнительные виды времени» должны быть указаны и «Явка», и «Работа в праздничные и выходные дни». Если этого не сделать, знаменатель будет рассчитан некорректно.

Способ 2. Использование механизма «Расчетной базы»

Если сумма 1000 рублей — это не просто абстрактное число, а, например, оклад сотрудника, целесообразно использовать механизм расчетной базы. Это позволит формуле динамически подтягивать суммы других начислений.

Выясним алгоритм настройки в этом случае:

  1. В формуле начисления пропишем: РасчетнаяБаза / ОтработаноДней * ВремяВДнях
  2. На вкладке Расчет базы подберем основные начисления сотрудника (например, «Оплата по окладу»).
  3. На вкладке Учет времени укажем основной вид времени — «Праздники».

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

Способ 3. Расчет через календарные дни (вариант для специфических графиков)

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

Формула может выглядеть так:


1000 / (ВремяВДнях + (КалендарныеДни - КалендарныеДниБезПраздников)) * (КалендарныеДни - КалендарныеДниБезПраздников)

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

Проблема вытеснения и периодов отсутствия

Проанализируем важный нюанс: что произойдет, если сотрудник был на больничном или в отпуске? В 1С:ЗУП 3.1 праздничные дни (код «РВ») обычно не входят в НормаДней. Если мы используем формулу 1000 / НормаДней * ВремяВДнях, результат будет завышен, так как норма останется прежней (например, 22 дня), а количество оплачиваемых дней увеличится.

Поэтому использование ОтработаноДней является более безопасным, так как этот показатель уменьшается при наличии больничных. Но будьте внимательны: при наличии «дней донора» или «командировок» показатель может вести себя непредсказуемо. В таких случаях рекомендуем рассмотреть использование показателя ОплаченоДней, который включает в себя все оплачиваемые периоды.

Альтернативное решение: Документ «Данные для расчета зарплаты»

Если автоматический сбор времени программой работает не так, как ожидается, или алгоритм применяется разово, разберем самый надежный «ручной» способ:

  1. Создадим Шаблон ввода исходных данных (меню Настройка).
  2. В шаблоне настроим два показателя: СуммаБазовая и ОбщийЗнаменательВремени.
  3. Создадим начисление с простой формулой: СуммаБазовая / ОбщийЗнаменательВремени * ВремяВДняхПраздники.
  4. Теперь ежемесячно бухгалтер сможет вводить фактические значения через документ Данные для расчета зарплаты.

Этот метод исключает ошибки автоматических алгоритмов 1С и дает полный контроль над расчетом. Мы рекомендуем его для сложных случаев, когда типовые механизмы вытеснения времени вступают в конфликт с требованиями расчета.

Резюмируя: для реализации формулы База / (Явка + Праздники) * Праздники оптимальнее всего использовать показатель ОтработаноДней, предварительно убедившись, что в настройках начисления на вкладке Учет времени включены все необходимые виды времени (Явка и РВ). Это обеспечит корректное суммирование знаменателя и автоматическую реакцию на отсутствие сотрудника (больничные, отпуска).

← На главную