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