Как настроить пропорциональное сторнирование своей доплаты по дням при неявках в 1С:ЗУП 3 и КА 2?

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

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

Проанализируем причины такого поведения системы и разберем по шагам, как правильно настроить формулы и приоритеты начислений, чтобы движок 1С корректно разбивал периоды действия и сторнировал только ту часть суммы, которая пришлась на дни отсутствия сотрудника на рабочем месте.

Решение 1: Математические хитрости в формуле начисления

Если в формуле кастомного начисления используются только показатели, не связанные напрямую с учетом отработанного времени (например, ТарифнаяСтавкаЧасовая и произвольный показатель КоличествоЧасовДляДоплаты), расчетный движок 1С воспринимает это начисление как фиксированную сумму за месяц. Из-за этого при вытеснении больничным начисление отменяется полностью.

Посмотрим на пример "лайфхака", который заставляет систему включить механизм разбиения по периодам действия. Для этого достаточно искусственно добавить в формулу показатель отработанного времени. Выясним, как это выглядит на практике:

ТарифнаяСтавкаЧасовая * 0.3 * КоличествоЧасовДляДоплаты + ВремяВЧасах * 0

Когда программа видит в формуле показатель ВремяВЧасах, она автоматически понимает, что данное начисление зависит от нормы и факта времени. Добавление умножения на ноль (+ ВремяВЧасах * 0) просто нейтрализует математическое влияние этого показателя на итоговую сумму, но заставляет движок корректно разбивать начисление на периоды. Однако в некоторых релизах и этот способ может давать сбои. В таком случае рассмотрим более точную формулу, учитывающую пропорцию времени:


ТарифнаяСтавкаЧасовая * 0.3 * КоличествоЧасовДляДоплаты * ВремяВЧасах / НормаЧасов

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

Решение 2: Архитектурно правильный подход через собственный вид времени

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

  1. Перейдем в настройки расчета зарплаты и убедимся, что включены опции Используется несколько видов времени в графике работы и Используется несколько тарифных ставок для одного сотрудника.
  2. Создадим новый вид рабочего времени в справочнике видов времени. Назовем его, например, Часы особых работ.
  3. В графике работы сотрудника укажем, что могут быть введены часы нашей новой доплаты дополнительно к явке.
  4. Создадим само начисление. На вкладке "Основное" зададим простую и понятную формулу: ТарифнаяСтавкаЧасовая * 0.3 * ВремяВЧасах
  5. На вкладке "Учет времени" этого начисления привяжем наш созданный вид времени Часы особых работ.

Чтобы вводить часы по этому виду времени, настроим шаблон ввода исходных данных. В нем укажем ввод за несколько дней или за месяц с детализацией по дням. Данные вносятся документом Данные для расчета зарплаты на конкретные даты. Почему это лучше? Если часы доплаты введены на 20 и 21 число, а больничный сотрудник принесет за период с 25 числа, программа вообще не будет трогать эту доплату. А вот если больничный перекроет 21 число, программа сторнирует ровно те часы, которые были введены на эту дату.

Настройка вытесняющих начислений (вкладка "Приоритет")

Какую бы формулу мы ни использовали, критически важным шагом является настройка приоритетов. Без этого программа просто не будет "знать", что больничный должен отменять нашу доплату.

Откроем наше начисление и перейдем на вкладку Приоритет. В левом списке ("Начисления, приоритет которых выше") обязательно должны присутствовать все виды отсутствий, которые вытесняют доплату. Заведем туда как минимум следующие элементы:

  1. Больничный;
  2. Больничный за счет работодателя;
  3. Отпуск;
  4. Отсутствие по болезни (если больничный еще не закрыт, но факт отсутствия зафиксирован кадровиком);
  5. Прогул, неявка.

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

Особенности использования документа "Табель"

Проанализируем ситуацию, если на предприятии активно используется документ Табель для жесткой фиксации времени. Ввод особых часов через табель может создать проблемы при перерасчетах. Документ "Табель" жестко фиксирует время за период и обладает высоким приоритетом фиксации факта.

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

← На главную