Иллюстрация ошибки:
Допустим, сотрудник принят на работу в январе 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_старая(), и всё, сохраняем конфигурацию
Внимание! Перед внесением изменений в конфигурацию крайне настоятельно рекомендую делать бэкап.