В конфигурации 1С:Управление производственным предприятием (УПП) ред. 1.3, в частности на релизах 1.3.240 - 1.3.242, пользователи столкнулись с проблемой: при расчете зарплаты за декабрь итоговая сумма НДФЛ исчисляется неверно. Если сотруднику был начислен аванс, то в документе финального расчета зарплаты сумма налога рассчитывается с дохода за вычетом этого аванса, что приводит к занижению НДФЛ.
Эта ситуация вызывает сложности при формировании отчетности и расчетах с сотрудниками. Давайте вместе разберемся в причинах этой ошибки и рассмотрим несколько способов ее решения — как для программистов, так и для бухгалтеров.
Проанализировав ситуацию, можно прийти к выводу, что проблема кроется не в пользовательских настройках, а в ошибке кода самой конфигурации. Основная причина связана с изменениями в законодательстве и неполной адаптацией программы к ним.
Суть ошибки заключается в некорректной работе функции ПроведениеРасчетов.ПолучитьДанныеНДФЛПоРегистратору. В последних релизах в систему были добавлены новые поля для учета НДФЛ, в частности ЗачтеноАвансовыхПлатежейСПревышения18, ЗачтеноАвансовыхПлатежейСПревышения20 и ЗачтеноАвансовыхПлатежейСПревышения22. Однако, в некоторых местах кода, например, при формировании печатных форм или расчетах, эта функция не возвращает значения для этих новых полей. В результате при попытке обратиться к несуществующим полям возникает ошибка, которая нарушает дальнейшую логику расчета налога.
Интересный момент, на который обратили внимание эксперты: поля с префиксом ЗачтеноАвансовыхПлатежей в принципе не предназначены для учета обычного аванса за первую половину месяца. Их назначение — учет авансовых платежей по НДФЛ, которые вносят иностранные граждане, работающие по патенту. Система по ошибке пытается использовать эти специализированные поля в общем механизме расчета зарплаты, что и приводит к сбою. Тот факт, что проблема проявляется именно в декабре, может быть связан с особенностями расчета налога в последнем месяце года.
Теперь, когда мы понимаем корень проблемы, рассмотрим, как ее можно исправить.
Это наиболее правильный и долгосрочный способ решения проблемы. Он заключается во внесении небольших изменений в код конфигурации. Этот метод устраняет саму причину ошибки, и вам не придется прибегать к ручным операциям каждый раз. Важно: для этого необходим доступ к конфигуратору и права на изменение объектов конфигурации.
Разберем по шагам, что нужно сделать:
ПроведениеРасчетов.ПолучитьДанныеНДФЛПоРегистратору. Ошибка, как правило, проявляется не в самой этой функции, а там, где ее результат используется. В частности, ошибка была найдена в коде, отвечающем за печать формы Т-60 в документе «Начисление отпуска сотрудникам организаций».Посмотрим на пример кода, где проявляется ошибка. В одном из циклов обработки таблицы с данными НДФЛ есть следующий расчет:
СуммаНДФЛ = 0;
Для Каждого СтрокаНДФЛ Из ТаблицаНДФЛ Цикл
СуммаНДФЛ = СуммаНДФЛ + СтрокаНДФЛ.Налог + СтрокаНДФЛ.НалогСПревышения + СтрокаНДФЛ.НалогСПревышения18 + СтрокаНДФЛ.НалогСПревышения20 + СтрокаНДФЛ.НалогСПревышения22
// Следующая строка содержит ошибку, так как некоторых полей нет в ТаблицаНДФЛ
- СтрокаНДФЛ.ЗачтеноАвансовыхПлатежей - СтрокаНДФЛ.ЗачтеноАвансовыхПлатежейСПревышения - СтрокаНДФЛ.ЗачтеноАвансовыхПлатежейСПревышения18 - СтрокаНДФЛ.ЗачтеноАвансовыхПлатежейСПревышения20 -
СтрокаНДФЛ.ЗачтеноАвансовыхПлатежейСПревышения22;
КонецЦикла;
Чтобы исправить это, необходимо закомментировать вычитание несуществующих полей. Корректный вариант кода будет выглядеть так:
СуммаНДФЛ = 0;
Для Каждого СтрокаНДФЛ Из ТаблицаНДФЛ Цикл
СуммаНДФЛ = СуммаНДФЛ + СтрокаНДФЛ.Налог + СтрокаНДФЛ.НалогСПревышения + СтрокаНДФЛ.НалогСПревышения18 + СтрокаНДФЛ.НалогСПревышения20 + СтрокаНДФЛ.НалогСПревышения22
// Закомментировали обращение к полям, которые не возвращаются функцией
// - СтрокаНДФЛ.ЗачтеноАвансовыхПлатежейСПревышения18 - СтрокаНДФЛ.ЗачтеноАвансовыхПлатежейСПревышения20 - СтрокаНДФЛ.ЗачтеноАвансовыхПлатежейСПревышения22;
- СтрокаНДФЛ.ЗачтеноАвансовыхПлатежей - СтрокаНДФЛ.ЗачтеноАвансовыхПлатежейСПревышения;
КонецЦикла;
После внесения этих изменений необходимо сохранить конфигурацию и обновить конфигурацию базы данных. После этого расчет НДФЛ должен работать корректно. Поскольку поля `ЗачтеноАвансовыхПлатежей` используются только для иностранцев на патенте, для большинства организаций это изменение не будет иметь никаких негативных последствий.
Если у вас нет возможности или прав для изменения кода, можно воспользоваться одним из нескольких обходных путей. Они требуют больше ручных действий, но позволяют добиться верного результата.
Этот способ подходит, если ошибка затронула большое количество сотрудников, и нужно исправить данные «оптом». Суть в том, чтобы вручную внести правильные данные в регистр накопления, отвечающий за учет НДФЛ.
НДФЛ расчеты с бюджетом.Этот метод требует внимательности и хорошего понимания работы регистров, но он позволяет исправить данные, не трогая код.
Это довольно изящный способ «обмануть» систему и заставить ее правильно учесть НДФЛ, исчисленный с аванса. Он заключается в создании промежуточного документа.
Пошаговая инструкция:
Если проблема возникает только у одного или нескольких сотрудников, можно попробовать изолировать их расчет.
В заключение, отметим, что данная ошибка является недоработкой со стороны разработчика и, скорее всего, будет исправлена в последующих релизах. Поэтому самая главная рекомендация — своевременно обновлять вашу конфигурацию 1С:УПП. А до выхода официального исправления вы можете использовать один из предложенных методов для корректного расчета НДФЛ и закрытия года без ошибок.