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

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

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

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

Прежде всего проанализируем ситуацию: почему стандартный показатель ВремяВДнях не всегда подходит для этой задачи? В системе 1С:ЗУП расчет времени опирается на Виды использования рабочего времени. Когда мы используем в формуле ВремяВДнях, программа собирает данные по всем видам времени, указанным в настройках начисления на вкладке "Учет времени".

Проблема заключается в том, что если праздничный день является рабочим по графику сотрудника (например, смена выпала на 1 января), система по умолчанию классифицирует это время как Явка (код «Я»). Типовые показатели, такие как КалендарныеДниМесяцаБезПраздников или НормаДней, работают с календарем в целом, но не умеют внутри формулы динамически "вычитать" праздничные дни из фактически отработанных, если они не выделены специальным кодом в табеле.

Рассмотрим подробнее три основных способа решения этой задачи, которые позволяют обойти данное ограничение.

Способ 1. Использование специализированного Вида времени

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

  1. Создадим в справочнике Виды использования рабочего времени новый элемент, например, "Рабочее время в праздники (по графику)".
  2. В настройках начисления на вкладке Учет времени укажем этот созданный вид времени.
  3. В формуле начисления будем использовать показатель ВремяВДнях.

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

Способ 2. Настройка начисления по условию вхождения в праздничный период

Выясним, можно ли автоматизировать процесс без ручной правки табеля. В настройках вида расчета (План видов расчета "Начисления") существует важная опция. Проанализируем настройки на вкладке Основное:

В поле Начисление выполняется можно выбрать значение "Только если время приходится на праздничные дни". В этом случае система при расчете зарплаты автоматически выполнит проверку: пересекается ли время, отработанное сотрудником, с праздничными днями, установленными в Производственном календаре.

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

Способ 3. Создание пользовательского показателя и шаблона ввода данных

Если логика расчета требует участия нескольких показателей одновременно, и механизм "Только в праздники" не применим, стоит рассмотреть вариант с созданием собственного показателя. Разберем этот процесс по шагам:

  1. Создадим новый показатель расчета зарплаты, назовем его КоличествоРабочихПраздничныхДней. Установим для него назначение "Для сотрудника" и порядок ввода "Вводится только в месяце расчета (перед расчетом зарплаты)".
  2. Создадим Шаблон ввода исходных данных для этого показателя. Это позволит пользователям вводить данные через специальный документ "Данные для расчета зарплаты".

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


// Пример логики для заполнения показателя (псевдокод)
Функция ПолучитьРабочиеПраздничныеДни(Сотрудник, ПериодРегистрации)
    // Получаем график работы сотрудника за период
    // Сравниваем рабочие дни графика с производственным календарем
    // Вычисляем количество совпадений
    Результат = 0;
    Для Каждого День Из ДниМесяца Цикл
        Если День.ЯвляетсяРабочимПоГрафику(Сотрудник) И День.ЯвляетсяПраздникомПоКалендарю() Тогда
            Результат = Результат + 1;
        КонецЕсли;
    КонецЦикла;
    Возврат Результат;
КонецФункции

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

Использование стандартных документов работы в выходные дни

Не забудем рассмотреть ситуацию, когда работа в праздник является сверхнормативной. В 1С:ЗУП для этого предназначен документ Работа в выходные и праздники. В этом случае система автоматически присваивает времени код РП (Праздники). Если ваша задача — посчитать именно такие дни, то достаточно в формуле использовать показатель ВремяВДнях, а в учете времени начисления выбрать только вид времени "Праздники" (РП).

Однако, как мы выяснили ранее, для сменных графиков, где праздник является обычным рабочим днем, этот механизм не сработает автоматически без дополнительных настроек, описанных в Способе 2.

Резюме

Проанализировав возможности 1С:ЗУП 3.1, мы пришли к выводу, что "волшебного" стандартного показателя, который сам вычленит рабочие праздники внутри любой формулы, не существует. Система разделяет понятия "Календарный признак дня" и "Вид фактически отработанного времени".

Для решения задачи мы рекомендуем использовать либо настройку начисления "Только если время приходится на праздничные дни" (если это позволяет логика расчета), либо внедрить пользовательский показатель с автоматизированным заполнением. Это обеспечит корректность расчета и прозрачность данных для пользователя.

← На главную