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