При настройке систем мотивации в программах 1С:Комплексная автоматизация 2 или 1С:ERP пользователи часто сталкиваются с необходимостью внедрения штрафных санкций или «депремирования». Типичный пример: сотрудник получает бонус при выполнении плана, но если план выполнен менее чем на определенный процент, сумма начисления должна уменьшиться или вовсе стать отрицательной. Однако при попытке ввести отрицательное число в показатель система выдает ошибку или обнуляет значение. Разберем подробно, почему так происходит и какими методами можно решить эту задачу.
Прежде чем переходить к техническим решениям, проанализируем архитектуру системы. В ядре подсистемы расчета зарплаты (которое в КА 2 и ERP идентично конфигурации ЗУП 3.1) заложена логика, согласно которой показатель расчета — это некая физическая или денежная величина (часы, рубли, проценты), которая по своей природе обычно неотрицательна. Флаг Неотрицательный в свойствах реквизитов объектов метаданных установлен разработчиками 1С не случайно. Отрицательные значения в регистрах расчета зарезервированы для операций сторнирования — исправления ошибок прошлых периодов. Использование «минусов» в текущем расчете может привести к некорректному формированию налоговой отчетности (НДФЛ и страховые взносы) и проблемам при выплате зарплаты через банк.
Это самый правильный и безопасный метод, не требующий вмешательства в конфигуратор. Вместо того чтобы пытаться записать в показатель число «-100», мы записываем положительное число «100», а знак меняем непосредственно в формуле вида расчета. Рассмотрим ситуацию, когда при выполнении плана менее 80% нужно вычесть 1000 рублей из премии.
Проанализируем шаги настройки:
СуммаШтрафа с типом «Числовой» и настройкой «Во всех месяцах после ввода значения».?().Пример формулы, где основная премия уменьшается на сумму штрафа:
Результат = БазоваяПремия - ?(ПроцентВыполненияПлана < 80, СуммаШтрафа, 0)
В данном случае, если условие выполняется, система сама вычтет положительное значение показателя из общей суммы. Это не нарушает логику 1С и позволяет гибко управлять расчетом.
Если логика начисления сложнее и зависит от нескольких факторов, мы можем использовать математический подход, предложенный участниками обсуждения. Разберем ситуацию: за каждый процент невыполнения ниже порога в 80% нужно вычитать 100 рублей.
Выясним причину, по которой прямое умножение на -1 в показателе может не сработать: система может отсечь минус еще на этапе ввода данных в документ «Данные для расчета зарплаты». Поэтому используем формулу:
Результат = СуммаБонуса + (ПоказательШтрафа * -1 * (80 - ПроцентВыполненияПлана))
Здесь ПоказательШтрафа — это положительное число (например, 100). Если ПроцентВыполненияПлана равен 75, то в скобках получится (80 - 75) = 5. Итоговое выражение: СуммаБонуса + (100 * -1 * 5), что даст уменьшение бонуса на 500 рублей.
Для реализации логики «если 79% — то -100, если 78% — то -200» лучше всего подходит механизм шкал показателей. Посмотрим на алгоритм настройки:
КорректировкаПремии.ПроцентВыполнения).ОсновнаяПремия - КорректировкаПремии.Важный момент: Чтобы результат начисления случайно не стал отрицательным (что может заблокировать проведение документа), рекомендуется ограничивать итоговую сумму с помощью функции Макс():
Результат = Макс(ОсновнаяПремия - КорректировкаПремии, 0)
Эта функция выберет наибольшее из двух значений: либо рассчитанную сумму, либо ноль. Таким образом, начисление никогда не «уйдет в минус» в бухгалтерском смысле, что убережет вас от претензий трудовой инспекции.
Рассмотрим этот вариант только с точки зрения технического анализа, так как он несет высокие риски. В конфигураторе у справочника ПоказателиРасчетаЗарплаты (или связанных с ним регистров) у числовых реквизитов есть свойство Неотрицательный. Если снять эту галочку, система позволит записывать отрицательные числа.
Однако проанализируем последствия:
Посмотрим на ситуацию со стороны учета. Если вы хотите именно «наказывать» рублем за плохую работу, то с точки зрения 1С и ТК РФ — это Удержание. Правильнее создать отдельный вид удержания с формулой расчета. Тогда в расчетном листке сотрудник увидит:
Такой подход прозрачен, не ломает логику программы и соответствует методологии 1С. Помните, что «отрицательное начисление» — это технический нонсенс для учетной системы, стремитесь заменять его вычитанием положительных величин в формулах.