Данная статься посвящена её исправлению.
Иллюстрация ошибки:
Допустим, сотрудник принят на работу в январе 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_старая(), и всё, сохраняем конфигурацию
Внимание! Перед внесением изменений в конфигурацию крайне настоятельно рекомендую делать бэкап.
Спасибо за информацию — будем смотреть!
спасибо за эту информацию
информация пригодилась, за нее спасибо!
Спасибо! Столкнулись с этой ошибкой.
огромнейшее спасибо за статью, но я надеюсь 1с сама должна это исправить в последующих релизах….
(5) в последнее время 1с не балует вниманием 7-ку, заметьте, очень многий функционал для учёта изменений в законодательстве реализуется в сильно урезанном, по сравнению с ЗУПом, виде.
да и ошибка довольно специфическая, многих она просто не затрагивает. посмотрим, время покажет
Ничего себе! Не сталкивалась с такой ошибкой. Большое спасибо автору! Тем более, что не обязательно скачивать файл, вернее иметь один балл для его скачивания. Обязательно + !
Спасибо автору за подробное описание проблемы и решение этой проблемы, очень понятно написано, даже мне не программисту, а простому бухгалтеру немного разбирающемуся в конфигурации, ещё раз большое спасибо и + Вам большой.
RE:
При заполнении таблицы ДоходыВычетыНалогиСотрудников в функции глобального модуля глСобратьДанныеДляНДФЛ2011() есть ошибка при вычислении колонки «НУ1» (суммы удержанного НДФЛ для целей налогового учёта).
Данная статься посвящена её исправлению.
Спасибо за инфу!
Да, ну вы даете. Всех делов-то:
//Налог13уВсего = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(НомерСтрокиСотрудника+12,10);
Для Сч = 1 По 12 Цикл
СтрокаМесяца=НомерСтрокиСотрудника+Сч;
Налог13и = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаМесяца,21);
Налог13у = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаМесяца,10);
ДоходыВычетыНалогиСотрудников.УстановитьЗначение(СтрокаМесяца,«НУ1»,Мин(Налог13у,Налог13и));
КонецЦикла;
И заметьте, приведенный в самой публикации вариант не будет работать для случаев, когда налог исчисленный уменьшался задним числом — добавили вычет и т.п., т.к. налог исчисленный в 4-й колонке берется из журнала расчетов. Да и в самом регистре НДФЛ налог исчисленный берется не из 4-й колонки. Приведенный же вариант в указанных случаях работает.
И дополнение в раздел «Чем это нам грозит»: грозит тем, что в некоторых месяцах в отчетах по НДФЛ удержанный налог окажется больше исчисленного.
(10) «грозит тем, что в некоторых месяцах в отчетах по НДФЛ удержанный налог окажется больше исчисленного. »
в каких именно? ты невнимательно изучил код от 1С, он к концу прохода выравнивает суммы.
насчёт 21-й колонки — во-первых, это не ко мне, 4-ю колонку использует в своём алгоритме 1С, я лишь исправил их алгоритм от ошибок. ты же (это во-вторых) предлагаешь изменить методологию расчёта колонки НУ1. и, в-третьих, с чего должна изменяться сумма удержанного НДФЛ при изменении налога исчисленного задним числом?
и, кстати, по поводу возможности использования 21-й колонки — я уже пробовал её использовать в своей разработкеРаспределение и контроль НДФЛ вместо 4-й, ничего не вышло, ибо в некоторых ситуациях сумма рассчитывалась неверно. если вспомню, в каких именно ситуациях, сообщу дополнительно
(10) а с переходящими отпусками тут будет вообще полный швах
(11) Прежде чем спорить, хотелось бы понять о чем.
Я себе так понимаю задачу, которую 1С ставили перед собой в описываемом случае:
Отсюда, по-моему, и желание 1С «причесать» налоговый регистр так, чтобы ни в одном из месяцев удержанный налог не превышал исчисленный на данный момент, т.е. чтобы общая сумма удержанного налога (нар. итог до тек. месяца) не превышала сумму налога исчисленного, т.к. все что еще не начислено, то и не налог вовсе (с ПФР по этому поводу давно уже не спорим, так чего ж тут-то?)!
Такой, к примеру.
В связи с вышеизложенным, никакой попытки «изменить методологию расчёта» за собой не вижу, а лишь решаю задачу, поставленную тем, кто её нормально решить так и не смог. Многочисленные тесты показывают, что приведенное мною здесь решение работает. Вы бы попробовали, прежде чем ругаться-то? Ведь и в Вашем примере мое решение в феврале дает 777 руб. налога удержанного.
«С чего должна изменяться сумма удержанного НДФЛ при изменении налога исчисленного задним числом?» Не должна. Но может. И Вам объяснили из-за чего.
А по поводу использования 21 колонки — да, действительно, при распределении уплат её использовать нельзя, т.к. вы распределяете уплаты, которые, как почему-то считают в 1С, фактически производили из итоговой суммы 4-й колонки ежемесячно (на самом деле и это не так, но это тема не этого спора). А вот при заполнении регистра НДФЛ используется 21-я, т.к. только она учитывает все изменения исчисленного налога (содержит в себе актуальное значение, в отличии от 4-й и 7-й). Не путайте пож-та себя и других.
И определитесь уже в с предметом спора.
«а с переходящими отпусками тут будет вообще полный швах » как было так и останется. А то что швах, не спорю. Но это вопрос религии. Верите метод. отделу 1С — получите «швах». Но вам же никто не мешает и другой подход применить.
Кстати, и сама 1С не настаивает на учете отпусков по периоду действия. И всех-то делов 0(ноль) на О(буква О) поменять. Но это уже совсем другая история…
(12) Можете не утруждаться. Я прекрасно знаю в каких ситуациях у Вас были связанные с этим ошибки. И с чем они связаны тоже.
Для себя же можете повозиться с этим, чтобы уяснить, наконец, разницу между 4-й и 21-й колонками.
(14) уважаемый, я, по-моему, не давал повода обращаться ко мне в таком тоне. и ругаться я нигде не ругался, не надо мне приписывать того, чего нет.
я просто справедливо указал на то, что ваше решение описанной ошибки является отходом от методологии формирования колонки «НУ1», принятой у 1С, что можно увидеть на примерах:
1. сотрудник только устроился на работу в текущем году
2. сотрудник отправлен в отпуск, приходящийся полностью или частично на месяца, отличные от месяца начисления
3. возможно, в каких-то ещё ситуациях, не было времени и желания изучать более подробно
в итоге картина может быть весьма плачевной, например, в документе Распределения перечисленного НДФЛ по методу «по удержанному» будет распределено по сотруднику (в ситуациях 1 и 2) меньше, чем с него было реально удержано, или вообще ничего на него не распределено.
моё решение — это именно исправление ошибки, без изменения методологии формирования колонки «НУ1».
и не надо считать себя умнее всех, все мы люди, и каждый имеет своё мнение. если кто-то решает использовать методологию по отпускным, отличную от принятой по умолчанию в 1С — пожалуйста, на это, как вы абсолютно справедливо заметили, существуют соответствующие разработки.
(16)
Неправда ваша. В указанных Вами случаях, уж не знаю что Вы понимаете под «распределено», но удержано в регистрах НДФЛ у меня столько же сколько и начислено (за исключением приема на работу — там во 2-м месяце удерживается за 1-й и 2-й, если выплат в 1-м месяце не было), а это как Вы знаете и есть «НУ1«. Что при этом может «не распределиться» ведомо только Вам. Я Вашим распределением не пользуюсь. При используемых мною способах распределения все распределяется правильно.
«вообще ничего на него не распределено» может быть только в одном случае — в месяце сотруднику либо ничего не начислено, либо не удержано.
Откуда проистекают Ваши заблуждения я вообще понять не могу. Очевидно, Вы не попробовали то, что Вам предложили, прежде чем предполагать что это «не работает», и тем более как это «не работает».
Протестировав Ваш алгоритм на случайных наборах входных данных пришла к выводу, что он может быть записан как:
//Налог13уВсего = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(НомерСтрокиСотрудника+12,10);
Для Сч = 1 По 12 Цикл
СтрокаМесяца=НомерСтрокиСотрудника+Сч;
Налог13и = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаМесяца,4);
Налог13у = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаМесяца,10);
ДоходыВычетыНалогиСотрудников.УстановитьЗначение(СтрокаМесяца,«НУ1»,Макс(Налог13у,Налог13и));
КонецЦикла;
Вот Вамxls-Файл для тестирования. Понажимайте F9, чтобы убедиться.
(17) я весьма даже попробовал, я даже накатил ваш «патч» на тестовую базу на 100 сотров, и сразу выявил описываемую картину.
т.е. человек, например, принят на работу в феврале, НДФЛ исчисл = 1300, НДФЛ удерж = 0, формируя документ распределения уплаты по методу «по удержанному» (хоть по штатному и глючному 1с-овскому алгоритму, хоть по улучшенному моему) за период февраль месяц, получаем гольный ноль, хотя зарплата, естественно, выплачена 14го марта, и НДФЛ, как положено, перечислен 14-го марта. примерно то же самое и в случае с отпуском, но там не ноль, а просто сумма меньше, чем надо. в итоге НДФЛ, удержанный и перечисленный с отпускных дяди Пети, «размазывается» по всем сотрам, по дяде Пете недоплата, по остальным переплаты.
так что предлагаю Вам самому попробовать ваш «патч» в действии на реальных базах, вместо того, чтобы удивляться, что и откуда у меня проистекает.
я обе своих разработки (эту и по распределению) опробовал на 7 юриках с общей численностью народа более 300 чел, с разными хитрыми ситуациями типа переходящих отпусков и больничных, принятий на работу в декабре, перемещений сотрудников между подразделениями с разными ОКАТО, неполных и излишних перечислений НДФЛ, и т.д. всё причёсано и отлажено, сдана и корректно принята годовая отчётность
(17) прошу прощения, что обращался как к особе мужского пола, только сейчас посмотрел Вашу личку
(18) весьма сомнительно, могут быть нюансы. но в понедельник погоняю на тестовой базе, отпишусь
(19) Я правильно понимаю, что в Вашем примере перечисляют НДФЛ в бюджет по исчисленному, а распределяют по удержанному?
«формируя документ распределения уплаты по методу «по удержанному» (хоть по штатному и глючному 1с-овскому алгоритму, хоть по улучшенному моему) за период февраль месяц, получаем гольный ноль, хотя зарплата, естественно, выплачена 14го марта».
Это как раз тот пример о котором я устала уже повторять. Если вы за принятого в феврале сотрудника перечислили 14 марта 1300 руб., то на каком основании вы сумму, перечисленную 14 марта, распределяете по сотрудникам «по удержанному»?
Если Вы так так хорошо понимаете логику 1С, то должны бы уяснить, что порядок распределения в Вашем примере:
-«по исчисленному», если вы 14 марта перечислили за принятого на работу 1300 руб., т.к. эти 1300 руб. вы взяли из НДФЛ исч.
-«по удержанному», если вы 14 марта перечислили за принятого на работу 0 руб., т.к. НДФЛ уд =0.
На мой взгляд, совершенно логично при распределении «по удержанному» за февраль получить «голый ноль», т.к. НДФЛ удерж в феврале «голый ноль» по рассматриваемому сотруднику.
Объясните мне зачем распределять «по удержанному» налог, собранный по НДФЛ исчисл, где, кстати, могли сидеть и отрицательные суммы (еще один источник расхождений при последующем распределении «по удержанному»)?
И еще вопрос. «я даже накатил ваш «патч» … выявил описываемую картину». А в регистре НДФЛ за период март месяц, какую сумму НДФЛ удержанного Вы получили по принятому сотруднику?
(18) погонял на тестовой базе. результат отработки данного алгоритма совпадает с моим почти во всех случаях, но не во всех. в одном случае картина получается разная: когда в текущем месяце сумма исчисленного НДФЛ отрицательная. в этом случае мой алгоритм даёт сумму НДФЛ уд. по этому сотруднику = 0, и сумма НДФЛ уд. выравнивается в след.месяце, где НДФЛ исчисл. >0. ваш — даёт сразу в этом месяце минусовой НДФЛ уд., что, в общем-то, неверно, ибо если сотрудник продолжает работать, и по нему «текут» суммы НДФЛ исч. и уд, то тогда вопросов нет, всё в итоге складывается корректно, а вот если сотрудник уволен (и минус получился в последний отработанный месяц), или минус пришёлся на декабрь — тут нарушается порядок возврата сотруднику излишне удержанного НДФЛ. т.е. цифры-то красивые получаются, а порядок возврата нарушен.
всем привет, кто нибудь смотрел 323 релиз, как там. иправлена данная ошибка ?
(25) нет
(24) «Мне вообще не понятен теперь смысл появления колонки НУ1 у 1С» в ЗиК столько тёмных пятен, что иногда аж страшно становится — что и откуда берётся 🙂
поэтому я и не склоняюсь к изменению штатного поведения — непонятно потом, где и что боком вылезет
(27) То, что иногда страшно становиться, то это точно, 5 юрлиц, три на упрощенке с льготами, плюс иносранцы 🙂
(25) В затрагиваемых местах тексты модулей не поменялись.
(27) А пока что штатное поведение «боком вылазит»
(29) Отлично просто, пока бухи не жалуются, менять ничего ну буду )
Конфигурацию придется снимать с поддержки ведь так?
(31) в 7-ке нет такого понятия. просто, если конфа в остальном типовая, после обновления данный «патч» нужно будет накатить заново