Почему в ЗУП 3.1 при смене даты выплаты пересчитывается НДФЛ по всем сотрудникам и как это исправить?

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

С переходом на новые правила учета НДФЛ в 2023 году многие пользователи конфигурации 1С:Зарплата и управление персоналом 3.1 столкнулись с неочевидным поведением системы. Одной из самых раздражающих проблем стал автоматический запуск пересчета налога при простом изменении поля Планируемая дата выплаты в документе Начисление зарплаты и взносов. Ситуация осложняется тем, что пересчет может инициироваться даже в абсолютно пустом документе, заставляя бухгалтера ждать завершения длительной операции и вручную очищать появившиеся строки.

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

Анализируем причину автоматического пересчета

Выясним причину, по которой ЗУП инициирует расчет налогов. Согласно законодательству, действующему с 2023 года, дата получения дохода для целей НДФЛ определяется по фактической дате выплаты денег сотруднику. В документе Начисление зарплаты и взносов реквизит Планируемая дата выплаты является определяющим для расчета налога: от него зависят применяемые вычеты и период, в который попадет доход.

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

Методическое решение: использование документа «Перерасчет НДФЛ»

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

Проанализируем шаги по исправлению ситуации штатными средствами:

  1. Создадим документ Перерасчет НДФЛ (раздел Налоги и взносы).
  2. Нажмем кнопку Заполнить. В документ попадут все сотрудники, по которым система видит расхождения между исчисленным и удержанным налогом.
  3. Проведем этот документ. После этого регистр Пересчет НДФЛ очистится.

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

Программное решение: доработка формы через расширение

Рассмотрим ситуацию, когда бухгалтеры не готовы постоянно следить за регистром перерасчетов и требуют, чтобы пустой документ оставался пустым независимо от даты. Проанализируем пример кода, который можно внедрить через расширение в форму документа Начисление зарплаты и взносов. Основная идея заключается в том, чтобы перед запуском пересчета проверить, есть ли в документе вообще какие-либо данные (начисления, удержания или сотрудники).

Посмотрим на пример реализации процедуры ЗавершитьИзменениеПланируемойДатаВыплаты:


&НаКлиенте
Процедура ЗавершитьИзменениеПланируемойДатаВыплаты(Ответ, ДополнительныеПараметры) Экспорт
    Если Ответ=Неопределено Или Ответ.Значение<>Истина Тогда
        Если ЗначениеЗаполнено(ЭтаФорма.РасчетнаяПланируемаяДатаВыплаты) Тогда
            Объект.ПланируемаяДатаВыплаты = ЭтаФорма.РасчетнаяПланируемаяДатаВыплаты;
        КонецЕсли;
    КонецЕсли;
    
    // Проверяем заполненность хотя бы одной ключевой табличной части
    Если Объект.Начисления.Количество() +
         Объект.НачисленияПерерасчет.Количество() +
         Объект.НачисленияПоДоговорам.Количество() +
         Объект.Пособия.Количество() +
         Объект.Удержания.Количество() +
         Объект.НДФЛ.Количество() +
         Объект.Взносы.Количество() +
         Объект.КорректировкиВыплаты.Количество() > 0 Тогда 
        
        // Только если документ не пуст, запускаем штатный механизм пересчета
        РежимПересчетаНДФЛ = Истина;
        ПерезаполнитьДанныеФормыНаКлиенте();
    КонецЕсли;
КонецПроцедуры

В данном коде мы суммируем количество строк во всех значимых табличных частях. Если сумма равна нулю, это означает, что документ только что создан и еще не заполнялся. В этом случае флаг РежимПересчетаНДФЛ не устанавливается, и тяжелая процедура ПерезаполнитьДанныеФормыНаКлиенте не вызывается. Это значительно экономит время пользователей на крупных предприятиях.

Настройка автоматического пересчета

Выясним еще один способ влияния на поведение системы. В разделе НастройкиРасчет зарплаты существует опция Выполнять автоматический пересчет зарплаты при редактировании документов. Если этот флаг установлен, система реагирует на каждое изменение реквизитов.

Важный момент: если этот флаг снять, автоматические пересчеты прекратятся, но бухгалтеру придется вручную нажимать кнопку пересчета в каждом документе при изменении сумм или дат. Это может привести к тому, что налог будет рассчитан неверно, если пользователь забудет обновить данные. Поэтому данный метод рекомендуется только опытным пользователям, четко понимающим последовательность действий в ЗУП.

Рекомендации по обновлению и технические ошибки

Проанализируем техническую сторону вопроса. В релизах ветки 3.1.25 (в частности, до версии 3.1.25.40) существовала зарегистрированная ошибка (номер 000139419), при которой механизм пересчета срабатывал избыточно.

Для стабильной работы рекомендуется:

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

Таким образом, мы рассмотрели комплексный подход к решению проблемы: от методической очистки регистров до программного ограничения вызова процедур пересчета. Совместное использование этих методов позволит сделать работу в 1С:ЗУП 3.1 более комфортной и предсказуемой.

← На главную