С 1 января 2025 года вступили в силу масштабные изменения в налоговом законодательстве РФ, касающиеся прогрессивной шкалы НДФЛ. Для пользователей конфигурации 1С:Управление производственным предприятием (УПП) редакции 1.3 переход на новый порядок расчетов в релизе 1.3.240.1 оказался сопряжен с рядом технических сложностей и программных ошибок. В этой статье мы подробно разберем, как адаптировать систему к новым требованиям, исправить критические ошибки кода и выполнить проверку корректности начисления и удержания НДФЛ по новым правилам.
Основное изменение в учете НДФЛ с 2025 года — это введение пятиступенчатой шкалы налогообложения (от 13% до 22%). Однако для определенных видов доходов, таких как районные коэффициенты (РК) и северные надбавки (СН), сохраняются особые условия: для них порог применения повышенной ставки в 15% остается на уровне 5 млн рублей, в то время как для основной зарплаты прогрессия начинается с 2,4 млн рублей.
Для разделения этих налоговых баз в конфигурацию был добавлен реквизит КатегорияДохода. Проанализируем ситуацию: если в документах за январь 2025 года этот реквизит остался пустым, программа не сможет корректно сопоставить доходы с предельными величинами в последующих месяцах. Это приведет к неверному исчислению налога и ошибкам в отчетности 6-НДФЛ.
Рассмотрим способы заполнения этого поля:
Посмотрим на пример того, как система определяет категории в общем модуле ПроведениеРасчетов в функции ТаблицаКатегорияДоходовНДФЛ(). Вы можете использовать этот фрагмент для написания собственной обработки по заполнению ТЧ документов:
// Фрагмент логики определения категории
Если Выборка.СоответствуетОплатеТруда Тогда
НоваяСтрока.КатегорияДохода = "ОплатаТруда";
ИначеЕсли Выборка.КодДляОтчетности = "2015" Тогда
НоваяСтрока.КатегорияДохода = "ДоходВНатуральнойФормеОтТрудовойДеятельности";
// Для северных надбавок используется отдельная категория
ИначеЕсли Выборка.Категория = Перечисления.КатегорииДоходовНДФЛ.РайонныеСеверныеНадбавки Тогда
НоваяСтрока.КатегорияДохода = "РайонныеСеверныеНадбавки";
КонецЕсли;
Многие пользователи столкнулись с аварийным завершением работы программы при попытке рассчитать НДФЛ в документах «Начисление зарплаты» или «Отпуск». Ошибка возникает в функции ПолучитьДанныеНДФЛПоРегистратору общего модуля ПроведениеРасчетов. Проанализируем ситуацию: проблема кроется в некорректном распределении стандартных налоговых вычетов, когда у сотрудника присутствуют разные категории доходов. В такой ситуации крайне важно проанализировать правильность начисления НДФЛ с учетом вычетов, исключая из базы не облагаемые налогом суммы.
Для решения этой проблемы разберем по шагам внесение исправлений в код модуля ПроведениеРасчетов (строка примерно 8000+):
Найдите блок кода, где происходит распределение вычетов, и замените его на более безопасный вариант, который проверяет наличие доходов и корректность индекса коэффициента:
// Исправление ошибки расчета вычетов в модуле ПроведениеРасчетов
Если Не ВыборкаРасчетов.КатегорияДохода = "РайонныеСеверныеНадбавки" Тогда
НачисленныйДоходЗаДату = ВыборкаРасчетов.ОблагаемыйДоход;
Если ВсегоВычетовЗаМесяц = 0 Тогда
ОблагаемыйДоходОТ = Макс(0, ОблагаемыйДоходОТ + ВыборкаРасчетов.ВсеДоходыЗаМесяц);
Иначе
// Добавляем проверку на наличие коэффициента перед обращением к массиву
Если КоэффициентыРаспределенияВычетов.Количество() > ИндексКоэффициента Тогда
ОблагаемыйДоходОТ = Макс(0, ОблагаемыйДоходОТ + ВыборкаРасчетов.ВсеДоходыЗаМесяц - ВсегоВычетовЗаМесяц * КоэффициентыРаспределенияВычетов[ИндексКоэффициента]);
ВсегоВычетовЗаМесяцОТ = ВсегоВычетовЗаМесяцОТ + ВсегоВычетовЗаМесяц * КоэффициентыРаспределенияВычетов[ИндексКоэффициента];
ВсегоВычетовЗаДату = ВсегоВычетовЗаДату + ВсегоВычетовЗаМесяц * КоэффициентыРаспределенияВычетов[ИндексКоэффициента];
КонецЕсли;
КонецЕсли;
ЕстьДоходыОТ = Истина;
Иначе
// Аналогичная логика для категории РайонныеСеверныеНадбавки
НачисленныйДоходЗаДату = ВыборкаРасчетов.ОблагаемыйДоход;
Если ВсегоВычетовЗаМесяц = 0 Тогда
ОблагаемыйДоходРКСН = Макс(0, ОблагаемыйДоходРКСН + ВыборкаРасчетов.ВсеДоходыЗаМесяц);
Иначе
Если КоэффициентыРаспределенияВычетов.Количество() > ИндексКоэффициента Тогда
ОблагаемыйДоходРКСН = Макс(0, ОблагаемыйДоходРКСН + ВыборкаРасчетов.ВсеДоходыЗаМесяц - ВсегоВычетовЗаМесяц * КоэффициентыРаспределенияВычетов[ИндексКоэффициента]);
ВсегоВычетовЗаМесяцРКСН = ВсегоВычетовЗаМесяцРКСН + ВсегоВычетовЗаМесяц * КоэффициентыРаспределенияВычетов[ИндексКоэффициента];
ВсегоВычетовЗаДату = ВсегоВычетовЗаДату + ВсегоВычетовЗаМесяц * КоэффициентыРаспределенияВычетов[ИндексКоэффициента];
КонецЕсли;
КонецЕсли;
ЕстьДоходыРКСН = Истина;
КонецЕсли;
Еще одна критическая ошибка Деление на 0 в строке 107 модуля ПроведениеРасчетов возникает при попытке рассчитать коэффициенты распределения, когда общая сумма доходов за период по сотруднику равна нулю (например, при сторнировании или корректировках). Выясним причину: программа не проверяет знаменатель перед делением.
Для исправления необходимо найти строку:
Коэффициенты.Добавить(СтрокаРаспределения[ИмяКолонки] / СуммаДоходов);
И заменить её на безопасную конструкцию:
Если СуммаДоходов <> 0 Тогда
Коэффициенты.Добавить(СтрокаРаспределения[ИмяКолонки] / СуммаДоходов);
Иначе
Коэффициенты.Добавить(0);
КонецЕсли;
В релизе 1.3.240.1 была замечена ошибка, при которой выплаченный аванс (за первую половину месяца) не сторнируется при окончательном расчете зарплаты, если расчет производится по группе подразделений. Это происходит из-за жесткого условия соответствия подразделения в запросе. Чтобы избежать расхождений, рекомендуется проводить анализ выплаты НДФЛ с учетом фактических дат и платежных поручений для каждой группы начислений.
Рассмотрим исправление в процедуре ДополнитьДвиженияСписаниемАванса модуля документа НачислениеЗарплатыСотрудникамОрганизации. Необходимо найти фрагмент запроса, где проверяется &ПодразделениеОрганизации, и заменить оператор сравнения = на проверку в иерархии или вовсе убрать это условие, если учет авансов ведется в целом по организации:
| И ВЫБОР
| КОГДА &ПодразделениеОрганизации <> Значение(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)
| ТОГДА ВыплаченныеАвансы.ПодразделениеОрганизации В ИЕРАРХИИ (&ПодразделениеОрганизации)
| Иначе ИСТИНА
| КОНЕЦ
Важный методологический момент 2025 года: нужно ли выделять РК и СН из суммы отпускных или больничных? Согласно последним разъяснениям ФНС, если районный коэффициент накручивается поверх оклада, он образует отдельную налоговую базу. Если же мы рассчитываем средний заработок, в который уже включены РК и СН за прошлые периоды, то сумму среднего заработка необходимо пропорционально разделять на «основную» базу и базу «северных/районных».
В УПП это реализовано через создание нескольких строк в табличной части НДФЛ для одного начисления. Обратите внимание: если вы правите НДФЛ вручную, обязательно соблюдайте это разделение, иначе отчет 6-НДФЛ будет заполнен некорректно. В ряде случаев может потребоваться выравнивание сумм исчисленного, удержанного и перечисленного НДФЛ, так как разные категории доходов теперь относятся к разным строкам раздела 2 и разным КБК.
Подведем итог: релиз 1.3.240.1 требует ручного вмешательства программиста для исправления ошибок в общем модуле ПроведениеРасчетов. После внесения исправлений рекомендуется выполнить полное последовательное перепроведение документов с начала 2025 года для корректного формирования регистров по категориям доходов.