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