При работе в 1С:Зарплата и управление персоналом КОРП (редакция 3.1) специалисты часто сталкиваются с ситуацией, когда в штатном расписании для определенной позиции по показателю указан «ноль», но при начислении зарплаты программа упорно подставляет ненулевое значение. Особенно остро эта проблема проявляется при использовании показателей, зависящих от стажа. В данной статье мы подробно разберем, почему так происходит, проанализируем внутренние механизмы программы и найдем несколько способов решения этой задачи.
Разберем первопричину. Когда мы создаем показатель расчета зарплаты и указываем для него тип «Числовой, зависящий от стажа», мы фактически даем программе инструкцию: «Рассчитывай это значение автоматически в момент формирования документа НачислениеЗарплатыИВзносов». В этом случае 1С:ЗУП обращается не к значениям, зафиксированным в штатном расписании или кадровых приказах, а к настроенной шкале стажа и данным о стаже конкретного сотрудника из его карточки.
Проанализируем ситуацию: если у сотрудника накоплен стаж, соответствующий определенному порогу в шкале (например, более 5 лет — 10%), программа всегда будет подставлять 10%, даже если вы вручную укажете 0% в документе ИзменениеШтатногоРасписания. Для системы автоматический расчет имеет высший приоритет над значениями, введенными «для позиции». Это программная логика, направленная на минимизацию ошибок ручного ввода, но иногда она мешает гибкой настройке оплаты труда.
Первый и наиболее очевидный вариант решения — это доработка самой формулы начисления. Если нам нужно, чтобы расчет выполнялся только при наличии определенного условия (в данном случае — ненулевого значения в кадровых данных), мы можем использовать тернарный оператор ?().
Рассмотрим пример настройки формулы, предложенный в обсуждении:
?(ПроцентНадбавкиЗаВыслугуЛетСтаж = 0, 0, РасчетнаяБаза * ПроцентНадбавкиЗаВыслугуЛетСтаж / 100)
Однако, как мы выяснили выше, для показателя «по стажу» значение ПроцентНадбавкиЗаВыслугуЛетСтаж редко будет равно нулю, если у сотрудника есть стаж. Поэтому, если ваша цель — иметь возможность отключать надбавку для конкретных позиций штатного расписания, можно ввести дополнительный «показатель-переключатель». Назовем его, например, ВыплачиватьНадбавкуЗаСтаж (тип — число, вводится в штатном расписании, значения 0 или 1).
Тогда формула примет следующий вид:
ВыплачиватьНадбавкуЗаСтаж * (РасчетнаяБаза * ПроцентНадбавкиЗаВыслугуЛетСтаж / 100)
В этом случае, установив в штатном расписании ВыплачиватьНадбавкуЗаСтаж равным 0, вы гарантированно получите нулевой результат начисления, вне зависимости от того, что насчитал алгоритм по стажу.
Если надбавка за стаж или вредность должна входить в расчет других начислений (например, доплаты за переработки), мы можем столкнуться с проблемой, описанной в сообщении №8. Там автор пытался рассчитать переработку, включая в нее процент за вредность, который для данной позиции не должен применяться.
Рассмотрим правильный архитектурный подход 1С:ЗУП. Вместо того чтобы прописывать сложные конструкции типа (ТарифнаяСтавкаЧасовая + ТарифнаяСтавкаЧасовая * ПроцентНадбавкиЗаВыслугуЛет / 100) прямо в формуле доплаты за переработки, лучше использовать системный показатель СтоимостьЧаса.
Чтобы СтоимостьЧаса (она же совокупная тарифная ставка) включала в себя нужные надбавки только тогда, когда они реально назначены сотруднику, выполним следующие шаги:
НадбавкаЗаСтаж, НадбавкаЗаВредность).После этого формула доплаты за переработки значительно упростится и станет универсальной:
(ПереработаноВПределах2Часов * 0.5 + ПереработаноСверх2Часов * 1.5) * СтоимостьЧаса
Проанализируем результат: теперь 1С сама определит, назначены ли сотруднику надбавки за вредность или стаж в плановом порядке. Если надбавка не назначена (не числится в плановых начислениях сотрудника), она не попадет в СтоимостьЧаса, и расчет будет верным без лишних манипуляций в формулах.
Иногда проблема кроется в том, что в формулу одного начисления зашиты показатели другого начисления. Посмотрим на ситуацию из сообщения №13. Автор обнаружил, что в формулу доплаты за переработки был жестко включен ПроцентНадбавкиЗаВредность.
Выясним причину ошибки: если показатель ПроцентНадбавкиЗаВредность настроен как «Во всех месяцах после введения значения», то программа будет пытаться найти его значение в регистрах. Если в штатном расписании вы указали 0, но в «Условиях труда» позиции ШР или в спец. оценке рабочих мест указан класс вредности, 1С может подтянуть процент оттуда, игнорируя текстовое поле в ШР.
Для исправления ситуации мы можем:
РасчетнаяБаза (если начисление зависит от других) или вышеупомянутую СтоимостьЧаса.Пример «чистой» формулы для переработки, которая не будет тянуть лишние хвосты:
(ВремяВЧасах * 0.5) * СтоимостьЧаса
Подводя итоги, отметим, что прямое указание нуля в штатном расписании для автоматических показателей (стаж, вредность) часто не дает ожидаемого эффекта из-за особенностей программного кода 1С.
Для корректной работы рекомендуем:
Таким образом, понимание приоритетов расчета показателей позволяет гибко настраивать даже самые сложные системы оплаты труда в 1С:ЗУП КОРП, избегая «фантомных» начислений там, где их быть не должно.