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

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

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

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

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

Рассмотрим сценарий, с которым столкнулся автор вопроса. В базе было настроено начисление «Оклад по часам» со следующей кастомизированной формулой:

Результат = Оклад * (ВремяВЧасах + КоличествоЧасовДоплаты) / НормаЧасов

Где КоличествоЧасовДоплаты — это показатель, который вводится отдельным документом через шаблон ввода данных и не привязан к конкретному виду времени в табеле.

Ситуация: В августе сотрудник фактически не работал (0 часов явки), но ему были введены часы доплаты (например, 33.4 часа). Система корректно рассчитала сумму за эти часы в документе «Начисление зарплаты и взносов». Позже, в сентябре, бухгалтер вводит документ «Отсутствие с сохранением оплаты», захватывая период августа.

Результат: На вкладке «Перерасчет прошлого периода» система полностью сторнирует ранее начисленную сумму по окладу (включая часть за часы доплаты).

Почему так происходит? Дело в механизме вытеснения (приоритетов) в ЗУП 3.1.

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

Шаг 1. Разделение начислений

Первое и самое важное правило настройки сложных расчетов в ЗУП: не смешивайте оплату за отработанное время и независимые надбавки в одном начислении.

Необходимо выделить доплату в отдельный вид расчета. Назовем его, например, «Доплата за часы (отдельная)».

Формула для нового начисления будет выглядеть так:

Результат = Оклад * КоличествоЧасовДоплаты / НормаЧасов

Из формулы основного оклада компонент КоличествоЧасовДоплаты необходимо убрать, вернув типовой вид:

Результат = Оклад * ВремяВЧасах / НормаЧасов

Однако, как показала практика (и сообщения в обсуждении), простого разделения может быть недостаточно. Если новое начисление «Доплата за часы» будет настроено неправильно, оно все равно будет сторнироваться.

Шаг 2. Выбор правильного назначения начисления

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

Если мы укажем, например, вид времени «Явка» или «Рабочее время», то при вводе документа «Отсутствие с сохранением оплаты» (который регистрирует отсутствие на те же даты) сработает механизм вытеснения. ЗУП «выдавит» нашу доплату, так как приоритет отсутствия выше приоритета работы.

Решение: Изменение назначения начисления.

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

Перейдем на вкладку «Основное» в настройках начисления «Доплата за часы»:

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

Почему это работает? Начисления с категорией «Прочие начисления и выплаты»:

Шаг 3. Проверка вкладки «Приоритет»

После смены назначения обязательно зайдите на вкладку «Приоритет».

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

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

Шаг 4. Настройка среднего заработка

Это критически важный момент, про который часто забывают при смене назначения на «Прочие начисления».

Начисления с назначением «Повременная оплата труда» попадают в расчет среднего заработка (для отпусков и командировок) автоматически как «Общий заработок» (код 2000).

Для начислений с назначением «Прочие начисления и выплаты» порядок учета в среднем заработке нужно настроить явно:

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

Шаг 5. Работа с расчетным листком

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

Вариант 1. Краткое наименование

В настройках начисления можно задать Краткое наименование, которое будет выводиться в некоторых отчетах. Однако в стандартном расчетном листке строки все равно будут разделены.

Вариант 2. Группировка в отчетах (для программиста)

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

Подводя итог

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

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

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

← На главную