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

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

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

Разберем ситуацию, когда бухгалтер просит настроить формулу вида:


Результат = База * Процент * ВремяВДнях / НормаДней

При этом, даже если мы добавляем «Командировку» в список видов времени на вкладке настроек, при расчете премии дни командировки часто игнорируются. Давайте проанализируем причины такого поведения системы и найдем решение.

Анализ механизма учета времени в ЗУП 3.1

Чтобы понять, почему премия не видит время командировки, нужно вспомнить, как устроена архитектура вытеснения (приоритетов) в 1С.

В системе есть предопределенные показатели времени:

В рассматриваемом случае используется показатель ВремяВДняхЧасах (или ВремяВДнях). Логично предположить, что если мы укажем начислению учитывать «Командировку», то время должно подтянуться. Однако здесь вступает в силу механизм Приоритета.

Если вид расчета «Командировка» находится в списке начислений, приоритет которых выше, чем у нашей «Премии», то период командировки для премии считается «пустым» (вытесненным). Программа просто «вырезает» эти дни из календаря премии, даже если мы явно просим их оплатить.

Пошаговое решение задачи

Давайте выполним настройку начисления, которое будет корректно считать дни явки и командировки суммарно. Будем действовать последовательно.

Шаг 1. Настройка вкладки «Учет времени»

Откроем карточку нашего начисления (Настройка — Начисления — Премия). Перейдем на вкладку «Учет времени».

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

Настроим следующим образом:

  1. Установим переключатель в положение: «Дополнительная оплата за уже оплаченное время» (в некоторых релизах и сценариях допускается использование переключателя «По видам времени», если премия не является основной оплатой).
  2. В табличной части «Виды времени» перечислим все необходимые виды:
    • Явка (или «Рабочее время»)
    • Командировка

Этим действием мы говорим показателю ВремяВДнях: «Смотри в табель и суммируй часы, если там стоит код Я или К».

Шаг 2. Настройка вкладки «Приоритет» (Ключевой момент)

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

Посмотрим на таблицу слева («Начисления, приоритет которых выше»). В ней автоматически могут находиться такие отклонения, как:

Если «Командировка» находится в этом списке, она вытесняет нашу премию. То есть в дни командировки премия действовать не будет, и показатель времени вернет 0.

Что нужно сделать:

  1. Находим в левом списке начисление «Командировка» (и его вариации, например, «Командировка (внутрисменная)», если используется).
  2. Удаляем эти строки из списка приоритетных начислений.

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

Важное примечание: Оставляйте в приоритете «Больничные» и «Отпуска», если премия не должна начисляться за эти периоды. Иначе премия начислится и за время болезни, если в табеле случайно не будет вытеснения.

Шаг 3. Проверка формулы расчета

Убедимся, что формула составлена корректно. Автор темы использовал следующий вариант:


Премия = База * Процент / 100 * ВремяВДняхЧасах / НормаДнейЧасов

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

Альтернативный метод: Использование собственного показателя

Если по каким-то причинам изменение приоритетов невозможно (например, сложная структура зависимостей других начислений), мы можем воспользоваться механизмом накапливаемых показателей.

Давайте рассмотрим, как это сделать:

  1. Зайдем в раздел Настройка — Показатели расчета зарплаты.
  2. Создадим новый показатель, назовем его, например, ВремяДляПремии.
  3. В настройках показателя выберем:
    • Назначение показателя: Для сотрудника.
    • Тип показателя: Числовой.
    • Используется: Во всех месяцах после ввода значения (или только в месяце ввода, зависит от задачи).
    • Ключевая настройка: выберем переключатель «Накапливается по отдельным видам времени».
  4. Активируется список видов времени. Отметим галочками нужные: «Явка», «Командировка», «Ночные» и т.д.

Теперь в формуле начисления заменим типовой ВремяВДнях на наш ВремяДляПремии:


Премия = База * Процент / 100 * ВремяДляПремии / НормаДней

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

Итог

Для того чтобы премия учитывала время нахождения в командировке:

  1. Добавьте вид времени «Командировка» на вкладке Учет времени в настройках начисления.
  2. Убедитесь, что «Командировка» отсутствует в списке вытесняющих начислений на вкладке Приоритет.
  3. Используйте показатели ВремяВДнях / ВремяВЧасах (или их комбинированный аналог), а не ОтработаноДней.

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

← На главную