В практике работы с конфигурацией 1С:Зарплата и управление персоналом 3.1 (особенно в релизах ветки 3.1.9 и 3.1.10) пользователи и администраторы иногда сталкиваются с критической ситуацией: внезапно перестает рассчитываться расчетная база у надбавок и доплат. При этом сами базовые начисления (например, Оплата по окладу) рассчитываются корректно, а зависимые от них показатели в документе Начисление зарплаты и взносов остаются нулевыми. Даже пересчет прошлых периодов или тестирование и исправление базы не приносят результата.
В данной статье мы разберем причины возникновения этой ошибки, выясним, как системный реквизит Очередность расчета влияет на результат, и научимся восстанавливать корректную работу программы.
Для начала проанализируем, как 1С понимает, в каком порядке выполнять расчеты. В программе существует скрытый, но крайне важный реквизит — Очередность расчета (в коде системы он часто фигурирует как «вес» начисления). Этот механизм работает по следующей логике:
Оклад, Сдельный заработок). Им присваивается очередность 1.Проблема заключается в том, что если у Оклада и Надбавки очередность совпадает (например, у обоих установлена «1»), то в момент формирования строки с надбавкой система еще «не знает» результата оклада, так как они рассчитываются параллельно или в произвольном порядке. В итоге РасчетнаяБаза для надбавки оказывается равной нулю.
Поскольку реквизит Очередность расчета скрыт от глаз пользователя, нам необходимо вывести его в список начислений вручную. Проделаем следующие шаги:
Теперь в списке начислений появится колонка, в которой мы сможем увидеть цифровые значения. Если мы обнаружим, что у большинства начислений (включая сложные надбавки) стоит значение «1», значит, механизм распределения очередей в базе «сломан».
Выясним причину, по которой значения могут обнулиться или сброситься в единицу. В старых релизах ЗУП 3.1.9.187 был зафиксирован программный баг, связанный с формой Настройка состава начислений и удержаний. Рассмотрим сценарий, который приводит к ошибке:
Пользователь заходит в Настройка — Расчет зарплаты — Настройка состава начислений и удержаний. Даже если ничего не менять и просто нажать кнопку Применить и закрыть, программа инициирует фоновый процесс пересчета зависимостей всех начислений в плане видов расчета. Если в базе есть хотя бы одно начисление с некорректной формулой или циклической зависимостью (когда А зависит от Б, а Б от А), алгоритм пересчета «падает» и сбрасывает очередность всех элементов в значение по умолчанию — 1.
Если проблемных начислений немного, мы можем восстановить их работоспособность вручную. Для этого необходимо сделать так, чтобы зависимое начисление имело очередь выше, чем базовое. Посмотрим, как это реализовать:
Надбавка за стаж).Важный момент: если автоматический пересчет при записи не срабатывает, можно временно изменить формулу на константу, записать, а затем вернуть РасчетнаяБаза обратно. Однако наиболее надежным способом является исправление значения напрямую в базе (если есть права программиста).
Если начислений сотни, ручная правка неэффективна. Мы можем запустить штатную процедуру перестроения цепочки очередей через внешнюю обработку или консоль кода. Рассмотрим пример использования типовой функции:
// Пример программного вызова пересчета очередности начислений
// Данный код принудительно запускает алгоритм анализа связей
ЗарплатаКадрыРасширенныйСобытия.УпорядочитьНачисления();
После выполнения этого метода система проанализирует все формулы и вкладки «Расчет базы», после чего расставит корректные значения (1, 2, 3...) в реквизиты Очередность расчета. После этого расчет в документах Начисление зарплаты и взносов должен восстановиться автоматически (потребуется нажать кнопку Пересчитать сотрудника).
Проанализируем ситуацию с Районным коэффициентом. В сообщениях форума часто отмечают, что даже после частичного исправления надбавок РК продолжает считаться неверно. Это происходит потому, что РК — это предопределенный механизм, который всегда ожидает завершения расчетов по всем видам начислений, входящим в его базу. Если очередность Оклада — 1, Надбавки — 2, а у РК она также по ошибке стала 1 или 2, он не увидит полную сумму.
Для исправления РК и Северной надбавки необходимо убедиться, что их «вес» является максимальным среди всех используемых видов расчета. Обычно это значение 4 или выше.
Чтобы избежать повторения данной проблемы в будущем, рекомендуем выполнить следующие действия:
План видов расчета.Начисления и событию Изменение. Так вы сможете вычислить пользователя, который заходил в настройки состава начислений непосредственно перед сбоем.Таким образом, мы выяснили, что «магическое» исчезновение расчетной базы — это результат сбоя внутренней логики упорядочивания расчетов. Своевременный контроль реквизита Очередность расчета позволит вам быстро диагностировать и устранить эту проблему, не прибегая к длительному восстановлению базы из архивных копий.