Для специалиста 1С : Работаем с АшиПками, релиз 281 и 282 1С 7.7 БухУчет , Украина, 2011 г. Дополнение.
Выявлена ошибка в расчете НДФЛ.
Она проявляется, когда есть две ставки налогов — 15 и 17 %.
- Описание
- Подробнее
Описание
В продолжение темы от
Заказчик утверждает, что при расчете НДФЛ в случае, если начисленная зарплата превышает макимальную сумму, которая может облагаться ЕСВ (на 01.01.2011 это 14115.00 грн), то в таком случае суммой, которая облагается НДФЛ по ставке 17% должна быть сумма превышения за вычетом разницы между максимальной суммой обложения ЕСВ и пределом НДФЛ, умноженной на ставку налога ЕСВ.
По-моему, как-то сумбурно объяснил, лучше поясню на примере (пример выдан заказчиком).
Максимальная сумма для обложения ЕСВ = 14115.00 грн
Предел НДФЛ = 9410.00 грн
Начислено сотруднику = 28950.00 грн
Считаем:
1. 9410.00 — (9410.00 * 3,6%) = 9071.24
2. 28950.00 — 9410.00 = 19540.00
3. 19540.00 — [(14115.00 — 9410.00) * 3,6%] = 19370.62
4. (9071.24 * 15%) + (19370.62 * 17%) = 4653.70 — это сумма подоходного налога.
Для реализации вышесказанного пришлось маленько дописать код, который предложил kompas-dm
// определим максимальную базу, с которой удерживается ЕСВ
НалогЕСВ = СоздатьОбъект(«Справочник.НалогиОтчисления»);
НалогЕСВ.НайтиПоКоду(«ЕдиныйВзнос»);
Если ПустоеЗначение(НалогЕСВ) = 1 Тогда
ПараметрБазы = НалогЕСВ.Дополнительно.Получить(КонецПериода);
Если Найти(ПараметрБазы,«Макс. база») > 0 Тогда
СимволРавно = Найти(ПараметрБазы,«=»);
МаксимальнаяБазаЕСВ = Число(Сред(ПараметрБазы,СимволРавно + 1));
Иначе
МаксимальнаяБазаЕСВ = 999999999999.99;
КонецЕсли;
Иначе
МаксимальнаяБазаЕСВ = 999999999999.99;
КонецЕсли;
// если начисленная ЗП превышает максимум обложения ЕСВ, то считать надо не так (по утверждению заказчика)
// в этом случае ЕСВ должно удерживаться только с разницы между максимальной суммой,
// которая облагается ЕСВ и пределом НДФЛ
НачисленоВсего = ОблагаемаяБаза + Вычеты;
Если (НачисленоВсего <= МаксимальнаяБазаЕСВ) Тогда
// при расчете аванса НачисленоВсего может равняться нулю, следовательно, выскочит
// ошибка «Деление на 0». Предупредим этот нюанс 🙂
Если НачисленоВсего <> 0 Тогда
ПределНДФЛ = ноНДФЛ.Предел.Получить(КонецПериода);
СуммаВпределе= Мин(НачисленоВсего,ПределНДФЛ);
КоэфЕснВпределе=СуммаВпределе/(НачисленоВсего); // здесь «опасный» участок
КоЭфЕСнЗаПределом =1—КоэфЕснВпределе;
ЕСНвПределе=окр(вычеты* КоэфЕснВпределе,2);
ЕСНзаПределом=вычеты—ЕСНвПределе;
Подоходный15= окр((Мин(НачисленоВсего,ПределНДФЛ)-ЕСНвПределе)*ноНДФЛ.Ставка.Получить(КонецПериода),2);
Подоходный17=окр((Макс(НачисленоВсего—ПределНДФЛ,0)-ЕСНзаПределом)*ноНДФЛ2.Ставка.Получить(КонецПериода),2);
Подоходный=Подоходный15+Подоходный17;
КонецЕсли;
Иначе
// получим пределы и ставки
ПределНДФЛ = ноНДФЛ.Предел.Получить(КонецПериода);
Ставка15 = ноНДФЛ.Ставка.Получить(КонецПериода);
Ставка17 = ноНДФЛ2.Ставка.Получить(КонецПериода);
СтавкаЕСВ = ноЕСВСотр.Ставка.Получить(КонецПериода);
// начинаем считать
База15 = ПределНДФЛ — (ПределНДФЛ * СтавкаЕСВ);
База15 = Окр(База15,2);
СуммаПревышения = НачисленоВсего — ПределНДФЛ;
База17 = СуммаПревышения — СтавкаЕСВ * (МаксимальнаяБазаЕСВ — ПределНДФЛ);
База17 = Окр(База17,2);
Подоходный15 = Ставка15 * База15;
Подоходный17 = Ставка17 * База17;
Подоходный15 = Окр(Подоходный15,2);
Подоходный17 = Окр(Подоходный17,2);
Подоходный = Подоходный15 + Подоходный17;
КонецЕсли;
Этот код вставляется в документе «Начисление ЗП» в модуле формы документа в процедуре РассчитатьСтроку() вместо вот этого куска:
// с 2011 года по схеме
ПределНДФЛ = ноНДФЛ.Предел.Получить(КонецПериода);
Подоходный = Мин(ОблагаемаяБаза,ПределНДФЛ)*ноНДФЛ.Ставка.Получить(КонецПериода) +
Макс(ОблагаемаяБаза—ПределНДФЛ, 0)*ноНДФЛ2.Ставка.Получить(КонецПериода);
PS. Не спрашивайте меня, где это люди такую официальную зарплату получают, самому завидно, блин 🙂

