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

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

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

Проблема использования стандартных показателей

Прежде чем переходить к решениям, проанализируем, почему типовая формула ФиксированнаяСумма * ВремяВЧасах / НормаЧасов часто не подходит. В системе 1С:ЗУП показатель НормаЧасов возвращает норму за весь месяц по графику сотрудника. Показатель ВремяВЧасах возвращает фактически отработанное время. Если сотрудник отработал 15 дней из 20, но при этом в эти 15 дней он выходил на подработки, показатель ВремяВЧасах может оказаться больше или равен НормаЧасов за полный месяц. В итоге математическая логика «оплаты за кусок нормы» нарушается.

Способ 1: Математическая пропорция нормы (Рекомендуемый)

Если нам нужно получить «норму за отработанный период» (например, те самые 152 часа из 168 возможных, если человек болел часть месяца), мы можем применить пропорцию. Система всегда знает норму дней за месяц и норму часов за месяц, а также сколько дней сотрудник фактически отработал по графику.

Рассмотрим формулу:

Результат = ФиксированнаяСумма * (ВремяВДнях / НормаДней) * НормаЧасов

Разберем, как это работает по шагам:

  1. ВремяВДнях / НормаДней — мы выясняем долю отработанного времени в днях относительно месячного графика.
  2. Умножая эту долю на НормаЧасов (за месяц), мы получаем эквивалент нормы часов, который приходится на фактически отработанные дни.
  3. Этот метод игнорирует часы переработок, так как опирается на дни явки, что позволяет корректно вычислить «чистую» норму за период.

Способ 2: Разделение видов времени (Метод «Чистой явки»)

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

Если сотрудники работают сверх графика, эти часы должны регистрироваться не видом времени «Явка» (Я), а отдельными видами времени, например, «Сверхурочно» (С) или «Праздничные» (РВ). В этом случае:

Способ 3: Использование расчетной базы

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

  1. Создаем вспомогательное начисление (назовем его «Техническая норма»), которое не имеет денежного выражения, но фиксирует время.
  2. В основном начислении в формуле используем показатель РасчетнаяБаза.
  3. На вкладке «Расчет базы» указываем наше техническое начисление и выбираем период — «Текущий месяц».
  4. В настройках приоритетов указываем, что начисление вытесняется больничными и отпусками.

Система сама рассчитает базу только за те интервалы, когда сотрудник не отсутствовал, фактически вычислив норму за «оставшийся» период месяца.

Способ 4: Индивидуальные графики

Выясним причину, по которой норма может считаться неверно при нестандартной работе. Если сотрудник постоянно работает не по основному графику предприятия, для него «нормой» должен стать Индивидуальный график (документ «Индивидуальный график»).

Когда вы вводите этот документ, системный показатель НормаЧасов в формулах начинает подтягивать данные именно из него. Это позволяет «подогнать» норму под конкретную производственную ситуацию сотрудника. Если в индивидуальном графике на период болезни будут стоять выходные или пустоты, то норма за месяц уменьшится, и расчет будет производиться исходя из уточненных данных.

Настройка начисления: важные нюансы

При создании начисления (раздел «Настройка» — «Начисления») обратим внимание на вкладку «Учет времени». Чтобы расчет пропорционально отрабатываемому времени за период работал корректно:

Рассмотрим пример настройки сложной формулы для доплаты за недоработки или корректировки нормы:


Результат = ТарифнаяСтавка * Макс( ( (ВремяВДнях / НормаДней) * НормаЧасов ) - ВремяВЧасах, 0)

В данной формуле мы принудительно вычисляем норму за период через дни и сравниваем её с фактически отработанными часами. Функция Макс(..., 0) гарантирует, что если сотрудник отработал больше нормы, отрицательного результата не будет.

Резюме

Для корректного определения нормы времени за произвольный период в 1С:ЗУП 3.1 мы рекомендуем использовать комбинированный подход: либо математический пересчет через отношение ВремяВДнях / НормаДней, либо строгое разделение видов времени в табеле, чтобы переработки не попадали в код «Явка». Это обеспечит точность расчетов даже при наличии длительных отсутствий (болезней, отпусков) в середине месяца.

← На главную