Как установить отрицательное значение показателя для расчета зарплаты в 1С:КА 2 и ERP?

Программист 1С v8.3 (Управляемые формы) 1С:Комплексная автоматизация Управленческий учет
← На главную

При настройке систем мотивации в программах 1С:Комплексная автоматизация 2 или 1С:ERP пользователи часто сталкиваются с необходимостью внедрения штрафных санкций или «депремирования». Типичный пример: сотрудник получает бонус при выполнении плана, но если план выполнен менее чем на определенный процент, сумма начисления должна уменьшиться или вовсе стать отрицательной. Однако при попытке ввести отрицательное число в показатель система выдает ошибку или обнуляет значение. Разберем подробно, почему так происходит и какими методами можно решить эту задачу.

Почему 1С ограничивает использование отрицательных показателей?

Прежде чем переходить к техническим решениям, проанализируем архитектуру системы. В ядре подсистемы расчета зарплаты (которое в КА 2 и ERP идентично конфигурации ЗУП 3.1) заложена логика, согласно которой показатель расчета — это некая физическая или денежная величина (часы, рубли, проценты), которая по своей природе обычно неотрицательна. Флаг Неотрицательный в свойствах реквизитов объектов метаданных установлен разработчиками 1С не случайно. Отрицательные значения в регистрах расчета зарезервированы для операций сторнирования — исправления ошибок прошлых периодов. Использование «минусов» в текущем расчете может привести к некорректному формированию налоговой отчетности (НДФЛ и страховые взносы) и проблемам при выплате зарплаты через банк.

Решение №1: Использование условий в формуле начисления

Это самый правильный и безопасный метод, не требующий вмешательства в конфигуратор. Вместо того чтобы пытаться записать в показатель число «-100», мы записываем положительное число «100», а знак меняем непосредственно в формуле вида расчета. Рассмотрим ситуацию, когда при выполнении плана менее 80% нужно вычесть 1000 рублей из премии.

Проанализируем шаги настройки:

  1. Создадим показатель СуммаШтрафа с типом «Числовой» и настройкой «Во всех месяцах после ввода значения».
  2. В настройках начисления (вид расчета) отредактируем формулу.
  3. Используем конструкцию логического условия ?().

Пример формулы, где основная премия уменьшается на сумму штрафа:

Результат = БазоваяПремия - ?(ПроцентВыполненияПлана < 80, СуммаШтрафа, 0)

В данном случае, если условие выполняется, система сама вычтет положительное значение показателя из общей суммы. Это не нарушает логику 1С и позволяет гибко управлять расчетом.

Решение №2: Математическое преобразование знака

Если логика начисления сложнее и зависит от нескольких факторов, мы можем использовать математический подход, предложенный участниками обсуждения. Разберем ситуацию: за каждый процент невыполнения ниже порога в 80% нужно вычитать 100 рублей.

Выясним причину, по которой прямое умножение на -1 в показателе может не сработать: система может отсечь минус еще на этапе ввода данных в документ «Данные для расчета зарплаты». Поэтому используем формулу:


Результат = СуммаБонуса + (ПоказательШтрафа * -1 * (80 - ПроцентВыполненияПлана))

Здесь ПоказательШтрафа — это положительное число (например, 100). Если ПроцентВыполненияПлана равен 75, то в скобках получится (80 - 75) = 5. Итоговое выражение: СуммаБонуса + (100 * -1 * 5), что даст уменьшение бонуса на 500 рублей.

Решение №3: Применение шкал (градация показателей)

Для реализации логики «если 79% — то -100, если 78% — то -200» лучше всего подходит механизм шкал показателей. Посмотрим на алгоритм настройки:

  1. Создаем показатель КорректировкаПремии.
  2. Указываем, что значение показателя зависит от другого показателя (например, ПроцентВыполнения).
  3. Настраиваем шкалу, где для диапазона от 0 до 78 значение будет 200, от 78 до 79 — 100, выше 80 — 0.
  4. В формуле начисления прописываем: ОсновнаяПремия - КорректировкаПремии.

Важный момент: Чтобы результат начисления случайно не стал отрицательным (что может заблокировать проведение документа), рекомендуется ограничивать итоговую сумму с помощью функции Макс():

Результат = Макс(ОсновнаяПремия - КорректировкаПремии, 0)

Эта функция выберет наибольшее из двух значений: либо рассчитанную сумму, либо ноль. Таким образом, начисление никогда не «уйдет в минус» в бухгалтерском смысле, что убережет вас от претензий трудовой инспекции.

Решение №4: Изменение свойств реквизита в конфигураторе (не рекомендуется)

Рассмотрим этот вариант только с точки зрения технического анализа, так как он несет высокие риски. В конфигураторе у справочника ПоказателиРасчетаЗарплаты (или связанных с ним регистров) у числовых реквизитов есть свойство Неотрицательный. Если снять эту галочку, система позволит записывать отрицательные числа.

Однако проанализируем последствия:

Методологический совет

Посмотрим на ситуацию со стороны учета. Если вы хотите именно «наказывать» рублем за плохую работу, то с точки зрения 1С и ТК РФ — это Удержание. Правильнее создать отдельный вид удержания с формулой расчета. Тогда в расчетном листке сотрудник увидит:

  1. Начислено: Премия (полная сумма) — 5000 руб.
  2. Удержано: Штраф за невыполнение плана — 1000 руб.

Такой подход прозрачен, не ломает логику программы и соответствует методологии 1С. Помните, что «отрицательное начисление» — это технический нонсенс для учетной системы, стремитесь заменять его вычитанием положительных величин в формулах.

← На главную