Каталог решений - Для специалиста 1С : Работаем с АшиПками, релиз 281 и 282 1С 7.7 БухУчет , Украина, 2011 г. Дополнение.

Для специалиста 1С : Работаем с АшиПками, релиз 281 и 282 1С 7.7 БухУчет , Украина, 2011 г. Дополнение.

Для специалиста 1С : Работаем с АшиПками, релиз 281 и 282 1С 7.7 БухУчет , Украина, 2011 г. Дополнение.

В наличии

Выявлена ошибка в расчете НДФЛ.
Она проявляется, когда есть две ставки налогов — 15 и 17 %.

Категория:

Описание

В продолжение темы от kompas-dm (//sale.itcity.ru/public/81660/) столкнулся с такой бедой:

Заказчик утверждает, что при расчете НДФЛ в случае, если начисленная зарплата превышает макимальную сумму, которая может облагаться ЕСВ (на 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. Не спрашивайте меня, где это люди такую официальную зарплату получают, самому завидно, блин 🙂

 


has been added to your cart:
Оформление заказа