С переходом на новые правила учета НДФЛ в 2023 году многие пользователи конфигурации 1С:Зарплата и управление персоналом 3.1 столкнулись с неочевидным поведением системы. Одной из самых раздражающих проблем стал автоматический запуск пересчета налога при простом изменении поля Планируемая дата выплаты в документе Начисление зарплаты и взносов. Ситуация осложняется тем, что пересчет может инициироваться даже в абсолютно пустом документе, заставляя бухгалтера ждать завершения длительной операции и вручную очищать появившиеся строки.
В данной статье мы подробно разберем, почему программа ведет себя именно так, как минимизировать негативный эффект от этой функции и какой программный код поможет автоматизировать проверку необходимости пересчета.
Выясним причину, по которой ЗУП инициирует расчет налогов. Согласно законодательству, действующему с 2023 года, дата получения дохода для целей НДФЛ определяется по фактической дате выплаты денег сотруднику. В документе Начисление зарплаты и взносов реквизит Планируемая дата выплаты является определяющим для расчета налога: от него зависят применяемые вычеты и период, в который попадет доход.
Разберем внутреннюю логику системы. При изменении даты программа вызывает процедуру ЗавершитьИзменениеПланируемойДатаВыплаты. В типовом коде разработчики 1С оставили комментарий, подтверждающий, что старое значение даты часто неизвестно, поэтому система вынуждена выполнять пересчет в любом случае. Основным инициатором появления «лишних» сотрудников в табличной части является регистр сведений Пересчет НДФЛ. Если в системе есть накопленные ошибки по прошлым периодам (например, из-за изменения авансов или больничных), программа пытается исправить их при первой возможности — то есть при любом обновлении даты в текущем начислении.
Прежде чем переходить к программированию, рассмотрим рекомендации технической поддержки 1С. Если документ Начисление зарплаты при смене даты подтягивает сотрудников, которых там быть не должно, это сигнализирует о наличии в базе «хвостов» — незакрытых перерасчетов налога.
Проанализируем шаги по исправлению ситуации штатными средствами:
Перерасчет НДФЛ (раздел Налоги и взносы).Пересчет НДФЛ очистится.Если после этого мы вернемся в документ Начисление зарплаты и взносов и изменим дату, программа больше не будет подтягивать этих сотрудников, так как все ошибки уже исправлены специализированным документом.
Рассмотрим ситуацию, когда бухгалтеры не готовы постоянно следить за регистром перерасчетов и требуют, чтобы пустой документ оставался пустым независимо от даты. Проанализируем пример кода, который можно внедрить через расширение в форму документа Начисление зарплаты и взносов. Основная идея заключается в том, чтобы перед запуском пересчета проверить, есть ли в документе вообще какие-либо данные (начисления, удержания или сотрудники).
Посмотрим на пример реализации процедуры ЗавершитьИзменениеПланируемойДатаВыплаты:
&НаКлиенте
Процедура ЗавершитьИзменениеПланируемойДатаВыплаты(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ=Неопределено Или Ответ.Значение<>Истина Тогда
Если ЗначениеЗаполнено(ЭтаФорма.РасчетнаяПланируемаяДатаВыплаты) Тогда
Объект.ПланируемаяДатаВыплаты = ЭтаФорма.РасчетнаяПланируемаяДатаВыплаты;
КонецЕсли;
КонецЕсли;
// Проверяем заполненность хотя бы одной ключевой табличной части
Если Объект.Начисления.Количество() +
Объект.НачисленияПерерасчет.Количество() +
Объект.НачисленияПоДоговорам.Количество() +
Объект.Пособия.Количество() +
Объект.Удержания.Количество() +
Объект.НДФЛ.Количество() +
Объект.Взносы.Количество() +
Объект.КорректировкиВыплаты.Количество() > 0 Тогда
// Только если документ не пуст, запускаем штатный механизм пересчета
РежимПересчетаНДФЛ = Истина;
ПерезаполнитьДанныеФормыНаКлиенте();
КонецЕсли;
КонецПроцедуры
В данном коде мы суммируем количество строк во всех значимых табличных частях. Если сумма равна нулю, это означает, что документ только что создан и еще не заполнялся. В этом случае флаг РежимПересчетаНДФЛ не устанавливается, и тяжелая процедура ПерезаполнитьДанныеФормыНаКлиенте не вызывается. Это значительно экономит время пользователей на крупных предприятиях.
Выясним еще один способ влияния на поведение системы. В разделе Настройки — Расчет зарплаты существует опция Выполнять автоматический пересчет зарплаты при редактировании документов. Если этот флаг установлен, система реагирует на каждое изменение реквизитов.
Важный момент: если этот флаг снять, автоматические пересчеты прекратятся, но бухгалтеру придется вручную нажимать кнопку пересчета в каждом документе при изменении сумм или дат. Это может привести к тому, что налог будет рассчитан неверно, если пользователь забудет обновить данные. Поэтому данный метод рекомендуется только опытным пользователям, четко понимающим последовательность действий в ЗУП.
Проанализируем техническую сторону вопроса. В релизах ветки 3.1.25 (в частности, до версии 3.1.25.40) существовала зарегистрированная ошибка (номер 000139419), при которой механизм пересчета срабатывал избыточно.
Для стабильной работы рекомендуется:
НДФЛ и Корректировки выплаты.Подразделение в шапке документа. Если оно заполнено, пересчет затронет только сотрудников этого отдела. Если поле пустое — расчет пойдет по всей организации, что может парализовать работу программы на несколько минут при большом штате.Таким образом, мы рассмотрели комплексный подход к решению проблемы: от методической очистки регистров до программного ограничения вызова процедур пересчета. Совместное использование этих методов позволит сделать работу в 1С:ЗУП 3.1 более комфортной и предсказуемой.