В практике бухгалтерского учета часто возникают ситуации, когда стандартные формулы 1С не подходят под требования локальных нормативных актов предприятия. Одной из таких задач является расчет оплаты за работу в праздники, где база (условный оклад или фиксированная сумма) должна делиться не на норму дней и не только на явку, а на совокупность всех фактически отработанных дней, включая сами праздничные выходы. Рассмотрим подробно, как реализовать алгоритм 1000 руб (база) / (Явка + Праздники) * Праздники в программе 1С:Зарплата и управление персоналом 3.1.
Прежде всего проанализируем математическую модель. Нам необходимо получить долю от фиксированной суммы. Проблема стандартных настроек заключается в том, что показатель ОтработаноДней по умолчанию ведет себя по-разному в зависимости от настроек вида времени. Если мы просто создадим начисление, программа может не «увидеть» в знаменателе одновременно и рабочие дни по графику, и праздничные выходы. Разберем по шагам наиболее эффективные способы настройки.
Этот способ является наиболее автоматизированным. Основная идея заключается в использовании системного показателя ОтработаноДней, который агрегирует данные из табеля или графиков работы. Проанализируем, как настроить начисление:
ФиксированнаяСумма / ОтработаноДней * ВремяВДнях
ФиксированнаяСумма — это созданный нами показатель (значение 1000 руб. из примера), ОтработаноДней — общее время, а ВремяВДнях — время конкретно по этому начислению (праздники).Важнейшим этапом здесь является настройка вкладки Учет времени. Рассмотрим подробнее: чтобы ОтработаноДней включил в себя всё время, в списке «Дополнительные виды времени» должны быть указаны и «Явка», и «Работа в праздничные и выходные дни». Если этого не сделать, знаменатель будет рассчитан некорректно.
Если сумма 1000 рублей — это не просто абстрактное число, а, например, оклад сотрудника, целесообразно использовать механизм расчетной базы. Это позволит формуле динамически подтягивать суммы других начислений.
Выясним алгоритм настройки в этом случае:
РасчетнаяБаза / ОтработаноДней * ВремяВДнях
Преимущество этого метода в том, что если оклад изменится, нам не придется править формулу или показатели вручную. Однако стоит помнить, что показатель ОтработаноДней в ЗУП 3.1 может игнорировать праздничные дни, если они не входят в график. Для решения этой проблемы проанализируем настройку видов времени еще раз: убедитесь, что в настройках начисления на закладке Учет времени праздничные дни отмечены как рабочее время.
Рассмотрим ситуацию, когда сотрудник работает по сложному графику и нам нужно опереться на календарную сетку. В обсуждении на форуме был предложен вариант использования разницы между календарными днями и днями исключаемых периодов.
Формула может выглядеть так:
1000 / (ВремяВДнях + (КалендарныеДни - КалендарныеДниБезПраздников)) * (КалендарныеДни - КалендарныеДниБезПраздников)
Этот метод более громоздкий, но он позволяет жестко зафиксировать логику расчета, не полагаясь на то, как программа интерпретирует показатель ОтработаноДней. Однако, как верно заметили эксперты, этот вариант подходит только в том случае, если работа в праздники является регулярной и прогнозируемой.
Проанализируем важный нюанс: что произойдет, если сотрудник был на больничном или в отпуске? В 1С:ЗУП 3.1 праздничные дни (код «РВ») обычно не входят в НормаДней. Если мы используем формулу 1000 / НормаДней * ВремяВДнях, результат будет завышен, так как норма останется прежней (например, 22 дня), а количество оплачиваемых дней увеличится.
Поэтому использование ОтработаноДней является более безопасным, так как этот показатель уменьшается при наличии больничных. Но будьте внимательны: при наличии «дней донора» или «командировок» показатель может вести себя непредсказуемо. В таких случаях рекомендуем рассмотреть использование показателя ОплаченоДней, который включает в себя все оплачиваемые периоды.
Если автоматический сбор времени программой работает не так, как ожидается, или алгоритм применяется разово, разберем самый надежный «ручной» способ:
СуммаБазовая и ОбщийЗнаменательВремени.СуммаБазовая / ОбщийЗнаменательВремени * ВремяВДняхПраздники.Этот метод исключает ошибки автоматических алгоритмов 1С и дает полный контроль над расчетом. Мы рекомендуем его для сложных случаев, когда типовые механизмы вытеснения времени вступают в конфликт с требованиями расчета.
Резюмируя: для реализации формулы База / (Явка + Праздники) * Праздники оптимальнее всего использовать показатель ОтработаноДней, предварительно убедившись, что в настройках начисления на вкладке Учет времени включены все необходимые виды времени (Явка и РВ). Это обеспечит корректное суммирование знаменателя и автоматическую реакцию на отсутствие сотрудника (больничные, отпуска).