При работе с системой 1С:Зарплата и Управление Персоналом (ЗУП) мы часто сталкиваемся с потребностью в гибкой настройке расчетов. Одна из таких непростых ситуаций возникает, когда требуется автоматизировать расчет квартальной премии, процент которой изменяется в середине расчетного квартала. Например, с 1 января по 11 февраля премия начисляется по ставке 10% от оклада, а с 12 февраля по 31 марта – по ставке 20%. Задача состоит в том, чтобы программа автоматически разбила начисление по периодам действия разных процентов, суммируя результаты.
Стандартный функционал 1С:ЗУП, к сожалению, не предоставляет прямой возможности для такого автоматического дробления начисления премии. Документы типа «Кадровый перевод» или «Изменение плановых начислений» позволяют изменить процент премии с определенной даты, но при последующем расчете квартальной премии система, как правило, берет процент, актуальный на начало месяца начисления или на конец периода, не учитывая изменение внутри квартала.
В этой статье мы подробно рассмотрим возможные подходы к решению данной задачи: от серьезной доработки системы до использования обходных путей типовыми средствами. Мы проанализируем ограничения стандартного функционала и предложим практические решения, основываясь на опыте коллег.
Давайте разберем, почему типовые механизмы не справляются с данной задачей. При настройке квартальной премии, которая рассчитывается процентом от оклада за квартал, мы обычно создаем вид начисления в разделе «Настройка» - «Начисления». Здесь мы указываем, что это квартальная премия, и задаем формулу расчета, например, РасчетнаяБаза * ПроцентПремии. В качестве РасчетнойБазы мы указываем оклад за квартал, а ПроцентПремии берется из показателя, который может быть изменен кадровыми документами.
Проблема возникает, когда ПроцентПремии меняется, например, с 12 февраля. Если мы введем «Кадровый перевод» или «Изменение плановых начислений», изменив процент с 10% на 20% с 12 февраля, то при расчете квартальной премии за первый квартал (январь, февраль, март), документ «Премия» или «Начисление зарплаты и взносов» (если премия плановая) не будет автоматически дробить оклад на части до и после 12 февраля с применением разных процентов. Он, скорее всего, применит процент, актуальный на момент расчета или на конец расчетного периода (например, 20% за весь квартал), что не соответствует нашим требованиям.
Это подтверждается опытом других пользователей: «Сколько не пробовал, при расчете берется процент на период начисления, то есть март. Начисление не дробится на строки по периодам до и после изменения процента. Пробовал как отдельным документом премия, так и как плановое» (Сообщение 1). Таким образом, штатно автоматизировать такой расчет без ручного вмешательства практически невозможно.
Наиболее точным и "честным" способом автоматизировать расчет премии в таких условиях является доработка системы. Этот подход требует вмешательства программиста, но позволяет добиться максимально точного учета всех изменений.
ОкладНаДень / КоличествоРабочихДнейВМесяце, то "ежедневная" премия будет (ОкладНаДень / КоличествоРабочихДнейВМесяце) * ПроцентПремииНаДень. Если формула премии включает другие показатели, мы также берем их актуальные значения.Как описано в Сообщении 2 и 7, алгоритм может быть следующим:
// Примерный алгоритм расчета в расширении 1С:ЗУП
Функция РассчитатьКвартальнуюПремию(Сотрудник, ДатаНачалаКвартала, ДатаОкончанияКвартала)
ОбщаяСуммаПремии = 0;
// Определяем число рабочих дней в расчетном периоде (или календарных, по решению)
РабочиеДниПериода = ПолучитьРабочиеДни(ДатаНачалаКвартала, ДатаОкончанияКвартала);
Для Каждого День ИЗ РабочиеДниПериода Цикл
// Получаем актуальный оклад на текущий день
ОкладНаДень = ПолучитьАктуальныйОклад(Сотрудник, День);
// Получаем актуальный процент премии на текущий день
ПроцентПремииНаДень = ПолучитьАктуальныйПроцентПремии(Сотрудник, День);
// Получаем количество рабочих дней в месяце, к которому относится 'День'
// Это необходимо для корректного расчета дневного оклада, если оклад месячный
КоличествоРабочихДнейВМесяце = ПолучитьКоличествоРабочихДнейВМесяце(День);
Если КоличествоРабочихДнейВМесяце > 0 Тогда
// Вычисляем сумму премии за этот день
// Предполагаем, что оклад указан за месяц
СуммаПремииЗаДень = (ОкладНаДень / КоличествоРабочихДнейВМесяце) * ПроцентПремииНаДень / 100;
ОбщаяСуммаПремии = ОбщаяСуммаПремии + СуммаПремииЗаДень;
КонецЕсли;
КонецЦикла;
Возврат ОбщаяСуммаПремии;
КонецФункции
// Вспомогательные функции (требуют детальной реализации в 1С)
// ПолучитьРабочиеДни(ДатаНачала, ДатаОкончания) - возвращает список дат
// ПолучитьАктуальныйОклад(Сотрудник, Дата) - обращение к регистрам сведений, например, "ПлановыеНачисления"
// ПолучитьАктуальныйПроцентПремии(Сотрудник, Дата) - обращение к регистрам сведений, например, "ЗначенияПериодическихПоказателейРасчетаЗарплаты"
// ПолучитьКоличествоРабочихДнейВМесяце(Дата) - обращение к производственному календарю
Такой подход обеспечивает максимальную точность, поскольку он учитывает все изменения оклада и процентов на каждый день. Результат будет идентичен вашему описанию желаемого расчета: «Оклад который начислен с 01.01.2026 по 11.02.2026 * 10% + Оклад который начислен с 12.02.2026 по 31.03.2026 * 20%».
Доработку можно реализовать в расширении конфигурации. Например, можно добавить кнопку "Проверки и пересчета" в документ "Премия". При нажатии на эту кнопку будет запускаться описанный выше алгоритм для выбранного сотрудника и расчетного периода. Если рассчитанная сумма отличается от суммы, автоматически посчитанной 1С, она будет скорректирована в документе, и можно установить признак "внесено вручную".
Преимущества:
Недостатки:
Как отмечалось в Сообщении 14, если есть возможность доработать систему, это будет наиболее оптимальным и точным решением.
Если доработка системы невозможна или нежелательна, можно рассмотреть обходной путь с использованием типовых механизмов, хотя он и имеет свои ограничения и не является идеальным. Этот метод был описан в Сообщении 10 как "хитрый ход" или "старый проверенный дедовский способ" (Сообщение 12).
Суть подхода состоит в создании двух видов начислений:
Оклад * ПроцентПремии * ОтработаноДнейВМесяце
Оклад - это показатель, который будет браться из плановых начислений сотрудника. ПроцентПремии – это отдельный показатель, который может меняться кадровыми документами. ОтработаноДнейВМесяце – это предопределенный показатель, который будет учитывать фактически отработанное время сотрудника в месяце.
Как это работает: Каждый месяц, при начислении зарплаты, это вспомогательное начисление будет рассчитываться. Если в середине месяца изменился ПроцентПремии (например, через «Кадровый перевод»), то система автоматически разобьет расчет оклада и процента по периодам внутри месяца. Таким образом, за январь будет Оклад * 10% * ОтработаноДнейЯнваря, за февраль – (ОкладДо12.02 * 10% * ОтработаноДнейДо12.02) + (ОкладПосле12.02 * 20% * ОтработаноДнейПосле12.02), и за март – Оклад * 20% * ОтработаноДнейМарта. Это позволяет добиться ежемесячного дробления.
РасчетнаяБаза / КоличествоДнейВКвартале
РасчетнаяБаза — это сумма начислений "База для расчета премии" за три месяца квартала. В настройках вида начисления мы указываем, что в расчетную базу входит наше вспомогательное начисление «База для расчета премии» за три предыдущих месяца.
А КоличествоДнейВКвартале – это новый показатель, который мы будем вводить вручную раз в квартал.
КоличествоДнейВКвартале через документ «Данные для расчета зарплаты» (раздел «Зарплата» - «Данные для расчета зарплаты»). Это число будет использоваться в формуле основной премии.В конце квартала, при создании документа «Премия» или «Начисление зарплаты и взносов», основная «Квартальная премия» будет рассчитана следующим образом: она возьмет сумму значений «База для расчета премии» за три месяца (январь, февраль, март), которые уже содержат нужное дробление по процентам, и разделит ее на введенное вручную количество дней в квартале. Затем эта сумма будет выплачена и обложена всеми налогами и взносами.
Преимущества:
Недостатки:
В ходе обсуждения часто поднимается вопрос о "здравом смысле" такой методики расчета. Некоторые могут утверждать, что "Процент премии имеет смысл только на текущую дату ее начисления" и "Всегда по премиям просто работает текущий процент" (Сообщение 4).
Однако, как справедливо было отмечено в Сообщении 5, решение о "здравом смысле" принимается руководством компании, и главное, чтобы оно не противоречило законодательству. Если компания устанавливает внутренние правила, согласно которым премии должны рассчитываться с учетом всех изменений оклада и процента за весь премиальный период, то система должна это обеспечить. Например, если сотрудник принят на работу в середине квартала, прошел испытательный срок, и ему повысили оклад, то несправедливо начислять ему полную квартальную премию по максимальному окладу, если он фактически отработал часть периода по меньшему окладу или вообще не имел права на премию. В этом случае, пропорциональный расчет является наиболее справедливым и прозрачным.
Ключевой вывод: Методология расчета премии всегда определяется внутренним Положением о премировании компании. В этом документе должны быть четко прописаны условия, порядок, периодичность и формулы расчета премий, а также критерии оценки показателей. Если Положение предписывает учет изменений в течение периода, то система должна быть настроена соответствующим образом.
Независимо от выбранного подхода к решению задачи, при настройке премий в 1С:ЗУП следует учитывать несколько общих важных аспектов:
Мы рассмотрели два основных подхода к автоматизации расчета квартальной премии в 1С:ЗУП, когда процент премии меняется в течение расчетного периода. Стандартный функционал не предусматривает такого поведения "из коробки", что подтверждается опытом пользователей и поисковыми результатами.
Выбор решения зависит от ваших ресурсов и требований:
В любом случае, важно четко определить бизнес-требования к расчету премии и зафиксировать их в Положении о премировании, а затем выбрать наиболее подходящий способ реализации в 1С:ЗУП.