Как полностью исключить начисление из механизма перерасчетов в 1С:ЗУП 3.1?

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

Механизм автоматических перерасчетов в программе «1С:Зарплата и управление персоналом 8» (редакция 3.1) является одной из самых полезных, но в то же время сложных функций. Система зорко следит за тем, чтобы любое изменение данных в прошлом периоде (исправление больничного, изменение графика или кадровый перевод задним числом) приводило к актуализации сумм начислений. Однако на практике возникают ситуации, когда конкретное кастомное начисление (например, премия за прошлый период или фиксированная надбавка) не зависит от текущих изменений, но программа настойчиво предлагает его пересчитать, часто «в минус» без обратного доначисления. Разберем подробно, как исключить такие виды расчета из этого механизма.

Анализ причины: почему начисление попадает в перерасчет

Прежде чем переходить к настройкам, проанализируем ситуацию. Программа помечает начисление к перерасчету в трех основных случаях:

  1. Зависимость по приоритету: Если в настройках начисления указаны другие виды расчета, которые его вытесняют (например, «Больничный» вытесняет «Оклад»). Любое изменение в «сильном» документе провоцирует пересчет «слабого».
  2. Зависимость по базе: Если ваше начисление является базой для других (например, для районного коэффициента), или само рассчитывается от базы, которая изменилась.
  3. Период действия: Начисления, имеющие протяженность во времени (например, ежемесячные надбавки), жестко привязаны к фактически отработанному времени и графику.

Рассмотрим по шагам способы решения этой задачи, от простых настроек до программного вмешательства.

Способ 1: Настройка вкладок «Приоритет» (Самый эффективный)

Как показывает практика и обсуждения экспертов, наиболее частой причиной «лишних» перерасчетов является неверно настроенный приоритет. Проанализируем настройки вашего вида расчета. В форме настройки начисления перейдите на вкладку «Приоритет».

Здесь расположены две таблицы:

Если ваше начисление является разовым или бонусным (например, процент за прошлый период), оно, как правило, не должно зависеть от того, болел сотрудник в текущем периоде или нет. Решение: полностью очистите обе таблицы в разделе приоритетов. После этого перепроведите документ, которым было введено начисление. Система перестанет видеть связь между этим расчетом и отклонениями (неявками) сотрудника.

Способ 2: Изменение категории начисления

Выясним причину, по которой начисление реагирует на изменения. Если оно настроено как Выполняется ежемесячно, программа всегда будет контролировать его актуальность в каждом месяце. Если методика учета позволяет, попробуйте изменить способ выполнения начисления на По отдельному документу (разовое начисление). Это разорвет жесткую привязку к плановым данным сотрудника и уменьшит вероятность его попадания в автоматическую очередь перерасчетов.

Способ 3: Работа с регистрами перерасчетов

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

  1. Перейдите в раздел Зарплата — Сервис — Перерасчеты.
  2. В открывшемся окне вы увидите список всех сотрудников и документов, которые система считает нужным пересчитать.
  3. Найдите записи, связанные с вашим «проблемным» начислением.
  4. Выделите их и нажмите «Отменить» (или просто удалите записи из списка).

Это действие не удаляет сами начисления, оно лишь говорит программе: «Здесь перерасчет не требуется, забудь об этой записи».

Способ 4: Программный метод исключения (для разработчиков)

Если конфигурация находится на поддержке с возможностью изменения, и вам требуется «железобетонный» способ исключить начисление из очереди раз и навсегда, можно вмешаться в логику записи в регистр. В системе за регистрацию перерасчетов отвечает общий модуль УчетПерерасчетов. Однако более элегантным решением будет создание подписки на событие ПриЗаписи для регистра сведений ЗарплатаКПересчету.

Рассмотрим пример кода, который можно внедрить в расширение, чтобы блокировать регистрацию перерасчета для конкретного вида расчета:


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

КонецПроцедуры

Проанализируем ситуацию глубже: лучше использовать событие ПередЗаписью в расширении для регистра сведений ОчередьПерерасчетов или ЗарплатаКПересчету. В коде нужно проверить, относится ли запись к вашему виду расчета, и если да — просто удалять такие строки из набора записей. Это позволит блокировать саму возможность появления записи о перерасчете в базе данных.

Важные замечания по настройке формул

Выясним еще один нюанс: если в формуле вашего начисления используются показатели СтоимостьЧаса, Оклад или ДоляРаспределенияСреднегоЗаработка, программа будет инициировать перерасчет при любом изменении этих показателей у сотрудника, даже если само начисление не изменилось. Посмотрите на настройки показателей в справочнике «Показатели расчета зарплаты». Если для показателя установлен признак Пересчитывать при изменении, это будет провоцировать механизм перерасчетов.

Резюме

Для того чтобы исключить вид начисления из перерасчетов, придерживайтесь следующего алгоритма:

  1. Проверьте настройки приоритетов: очистите списки вытеснения. Это решает проблему в 90% случаев.
  2. Сравните настройки: откройте рядом настройки вашего начисления и того, которое не пересчитывается (например, типовой премии), и найдите отличия на вкладках «Основное» и «Расчет базы».
  3. Очистите очередь перерасчетов: удалите ненужные записи через сервис «Перерасчеты», чтобы они не тянулись из прошлых периодов.
  4. Контролируйте базу: убедитесь, что ваше начисление не входит в базу других расчетов, которые могут требовать актуализации.

Использование этих методов позволит вам добиться того, чтобы в расчетные листки и документы начисления попадала только актуальная и нужная информация, без лишних сторнировочных записей.

← На главную