В практической деятельности компенсационной политики многих торговых компаний часто встречаются сложные, многоступенчатые системы премирования. Руководство стремится гибко стимулировать сотрудников, из-за чего формулы расчета бонусов приобретают замысловатый вид. Одна из классических задач — расчет прогрессивной премии, зависящей от объема продаж или прибыли, где каждый последующий диапазон ("слайс" или интервал) облагается своим процентом.
В рамках данной статьи мы подробно разберем, как реализовать подобную логику в программе 1С:Зарплата и Управление Персоналом (ЗУП). Мы проанализируем математическую модель расчета, разберем типичные ошибки при проектировании таких формул, выявим ограничения стандартного функционала шкал 1С и построим универсальное, гибкое решение на базе показателей расчета зарплаты.
---
Для начала детально разберем условия задачи. Премия менеджера по продажам рассчитывается как процент от прибыли. Однако ставка процента увеличивается по мере роста прибыли, причем расчет должен производиться строго по интервалам (ступеням):
Давайте разберем по шагам, как должен производиться расчет на конкретных примерах, чтобы исключить распространенные арифметические ошибки.
Пример 1. Объем прибыли равен 90 у.е.
Вся сумма попадает в первый интервал (до 200 у.е.).
Расчет: 90 * 1% = 0.9 у.е.
Пример 2. Объем прибыли равен 290 у.е.
Здесь сумма распределяется по двум интервалам: первые 200 у.е. рассчитываются по первой ставке, а оставшаяся часть (90 у.е.) — по второй.
Расчет: (200 * 1%) + ((290 - 200) * 2%) = 2 + (90 * 2%) = 2 + 1.8 = 3.8 у.е.
Обратите внимание: в реальной практике на форумах и в ТЗ часто совершают ошибку, перемножая весь остаток по некорректной ставке или путая доли. Важно четко разделять сумму на "слои".
Пример 3. Объем прибыли равен 460 у.е.
Сумма распределяется уже по трем интервалам: первые 200 у.е. идут по ставке 1%, вторые 200 у.е. (диапазон от 200 до 400) — по ставке 2%, а оставшиеся 60 у.е. (все, что свыше 400) — по ставке 3%.
Расчет: (200 * 1%) + (200 * 2%) + ((460 - 400) * 3%) = 2 + 4 + (60 * 3%) = 2 + 4 + 1.8 = 7.8 у.е.
---
В программе 1С:ЗУП (как в старой редакции 2.5, так и в актуальной 3.1) присутствует механизм зависимых показателей и оценочных шкал. На первый взгляд кажется, что достаточно создать показатель "Процент премии", зависящий от объема прибыли, настроить шкалу интервалов и использовать его в простой формуле: Прибыль * ПроцентПремии / 100.
Однако при таком подходе мы столкнемся с критическим ограничением платформы:
Стандартная шкала 1С:ЗУП применяет найденный процент ко всей базе целиком!
Если мы применим стандартную шкалу к Примеру 2 (прибыль 290 у.е.), программа определит, что показатель находится во втором диапазоне, присвоит ему значение "2%" и рассчитает премию как 290 * 2% = 5.8 у.е. Но по условиям ТЗ расчет должен производиться "кусочно" (по слайсам), и итоговая сумма должна составить 3.8 у.е. Таким образом, стандартный механизм шкал без написания формул здесь использовать невозможно.
---
Если параметры расчета (пороги 200 и 400 у.е., а также ставки 1%, 2% и 3%) утверждены окончательно и гарантированно не изменятся в ближайшие годы, мы можем составить формулу с использованием встроенного условного оператора ?().
Синтаксис условного оператора в формулах расчета зарплаты 1С выглядит следующим образом:
?(Условие, ВыражениеЕслиИстина, ВыражениеЕслиЛожь)
Давайте спроектируем вложенную конструкцию для наших трех условий. Обозначим показатель прибыли как ПоказательKIPI. Логика формулы будет следующей:
В виде формулы 1С это решение выглядит следующим образом:
?(ПоказательKIPI < 200, ПоказательKIPI * 1 / 100, ?(ПоказательKIPI < 400, 200 * 1 / 100 + (ПоказательKIPI - 200) * 2 / 100, 200 * 1 / 100 + 200 * 2 / 100 + (ПоказательKIPI - 400) * 3 / 100))
Данная формула работает абсолютно корректно и полностью решает поставленную задачу. Однако у нее есть существенный недостаток: жесткое кодирование констант (hardcode). Если руководство решит изменить порог с 200 на 250 или повысить ставки процентов, пользователю придется открывать конфигуратор или настройки начисления, снимать его с редактирования и переписывать формулу. Это может привести к ошибкам в расчетах прошлых периодов и усложнит поддержку системы.
---
Чтобы сделать систему по-настоящему гибкой и масштабируемой, мы должны вынести все константы в отдельные показатели расчета зарплаты. Это позволит менять условия начисления премий без изменения самой формулы.
Давайте создадим следующие показатели в справочнике "Показатели расчета зарплаты":
ПоказательKIPI — вводится ежемесячно для каждого сотрудника (значение его фактической прибыли).Порог1 — пороговое значение первого интервала (в нашем примере — 200).Порог2 — пороговое значение второго интервала (в нашем примере — 400).Процент1 — процентная ставка для первого диапазона (в нашем примере — 1).Процент2 — процентная ставка для второго диапазона (в нашем примере — 2).Процент3 — процентная ставка для третьего диапазона (в нашем примере — 3).Показатели Порог1, Порог2, Процент1, Процент2 и Процент3 можно настроить как "для организации" или "для подразделения", чтобы задавать их один раз для всей компании или группы менеджеров.
Теперь построим универсальную формулу, подставив наши показатели вместо жестких чисел:
?(ПоказательKIPI <= Порог1,
ПоказательKIPI * Процент1 / 100,
?(ПоказательKIPI <= Порог2,
Порог1 * Процент1 / 100 + (ПоказательKIPI - Порог1) * Процент2 / 100,
Порог1 * Процент1 / 100 + (Порог2 - Порог1) * Процент2 / 100 + (ПоказательKIPI - Порог2) * Процент3 / 100
)
)
Проанализируем преимущества такого подхода:
---
Опытные методологи и архитекторы 1С обращают внимание на то, что перегрузка конфигурации 1С:ЗУП сложными математическими вычислениями KPI не всегда является оптимальным решением. Рассмотрим альтернативные варианты автоматизации подобных расчетов.
1. Расчет премии на стороне оперативного учета (1С:УТ, 1С:КА, 1С:ERP)
Поскольку прибыль и объемы продаж менеджеров регистрируются в торговой системе, логично производить расчет мотивации именно там. В этих конфигурациях есть более развитый инструментарий для анализа продаж. В 1С:ЗУП в таком случае передается уже готовый финансовый результат (сумма премии) посредством документа "Данные для расчета зарплаты" или импортом из внешних файлов.
2. Использование внешних обработок и загрузки из Excel
Если расчеты производятся в Excel таблицах, можно написать простую внешнюю обработку для ЗУП. Расчетчик заполняет показатели в Excel, а обработка считывает данные, производит калькуляцию по алгоритму и автоматически создает документы начисления в 1С:ЗУП. Это снижает нагрузку на базу данных и упрощает расследование ошибок.
3. Переход на 1С:ЗУП КОРП
В КОРП-версии программы присутствует выделенный модуль "Управление эффективностью (KPI)". Данная подсистема спроектирована специально для настройки сложных шкал, целевых показателей и автоматического расчета премий на их основе без написания громоздких формул с условными операторами.