Как настроить формулу расчета премии от полного ФОТ, если сотрудник отработал неполный месяц в 1С:ЗКГУ?

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

В практике настройки расчетов заработной платы в «1С:Зарплата и кадры государственного учреждения» (ЗКГУ) или «1С:Зарплата и управление персоналом» (ЗУП) часто возникает задача начислить премию, базой для которой является не фактически начисленная зарплата, а полный плановый фонд оплаты труда (ФОТ). Ситуация усложняется, когда сотрудники работают неполный месяц (больничные, отпуска, прием в середине месяца).

Рассмотрим типичную проблему, с которой сталкиваются расчетчики и программисты 1С: попытка «математически восстановить» полный оклад из фактических начислений с помощью формулы вида РасчетнаяБаза / ОтработаноВремя * НормаВремени, и разберем, почему этот подход часто приводит к ошибкам и как сделать правильно.

Суть проблемы: математическая избыточность и технические ограничения 1С

Давайте проанализируем ситуацию, описанную в обсуждении. Пользователь пытается настроить начисление премии следующим образом:

  1. Берется фактическая начисленная зарплата за месяц (например, за 15 отработанных дней из 17 по норме).
  2. Эта сумма делится на отработанное время.
  3. Результат умножается на норму времени.

Логика пользователя понятна: «Если я разделю зарплату на дни, я получу стоимость дня, а умножив на норму, получу полный оклад». Однако при реализации в 1С возникают две проблемы:

  1. Техническая: Показатели времени (ОтработаноДней, НормаДней) в документе начисления премии могут возвращать одинаковые значения (полную норму), даже если сотрудник болел. Это происходит потому, что контекст расчета премии может не видеть отклонений, если они не вытесняют данный вид расчета или если документ введен раньше табеля.
  2. Логическая: Такой расчет является «арифметическим кругом».

Давайте разберем математику процесса, как это было предложено в решении задачи. Взглянем на формулу расчета оклада:

ОкладПоФакту = ПолныйОклад * (Отработано / Норма)

Теперь подставим это в формулу, которую пытается создать пользователь для премии:

Премия = (ОкладПоФакту / Отработано) * Норма

Раскроем скобки:

Премия = (ПолныйОклад * Отработано / Норма) / Отработано * Норма

В итоге показатели времени сокращаются, и мы приходим к простому равенству: Премия = ПолныйОклад. Мы видим, что нет никакого смысла брать фактическую расчетную базу, делить её и умножать обратно. Нам нужно просто взять значение полного оклада (или ФОТ).

Решение 1. Использование показателя «ФОТ» (Рекомендуемое)

Самый надежный и правильный способ решения данной задачи в конфигурациях 1С (ЗУП 3.1, ЗКГУ 3.1) — отказаться от использования показателя РасчетнаяБаза для этой цели. Вместо того чтобы пытаться пересчитать фактические начисления обратно к норме, нужно сразу использовать плановые показатели.

В программе существует предопределенный показатель ФОТ (или совокупность оклада и надбавок). Он хранит плановую сумму заработка сотрудника за полный месяц, независимо от того, сколько дней он реально отработал.

Как настроить формулу:

  1. Зайдем в раздел Настройка — Начисления.
  2. Откроем или создадим вид начисления «Премия».
  3. В редакторе формулы вместо конструкции с делением и умножением используем следующую простую формулу:

ФОТ * ПроцентПремии / 100

Или, если у вас нет общего показателя ФОТ, но есть конкретные начисления (Оклад, Надбавка за стаж), формула может выглядеть так:

(Оклад + НадбавкаЗаСтаж + НадбавкаЗаВредность) * ПроцентПремии / 100

Преимущества этого метода:

Решение 2. Почему показатели времени вставали некорректно?

Разберем технический момент, который смутил автора вопроса: почему при наличии неявок (15 дней факта против 17 нормы) в формулу попадали значения 17 и 17?

В 1С механизмы получения времени работают контекстно. Если вы используете показатели ОтработаноДней и НормаДней в формуле начисления, программа пытается определить их значение на момент расчета документа.

Возможные причины ошибки:

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

Решение 3. Если все же необходимо использовать расчетную базу

В редких случаях бухгалтерии действительно нужно взять сумму прошлых начислений и «дотянуть» её до нормы (например, при расчете годовой премии, где база собирается за 12 месяцев, а сотрудник болел, но премию нужно начислить как за полностью отработанный год). Хотя использование ФОТ все равно предпочтительнее, давайте посмотрим, как это реализовать технически правильно.

Чтобы формула с участием времени работала корректно, необходимо:

  1. Убедиться, что начисление настроено как «Зависимое» (выполняется после начисления зарплаты).
  2. Использовать специальные показатели времени. Стандартные ВремяВДнях могут не подойти. В настройках расчета базы (вкладка «Расчет базы») нужно проверить переключатель «Период расчета базы».
  3. Самое важное — использовать механизм «Доля отработанного времени». В 1С:ЗУП/ЗКГУ есть возможность настроить отношение Факт / Норма не вручную в формуле, а через настройки базы. Но для обратной задачи (восстановления суммы) это работает плохо.

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

Итог

Если ваша задача — начислить премию от полного оклада (полного ФОТ), даже если сотрудник отработал неполное время:

  1. Не используйте в формуле показатели РасчетнаяБаза, ОтработаноДней и НормаДней.
  2. Используйте показатели ФОТ или прямую сумму оклада (Оклад).
  3. Настройте формулу вида: ФОТ * Процент / 100.

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

← На главную