Для начала небольшой экскурс в методологию (цитата из статьи ИТС "Учет перечисленного в бюджет налога в разрезе физлиц"):
Учет перечисленного в бюджет НДФЛ в разрезе физических лиц в программе необходимо вести с целью автоматического формирования отчета "Регистр налогового учета по НДФЛ" и заполнения документов "Справка 2-НДФЛ" (как для сотрудника, так и для передачи в ИФНС) в части сумм перечисленного налога. Вести такой учет в специальном регистре обязывает статья 230 Налогового Кодекса РФ (далее НК РФ), о необходимости указывать такие суммы в справках 2-НДФЛ сказано в Приказе ФНС от 17 ноября 2010 г. N ММВ-7-3/611@.
Суммы перечисляемого в бюджет налога в общем случае могут не совпадать с суммами налога удержанного. Кроме того п. 1 ст. 230 НК РФ обязывает указывать в регистрах налогового учета реквизиты платежных документов, которыми была произведена уплата налога в бюджет РФ. Такой информации в подсистеме расчета зарплаты не содержится. Поэтому такие суммы регистрируются в программе отдельным документом "Перечисление НДФЛ в бюджет РФ".
Регистрация в учете сумм перечисленного налога осложняется тем, что НК РФ обязывает вести такой учет в отдельности по каждому физическому лицу, однако в бюджет налог перечисляется общей суммой, без указания по какому лицу какая сумма перечисляется. В настоящий момент не существует разъяснений контролирующих органов о том, как следует распределять перечисляемые в бюджет суммы налога между физическими лицами с целью ведения регистра налогового учета в соответствии с п. 1 ст. 230 НК. Поэтому методистами фирмы "1С" был предложен следующий подход к автоматизированному распределению сумм перечисленного налога.
В момент регистрации в учете удержанного НДФЛ (об этом моменте рассказано выше) в учете также регистрируется необходимость (обязанность) перечислить в бюджет удержанную по каждому физическому лицу сумму налога, при этом необходимость эта регистрируется в точности такой же датой, как и дата удержания налога. Т.к. необходимость перечислить налог напрямую связана с фактом удержания налога, а удержанный налог, как и исчисленный, регистрируется в учете в разрезе ставок налогообложения (13%, 30%, 9% и т.д.), месяцев налогового периода (т.е. месяцев, за который зарегистрирован доход и налог) и территориальной принадлежности (коды ОКАТО и КПП), то и суммы, необходимые к перечислению, регистрируются в разрезе этих признаков с целью обеспечения максимальной точности при распределении налога и отражении сведений о перечисленном налоге в регистре налогового учета.
Следующей датой в учете регистрируется факт перечисления налога в бюджет, т.е. вводится документ "Перечисление НДФЛ в бюджет РФ", в котором указывается общая сумма перечисленного налога, дата его перечисления, месяц налогового периода, ставка налогообложения, коды ОКАТО/КПП, а также реквизиты платежного документа. Общая сумма перечисленного налога, вручную указанная в документе, автоматически распределяется по физическим лицам пропорционально суммам, которые ранее (в момент удержания налога) были зарегистрированы как необходимые к перечислению.
Если общая перечисляемая сумма совпадает с общей суммой удержанного налога (т.е. удержанная сумма налога перечисляется полностью), то в результате такого распределения перечисленная сумма по каждому физическому лицу совпадет с суммой удержанной, зарегистрированной как необходимая к перечислению.
Конец цитаты.
В реальной жизни очень часто возникают ситуации, когда сумма перечисленного НДФЛ больше или наоборот меньше суммы НДФЛ удержанного.
В этих случаях программа ведет себя следующим образом:
1. Сумма НДФЛ перечисленного меньше чем НДФЛ удержанного: остаток недоперечисленной суммы НДФЛ "зависает" в регистре накопления "Расчеты налоговых агентов с бюджетом по НДФЛ" и "висит" до тех пор пока не будет введен еще один документ "Перечисление НДФЛ в бюджет". В этом документе необходимо будет указать месяц за который не до конца перечислен НДФЛ и заполнить его физ.лицами, имеющими этот остаток.
2. Сумма НДФЛ перечисленного больше чем НДФЛ удержанного: сумма излишне перечисленного налога записывается с минусом в регистр накопления "Расчеты налоговых агентов с бюджетом по НДФЛ". Такая задолженность на последующие месяцы налогового периода не переносится и не может быть зачтена в других месяцах. По словам методистов 1С, такой подход основывается на положениях НК РФ и подтверждается письмом ФНС от 19 октября 2011 г. N ЕД-3-3/3432@, в котором сказано: "… ежемесячное перечисление в бюджет суммы, превышающей сумму фактически удержанного из доходов физических лиц налога на доходы физических лиц, не является налогом. В таком случае налоговому агенту следует обратиться в налоговый орган с заявлением о возврате на расчетный счет организации суммы, не являющейся налогом на доходы физических лиц и ошибочно перечисленной в бюджетную систему Российской Федерации."
Если учет НДФЛ перечисленного на Вашем предприятии ведется в соответствии с вышеизложенными рекомендациями, Вы не допускаете наличия "положительных" или ,не дай бог, отрицательных остатков, тогда дальнейшее чтение статьи для Вас будет бесполезно !
На данный момент существуют 2 известные мне методики избавления от "висящих" остатков по НДФЛ перечисленному:
1. Написание обработки, которая будет анализировать "висящие остатки" и сама создавать документы "Перечисление НДФЛ в бюджет";
2. Изменение документа "Перечисление НДФЛ в бюджет" для закрытия "висящих" остатков одним документом.
Я предлагаю для рассмотрения второй вариант, а именно, добавление в модуль документа "Перечисление НДФЛ в бюджет" одной процедуры и одной функции, которые избавят Вас от "висящих" остатков в регистре накопления "Расчеты налоговых агентов с бюджетом по НДФЛ".
Но, для начала, давайте посмотрим как работает типовой механизм закрытия остатков по перечисленному НДФЛ.
Записи с "+" образовались при проведении двух документов "Начисление зарплаты" (за апрель и май 2011 года).
Записи с "-" движения стандартных документов "Перечисление НДФЛ в бюджет" (за апрель и май 2011 года).
Рассчитаем отстаток нераспределенной суммы НДФЛ (по месяцам налогового периода):
За апрель образовалась переплата = -446 = 2431 - 2877;
За май образовалась задолженность = 680 = 2431 - 1751.
В итоге имеем долг по перечисленному НДФЛ = 234 = 680 - 446.
Возникает вопрос, как закрыть задолженность и почему переплата за апрель не учлась в мае. Все просто! согласно письмом ФНС от 19 октября 2011 г. N ЕД-3-3/3432@ переплата за апрель не является налогом и автоматически зачитываться в типовой конфигурации не будет. Далее, чтобы зачесть задолженность за май необходимо ввести еще один документ "Перечисление НДФЛ в бюджет", в котором в качестве месяца, за который платят, будет указан май. Причем, именно май, т.к. например при перечислении налога за июнь неперечисленный НДФЛ за май автоматически зачитываться также не будет. При таком раскладе количество человеко часов работы бухгалтерии при хорошо разветвленной структуре фирмы и численности работников превышающей 2000 человек увеличивается до пугающих величин.
Теперь сравним с движениями измененного документа "Перечисление НДФЛ в бюджет".
Записи с "+", образовались при проведении трех документов "Начисление зарплаты" (за апрель, май и июнь 2011 года).
Записи с "-", сформированы изменными документами "Перечисление НДФЛ в бюджет" (за апрель, май и июнь 2011 года).
Рассчитаем отстаток нераспределенной суммы НДФЛ (по месяцам налогового периода):
Апрель: переплата = -446 = 2431 - 2877. Обрабтите внимание, что сумма переплаты, в отличие от типового механизма, записывается отдельно (в май 2011 года).
Май: задолженность = 234 = 2431 - 1751 - 446. Документ "Перечисление НДФЛ в бюджет" за май 2011 года зачел переплату за апрель в размере 446 рублей, после чего сумму оплаты в размере 1751 рубль посадил целиком в май. Т.к. суммы оплаты нехватает, чтобы полностью погасить задолженность, следовательно возникает долг = 234 рубля.
Июнь: задолженность гасится = 0 = 234 + 120 - 354. Документ "Перечисление НДФЛ в бюджет" за июнь 2011 года гасит долг за май в размере 234 рубля, а также гасит долг за июнь в размере 120 рублей.
Результатом работы измененного документа явилось полное погашение задолженности по НДФЛ без ввода дополнительных документов "Перечисление НДФЛ в бюджет" и корректировок регистра.
Что же необходимо сделать, чтобы этот механизм заработал?
Первое, что необходимо - получить остатки НДФЛ по месяцам налогового периода. За это отвечает функция "ПолучитьТаблицуРаспределенияПоФизлицу":
Функция ПолучитьТаблицуРаспределенияПоФизлицу(Физлицо) Экспорт
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| РасчетыНалоговыхАгентовСБюджетомПоНДФЛОстатки.ФизЛицо КАК ФизЛицо,
| НАЧАЛОПЕРИОДА(РасчетыНалоговыхАгентовСБюджетомПоНДФЛОстатки.МесяцНалоговогоПериода, МЕСЯЦ) КАК МесяцНалоговогоПериода,
| СУММА(РасчетыНалоговыхАгентовСБюджетомПоНДФЛОстатки.СуммаОстаток) КАК Долг
|ИЗ
| РегистрНакопления.РасчетыНалоговыхАгентовСБюджетомПоНДФЛ.Остатки(
| &Период,
| ФизЛицо = &Физлицо
| И Ставка = &Ставка
| И ОКАТО_КПП = &ОКАТО_КПП) КАК РасчетыНалоговыхАгентовСБюджетомПоНДФЛОстатки
|ГДЕ
| РасчетыНалоговыхАгентовСБюджетомПоНДФЛОстатки.СуммаОстаток <> 0
|
|СГРУППИРОВАТЬ ПО
| РасчетыНалоговыхАгентовСБюджетомПоНДФЛОстатки.ФизЛицо,
| НАЧАЛОПЕРИОДА(РасчетыНалоговыхАгентовСБюджетомПоНДФЛОстатки.МесяцНалоговогоПериода, МЕСЯЦ)
|
|УПОРЯДОЧИТЬ ПО
| ФизЛицо,
| МесяцНалоговогоПериода
|АВТОУПОРЯДОЧИВАНИЕ";
Запрос.УстановитьПараметр("Период" , Новый Граница(КонецДня(Дата), ВидГраницы.Включая));
Запрос.УстановитьПараметр("ОКАТО_КПП" , ОКАТО_КПП);
Запрос.УстановитьПараметр("Ставка" , Ставка);
Запрос.УстановитьПараметр("Физлицо" , Физлицо);
Результат = Запрос.Выполнить();
ТаблицаРезультат = Результат.Выгрузить();
Возврат ТаблицаРезультат;
КонецФункции
Теперь процедура формирования движений по регистру накопления "Расчеты налоговых агентов с бюджетом по НДФЛ":
Процедура СформироватьДвиженияПоФизлицу(Физлицо, Знач СуммаПеречислено)
ТаблицаРаспределения = ПолучитьТаблицуРаспределенияПоФизлицу(Физлицо);
ОтрицательныеСуммы = Новый ТаблицаЗначений;
ОтрицательныеСуммы.Колонки.Добавить("МесяцНалоговогоПериода", Новый ОписаниеТипов("Дата" , Новый КвалификаторыДаты(ЧастиДаты.Дата)));
ОтрицательныеСуммы.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,2)));
ПоложительныеСуммы = Новый ТаблицаЗначений;
ПоложительныеСуммы.Колонки.Добавить("МесяцНалоговогоПериода", Новый ОписаниеТипов("Дата" , Новый КвалификаторыДаты(ЧастиДаты.Дата)));
ПоложительныеСуммы.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,2)));
Для Каждого СтрокаТаблицаРаспределения из ТаблицаРаспределения Цикл
Если СтрокаТаблицаРаспределения.Долг > 0 Тогда
СтрокаТаблицы = ПоложительныеСуммы.Добавить();
СтрокаТаблицы.МесяцНалоговогоПериода = СтрокаТаблицаРаспределения.МесяцНалоговогоПериода;
СтрокаТаблицы.Сумма = СтрокаТаблицаРаспределения.Долг;
Иначе
СтрокаТаблицы = ОтрицательныеСуммы.Добавить();
СтрокаТаблицы.МесяцНалоговогоПериода = СтрокаТаблицаРаспределения.МесяцНалоговогоПериода;
СтрокаТаблицы.Сумма = -СтрокаТаблицаРаспределения.Долг;
КонецЕсли;
КонецЦикла;
// Закроем отрицательные суммы
Для Каждого СтрокаОтрицательныеСуммы из ОтрицательныеСуммы Цикл
ОсталосьРаспределить = СтрокаОтрицательныеСуммы.Сумма;
Распределено = 0;
Для Каждого СтрокаПоложительныеСуммы из ПоложительныеСуммы Цикл
Если СтрокаПоложительныеСуммы.Сумма > ОсталосьРаспределить Тогда
Движение = Движения.РасчетыНалоговыхАгентовСБюджетомПоНДФЛ.Добавить();
Движение.Период = ДатаПлатежа;
Движение.ФизЛицо = Физлицо;
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Организация = Организация;
Движение.МесяцНалоговогоПериода = СтрокаПоложительныеСуммы.МесяцНалоговогоПериода;
Движение.ОКАТО_КПП = ОКАТО_КПП;
Движение.Ставка = Ставка;
Движение.Сумма = ОсталосьРаспределить;
СтрокаПоложительныеСуммы.Сумма = СтрокаПоложительныеСуммы.Сумма - Распределено;
Распределено = Распределено + ОсталосьРаспределить;
ОсталосьРаспределить = 0;
Иначе
Движение = Движения.РасчетыНалоговыхАгентовСБюджетомПоНДФЛ.Добавить();
Движение.Период = ДатаПлатежа;
Движение.ФизЛицо = Физлицо;
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Организация = Организация;
Движение.МесяцНалоговогоПериода = СтрокаПоложительныеСуммы.МесяцНалоговогоПериода;
Движение.ОКАТО_КПП = ОКАТО_КПП;
Движение.Ставка = Ставка;
Движение.Сумма = СтрокаПоложительныеСуммы.Сумма;
Распределено = Распределено + СтрокаПоложительныеСуммы.Сумма;
ОсталосьРаспределить = ОсталосьРаспределить - СтрокаПоложительныеСуммы.Сумма;
СтрокаПоложительныеСуммы.Сумма = 0;
КонецЕсли;
Если ОсталосьРаспределить = 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если Распределено > 0 Тогда
Движение = Движения.РасчетыНалоговыхАгентовСБюджетомПоНДФЛ.Добавить();
Движение.Период = ДатаПлатежа;
Движение.ФизЛицо = Физлицо;
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Организация = Организация;
Движение.МесяцНалоговогоПериода = СтрокаОтрицательныеСуммы.МесяцНалоговогоПериода;
Движение.ОКАТО_КПП = ОКАТО_КПП;
Движение.Ставка = Ставка;
Движение.Сумма = -Распределено;
СтрокаОтрицательныеСуммы.Сумма = ОсталосьРаспределить - Распределено;
КонецЕсли;
КонецЦикла;
// Сформируем записи на оставшиеся положительные суммы
Для Каждого СтрокаПоложительныеСуммы из ПоложительныеСуммы Цикл
Если СтрокаПоложительныеСуммы.Сумма = 0 Тогда
Продолжить;
КонецЕсли;
Движение = Движения.РасчетыНалоговыхАгентовСБюджетомПоНДФЛ.Добавить();
Движение.Период = ДатаПлатежа;
Движение.ФизЛицо = Физлицо;
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Организация = Организация;
Движение.МесяцНалоговогоПериода = СтрокаПоложительныеСуммы.МесяцНалоговогоПериода;
Движение.ОКАТО_КПП = ОКАТО_КПП;
Движение.Ставка = Ставка;
Движение.Сумма = Мин(СтрокаПоложительныеСуммы.Сумма, СуммаПеречислено);
СуммаПеречислено = СуммаПеречислено - Движение.Сумма;
Если СуммаПеречислено = 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
// Оставшуюся переплату нужно посадить месяц налого периода из форму документа
Если СуммаПеречислено > 0 Тогда
МесяцНалоговогоПериода = НачалоМесяца(МесяцНалоговогоПериода);
Движение = Движения.РасчетыНалоговыхАгентовСБюджетомПоНДФЛ.Добавить();
Движение.Период = ДатаПлатежа;
Движение.ФизЛицо = Физлицо;
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Организация = Организация;
Движение.МесяцНалоговогоПериода = МесяцНалоговогоПериода;
Движение.ОКАТО_КПП = ОКАТО_КПП;
Движение.Ставка = Ставка;
Движение.Сумма = СуммаПеречислено;
КонецЕсли;
КонецПроцедуры
И, наконец, комментируем строки типовой процедуры "ОбработкаПроведения()" и добавляем вызов процедуры "СформироватьДвиженияПоФизлицу()":
Если Не Отказ Тогда
//Движение = Движения.РасчетыНалоговыхАгентовСБюджетомПоНДФЛ.ДобавитьРасход();
//ЗаполнитьЗначенияСвойств(Движение, ЭтотОбъект, "Организация, МесяцНалоговогоПериода, Ставка, ОКАТО_КПП");
//Движение.Период = ДатаПлатежа;
//ЗаполнитьЗначенияСвойств(Движение, СтрокаТЧ, "ФизЛицо, Сумма");
СформироватьДвиженияПоФизлицу(СтрокаТЧ.ФизЛицо, СтрокаТЧ.Сумма);
КонецЕсли;
Надеюсь, что данная статья поможет Вам в дальнейшей работе.