Исправление ошибки вычисления суммы удержанного НДФЛ в ЗиК 320-322
При заполнении таблицы ДоходыВычетыНалогиСотрудников в функции глобального модуля глСобратьДанныеДляНДФЛ2011() есть ошибка при вычислении колонки "НУ1" (суммы удержанного НДФЛ для целей налогового учёта).
Данная статься посвящена её исправлению.
- Описание
- Подробнее
Описание
Иллюстрация ошибки:
Допустим, сотрудник принят на работу в январе 2012 года. Согласно иллюстрации (Журнал) за январь НДФЛ исчисленный = 283 руб, НДФЛ удержанный = 0 руб. В феврале произошла выплата з/п за январь, и была начислена з/п за февраль. Мы видим, что за февраль НДФЛ исчисленный = 494 руб, НДФЛ удержанный = 777 руб.
А что же нам возвращает глСобратьДанныеДляНДФЛ2011()? Результат мы видим в иллюстрации (ТаблицаНалогов), и в строке за февраль чудесным образом оказывается сумма 1060 руб., вместо правильных 777 руб.
Чем это нам грозит?
Во-первых, эта ошибка будет являтся причиной неправльного распределения сумм перечисленного НДФЛ в документе «Перечисление НДФЛ в бюджет РФ» по методу «по удержанному».
Во-вторых, это явится причиной неправльного формирования справок 2-НДФЛ, если сотрудник, например, в марте 2012 года будет переведён в подразделение с другим ОКАТО/КПП (в итоге по одной справке будет НДФЛ излишне удержанный, по другой — недоудержанный).
Как исправить?
Идём в функцию глСобратьДанныеДляНДФЛ2011(), почти в конец, и наблюдаем такой кусок кода:
Налог13уВсего = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(НомерСтрокиСотрудника+12,10);
Для Сч = 1 По 12 Цикл
СтрокаМесяца=НомерСтрокиСотрудника+Сч;
Налог13и = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаМесяца,4);
Налог13у = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаМесяца,10);
Если Сч>1 Тогда
Налог13и = Макс(0,Налог13и — ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаМесяца—1,4));
Налог13у = Макс(0,Налог13у — ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаМесяца—1,10));
КонецЕсли;
Налог13у = Макс(Налог13и,Налог13у); // учтем ситуацию, когда в месяце удержали больше чем начислили
Налог13у = Мин(Налог13у,Налог13уВсего);
Налог13уВсего = Налог13уВсего — Налог13у;
Если Сч>1 Тогда
Налог13у = Налог13у + ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаМесяца—1,«НУ1»);
КонецЕсли;
ДоходыВычетыНалогиСотрудников.УстановитьЗначение(СтрокаМесяца,«НУ1»,Налог13у);
КонецЦикла;
Смешивать при суммировании нарастающим итогом суммы НДФЛ удержанного и исчисленного плохая идея, не правда ли? Но и превышение суммы исчисленного НДФЛ над суммой удержанного НДФЛ тоже надо учесть. Как же сделать правильно? Ну, например, я предлагаю так:
Налог13уВсего = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(НомерСтрокиСотрудника+12,10);
Налог13у_пред=0;
Для Сч = 1 По 12 Цикл
СтрокаМесяца=НомерСтрокиСотрудника+Сч;
Налог13и_нараст = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаМесяца,4);
Налог13у_нараст = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаМесяца,10);
Если Сч>1 Тогда
Налог13у_тек = Макс(0,Налог13у_нараст — ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаМесяца—1,10));
Иначе
Налог13у_тек=Налог13у_нараст;
КонецЕсли;
Налог13у_тек = Мин(Налог13у_тек,Налог13уВсего);
Налог13уВсего = Налог13уВсего — Налог13у_тек;
Если Сч>1 Тогда
Налог13у_тек = Налог13у_тек + Налог13у_пред;
КонецЕсли;
Налог13у_пред=Налог13у_тек;
Налог13у_тек = Макс(Налог13и_нараст,Налог13у_тек); // учтем ситуацию, когда в месяце удержали больше чем начислили
ДоходыВычетыНалогиСотрудников.УстановитьЗначение(СтрокаМесяца,«НУ1»,Налог13у_тек);
КонецЦикла;
P.S. Для тех, кто боится «промахнуться», прилагаю текстовый файл с полным содержимым исправленной функции глобального модуля глСобратьДанныеДляНДФЛ2011(). Для установки идём на начало функции глСобратьДанныеДляНДФЛ2011(), переименовываем её в глСобратьДанныеДляНДФЛ2011_старая(), а всё содержимое прилагаемого текстового файла копируем перед строчкой глСобратьДанныеДляНДФЛ2011_старая(), и всё, сохраняем конфигурацию
Внимание! Перед внесением изменений в конфигурацию крайне настоятельно рекомендую делать бэкап.
