В практике настройки расчетов в «1С:Зарплата и управление персоналом 3.1» (ЗУП) часто возникает задача создать начисление, зависимое от времени, но при этом включающее в себя периоды, которые программа стандартно считает «отклонениями». Типичный пример: необходимо начислить премию, которая рассчитывается пропорционально отработанному времени, но в это время должны входить не только дни явки, но и дни нахождения в командировке.
Разберем ситуацию, когда бухгалтер просит настроить формулу вида:
Результат = База * Процент * ВремяВДнях / НормаДней
При этом, даже если мы добавляем «Командировку» в список видов времени на вкладке настроек, при расчете премии дни командировки часто игнорируются. Давайте проанализируем причины такого поведения системы и найдем решение.
Чтобы понять, почему премия не видит время командировки, нужно вспомнить, как устроена архитектура вытеснения (приоритетов) в 1С.
В системе есть предопределенные показатели времени:
ОтработаноДней / ОтработаноЧасов — учитывают только фактическое время работы (Явка, Ночные и т.д.), которое не было вытеснено отклонениями.ВремяВДнях / ВремяВЧасах — более гибкие показатели, которые собирают данные на основании настроек самого начисления (вкладка «Учет времени»).В рассматриваемом случае используется показатель ВремяВДняхЧасах (или ВремяВДнях). Логично предположить, что если мы укажем начислению учитывать «Командировку», то время должно подтянуться. Однако здесь вступает в силу механизм Приоритета.
Если вид расчета «Командировка» находится в списке начислений, приоритет которых выше, чем у нашей «Премии», то период командировки для премии считается «пустым» (вытесненным). Программа просто «вырезает» эти дни из календаря премии, даже если мы явно просим их оплатить.
Давайте выполним настройку начисления, которое будет корректно считать дни явки и командировки суммарно. Будем действовать последовательно.
Откроем карточку нашего начисления (Настройка — Начисления — Премия). Перейдем на вкладку «Учет времени».
Здесь нам необходимо явно указать системе, какие виды времени мы хотим оплачивать (или учитывать в формуле). Стандартная настройка «За работу в полную смену в пределах нормы времени» нам не подходит, так как она ориентируется на табель по умолчанию.
Настроим следующим образом:
Этим действием мы говорим показателю ВремяВДнях: «Смотри в табель и суммируй часы, если там стоит код Я или К».
Самая частая ошибка кроется именно здесь. Если после настройки первого шага расчет все равно не идет, переходим на вкладку «Приоритет».
Посмотрим на таблицу слева («Начисления, приоритет которых выше»). В ней автоматически могут находиться такие отклонения, как:
Если «Командировка» находится в этом списке, она вытесняет нашу премию. То есть в дни командировки премия действовать не будет, и показатель времени вернет 0.
Что нужно сделать:
Теперь периоды командировки и периоды действия премии могут пересекаться. Поскольку на вкладке «Учет времени» мы уже указали, что этот вид времени нам интересен, формула начнет видеть дни командировки.
Важное примечание: Оставляйте в приоритете «Больничные» и «Отпуска», если премия не должна начисляться за эти периоды. Иначе премия начислится и за время болезни, если в табеле случайно не будет вытеснения.
Убедимся, что формула составлена корректно. Автор темы использовал следующий вариант:
Премия = База * Процент / 100 * ВремяВДняхЧасах / НормаДнейЧасов
Разберем нюансы этой формулы при наличии командировки:
ВремяВДняхЧасах — после наших настроек (Шаг 1 и 2) вернет сумму отработанного времени и времени в командировке.НормаДнейЧасов — это норма по графику сотрудника. Важно помнить, что командировка обычно не уменьшает норму времени (человек должен был работать в эти дни). Следовательно, деление будет корректным: (Отработано + Командировка) / Норма Графика.Если по каким-то причинам изменение приоритетов невозможно (например, сложная структура зависимостей других начислений), мы можем воспользоваться механизмом накапливаемых показателей.
Давайте рассмотрим, как это сделать:
ВремяДляПремии.Теперь в формуле начисления заменим типовой ВремяВДнях на наш ВремяДляПремии:
Премия = База * Процент / 100 * ВремяДляПремии / НормаДней
Этот способ работает «поверх» механизма вытеснения, так как показатель собирает данные напрямую из табеля учета рабочего времени, игнорируя настройки приоритетов самого начисления.
Для того чтобы премия учитывала время нахождения в командировке:
ВремяВДнях / ВремяВЧасах (или их комбинированный аналог), а не ОтработаноДней.После выполнения этих действий и перерасчета документа начисления, сумма премии должна корректно распределиться на дни командировки.