Рассмотрим частую ситуацию при настройке расчета заработной платы в конфигурациях 1С:ЗУП 3, 1С:Комплексная автоматизация 2 или 1С:ERP. Часто возникает потребность создать свое начисление (например, специфичную доплату), которое зависит от вводимого ежемесячно показателя. Однако при пересечении периодов (например, сотрудник заболел и принес больничный лист, затрагивающий прошлый месяц, за который уже начислена доплата) программа сторнирует всю сумму целиком, а не уменьшает ее пропорционально дням неявки.
Проанализируем причины такого поведения системы и разберем по шагам, как правильно настроить формулы и приоритеты начислений, чтобы движок 1С корректно разбивал периоды действия и сторнировал только ту часть суммы, которая пришлась на дни отсутствия сотрудника на рабочем месте.
Если в формуле кастомного начисления используются только показатели, не связанные напрямую с учетом отработанного времени (например, ТарифнаяСтавкаЧасовая и произвольный показатель КоличествоЧасовДляДоплаты), расчетный движок 1С воспринимает это начисление как фиксированную сумму за месяц. Из-за этого при вытеснении больничным начисление отменяется полностью.
Посмотрим на пример "лайфхака", который заставляет систему включить механизм разбиения по периодам действия. Для этого достаточно искусственно добавить в формулу показатель отработанного времени. Выясним, как это выглядит на практике:
ТарифнаяСтавкаЧасовая * 0.3 * КоличествоЧасовДляДоплаты + ВремяВЧасах * 0
Когда программа видит в формуле показатель ВремяВЧасах, она автоматически понимает, что данное начисление зависит от нормы и факта времени. Добавление умножения на ноль (+ ВремяВЧасах * 0) просто нейтрализует математическое влияние этого показателя на итоговую сумму, но заставляет движок корректно разбивать начисление на периоды. Однако в некоторых релизах и этот способ может давать сбои. В таком случае рассмотрим более точную формулу, учитывающую пропорцию времени:
ТарифнаяСтавкаЧасовая * 0.3 * КоличествоЧасовДляДоплаты * ВремяВЧасах / НормаЧасов
При использовании такой формулы программа четко видит отношение отработанного времени к норме и при поступлении больничного за прошлый месяц сторнирует ровно ту часть доплаты, которая выпадает на дни болезни.
Вместо математических ухищрений с нулями и нормами методисты 1С рекомендуют использовать собственные виды времени. Это самый надежный и логичный способ. Разберем по шагам, как его реализовать:
ТарифнаяСтавкаЧасовая * 0.3 * ВремяВЧасах
Чтобы вводить часы по этому виду времени, настроим шаблон ввода исходных данных. В нем укажем ввод за несколько дней или за месяц с детализацией по дням. Данные вносятся документом Данные для расчета зарплаты на конкретные даты. Почему это лучше? Если часы доплаты введены на 20 и 21 число, а больничный сотрудник принесет за период с 25 числа, программа вообще не будет трогать эту доплату. А вот если больничный перекроет 21 число, программа сторнирует ровно те часы, которые были введены на эту дату.
Какую бы формулу мы ни использовали, критически важным шагом является настройка приоритетов. Без этого программа просто не будет "знать", что больничный должен отменять нашу доплату.
Откроем наше начисление и перейдем на вкладку Приоритет. В левом списке ("Начисления, приоритет которых выше") обязательно должны присутствовать все виды отсутствий, которые вытесняют доплату. Заведем туда как минимум следующие элементы:
Если эти таблицы оставить пустыми, документ "Больничный лист" при расчете перерасчетов прошлого периода просто проигнорирует наше начисление и не создаст сторнирующих записей.
Проанализируем ситуацию, если на предприятии активно используется документ Табель для жесткой фиксации времени. Ввод особых часов через табель может создать проблемы при перерасчетах. Документ "Табель" жестко фиксирует время за период и обладает высоким приоритетом фиксации факта.
Если в следующем месяце вводится больничный лист, затрагивающий прошлый месяц, программа может не сделать автоматический перерасчет прошлого периода, требуя сначала исправить (сторнировать) сам документ "Табель" за прошлый месяц. Именно поэтому рекомендуется избегать сплошного ведения табелей там, где это не является строгой необходимостью, отдавая предпочтение методу отклонений и вводу индивидуальных часов через специализированные документы Данные для расчета зарплаты.