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