С начала 2023 года вступили в силу масштабные изменения в порядке исчисления и удержания НДФЛ. Теперь налог должен исчисляться и удерживаться при каждой выплате дохода, включая аванс (заработную плату за первую половину месяца). Эти изменения затронули механизмы расчета базы для плановых удержаний, таких как алименты или исполнительные листы процентом. В конфигурации 1С:Управление производственным предприятием 1.3 пользователи столкнулись с проблемой: при расчете итоговой суммы удержания за месяц из базы дважды вычитается НДФЛ — сначала исчисленный с аванса, а затем итоговый за месяц, который уже включает в себя авансовый налог.
В этой статье мы подробно разберем причины возникновения данной ошибки, проанализируем механизмы работы регистров и предложим несколько вариантов решения: от временных «обходных путей» до исправления программного кода.
Проанализируем ситуацию: в документе Начисление зарплаты при расчете удержаний программа определяет «чистый доход» сотрудника. По правилам, из начисленной суммы (базы) должен быть вычтен исчисленный НДФЛ. До 2023 года НДФЛ исчислялся один раз в месяц, и проблем не возникало.
Теперь же в регистре накопления НДФЛ расчеты с бюджетом за один месяц появляются две (или более) записи с видом строки Начисление:
Начисление зарплаты за первую половину месяца.Начисление зарплаты (окончательный расчет).При этом в окончательном расчете УПП сторнирует «авансовый» налог (запись с реквизитом ЗарегистрированоПриНачисленииАванса = Истина) и фиксирует полную сумму налога. Однако алгоритм сбора базы для удержаний в общем модуле ПроведениеРасчетов не учитывает эти тонкости и просто суммирует все приходные записи по налогу за период. В результате получается, что налог вычитается в двойном объеме, база занижается, а получатель алиментов недополучает деньги.
Данная ошибка официально зарегистрирована фирмой «1С» под номером 60005506.
Если у вас нет возможности оперативно внести изменения в программный код или обновить конфигурацию, можно воспользоваться «ручным» методом пересчета. Рассмотрим алгоритм действий:
Начисление зарплаты за первую половину месяца за текущий месяц.Начисление зарплаты за месяц. Поскольку авансовый расчет не проведен, программа увидит только одну запись по НДФЛ.Начисление зарплаты.Важно: Этот метод является трудоемким и подходит только для небольшого количества сотрудников или как экстренная мера.
Некоторые специалисты рекомендуют выносить расчет удержаний в отдельный этап. После того как все начисления и НДФЛ за месяц полностью рассчитаны и проведены, можно создать отдельный документ для расчета плановых удержаний. В этом случае база будет собираться уже по фактически зафиксированным в регистрах данным, что снижает вероятность ошибки автоматического расчета внутри общего документа начисления.
Если ваша конфигурация находится на поддержке с возможностью изменения, наиболее правильным решением будет правка запроса в общем модуле ПроведениеРасчетов. Выясним, где именно происходит ошибка: нам нужна процедура ДописатьАлгоритмВЗапрос.
Рассмотрим «элегантное» решение, которое предлагает добавить фильтрацию по признаку аванса. Найдите место, где формируется запрос к регистру НДФЛРасчетыСБюджетом. После условия на вид строки необходимо добавить исключение записей, зарегистрированных при начислении аванса.
Пример изменения кода:
// В процедуре ДописатьАлгоритмВЗапрос
// Находим фрагмент формирования текста запроса
ТекстЗапроса = ТекстЗапроса + "
| И НДФЛРасчетыСБюджетом.ВидСтроки = ЗНАЧЕНИЕ(Перечисление.НДФЛРасчетыСБюджетомВидСтроки.Начисление)
| И НДФЛРасчетыСБюджетом.ЗарегистрированоПриНачисленииАванса = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)";
Добавление проверки ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) позволяет отсечь те записи, которые были созданы предварительными расчетами, и брать в расчет базы только «финальный» НДФЛ.
Существует и более радикальный вариант исправления, который полностью перестраивает логику получения исчисленного налога через временные таблицы. Это помогает избежать проблем, если в середине месяца были сторно-записи или корректировки.
Проанализируем структуру запроса, предложенного сообществом:
Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
| Удержания.НомерСтроки КАК НомерСтроки,
| Удержания.ФизЛицо КАК Физлицо,
| НАЧАЛОПЕРИОДА(Удержания.БазовыйПериодНачало, МЕСЯЦ) КАК МесяцУдержания
|ПОМЕСТИТЬ ВТФизлица
|ИЗ
| РегистрРасчета.УдержанияРаботниковОрганизаций КАК Удержания
|ГДЕ
| Удержания.ВидРасчета В(&парамМассивУдержанийИЛ)
| И Удержания.Регистратор = &парамРегистратор
|;
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Физлица.НомерСтроки КАК НомерСтроки,
| НДФЛРасчетыСБюджетом.Налог + НДФЛРасчетыСБюджетом.НалогСПревышения КАК ИсчисленныйНалог
|ПОМЕСТИТЬ ВТИсчисленныйНДФЛ_Промежуточный
|ИЗ
| ВТФизлица КАК Физлица
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.НДФЛРасчетыСБюджетом КАК НДФЛРасчетыСБюджетом
| ПО Физлица.Физлицо = НДФЛРасчетыСБюджетом.ФизЛицо
| И (НАЧАЛОПЕРИОДА(НДФЛРасчетыСБюджетом.Период, МЕСЯЦ) = Физлица.МесяцУдержания)
|ГДЕ
| НДФЛРасчетыСБюджетом.Организация = &парамОрганизация
| И НДФЛРасчетыСБюджетом.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| И НДФЛРасчетыСБюджетом.ВидСтроки = ЗНАЧЕНИЕ(Перечисление.НДФЛРасчетыСБюджетомВидСтроки.Начисление)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Физлица.НомерСтроки,
| -СУММА(НДФЛРасчетыСБюджетом.Налог + НДФЛРасчетыСБюджетом.НалогСПревышения)
|ИЗ
| ВТФизлица КАК Физлица
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.НДФЛРасчетыСБюджетом КАК НДФЛРасчетыСБюджетом
| ПО Физлица.Физлицо = НДФЛРасчетыСБюджетом.ФизЛицо
| И (НАЧАЛОПЕРИОДА(Физлица.МесяцУдержания, МЕСЯЦ) = НАЧАЛОПЕРИОДА(НДФЛРасчетыСБюджетом.ЗарегистрированоПриНачисленииАванса, МЕСЯЦ))
| И (НДФЛРасчетыСБюджетом.ВидСтроки В (ЗНАЧЕНИЕ(Перечисление.НДФЛРасчетыСБюджетомВидСтроки.Начисление), ЗНАЧЕНИЕ(Перечисление.НДФЛРасчетыСБюджетомВидСтроки.ЗачетАвансовыхПлатежей)))
|СГРУППИРОВАТЬ ПО
| Физлица.НомерСтроки";
Данный подход позволяет системе корректно вычесть суммы, которые были «зачтены» из аванса, не допуская их повторного влияния на базу исполнительного листа.
Необходимо помнить, что 1С:УПП 1.3 находится на ограниченной поддержке, однако критические ошибки законодательства исправляются в плановых релизах. Ошибка 60005506 была исправлена разработчиками в релизах, начиная с 1.3.197.1 и выше.
Рассмотрим план действий для системного решения проблемы:
ПроведениеРасчетов, как показано в Варианте 3.НДФЛ расчеты с бюджетом по проблемным сотрудникам: убедитесь, что записи с признаком аванса корректно сторнируются итоговым расчетом.Таким образом, мы выяснили, что корень проблемы кроется в несоответствии старых алгоритмов сбора базы удержаний и новой механики регистрации НДФЛ. Применение патча кода или обновление программы позволит вернуть расчет алиментов в корректное русло и избежать претензий со стороны контролирующих органов и получателей выплат.