Добрый день. камин 1.2.200. Столкнулся с тем, что по сотруднику, чей доход превысил предел 5000, неверно рассчитывается НДФЛ 15.
в файле расчета NDFL16.ERT в процедуре РассчитатьПНс2021(п_Сотрудник, п_Сумма, Скидка)
Если ДатаГод(л_ДатаДок)> 2020 Тогда
л_Предел = СоздатьОбъект("Справочник.ПределыПН");
п_ОблагаемыйОстаток = л_ОблагаемыйДоход;
п_ОблагаемыйОстаток15 = 0;
л_Предел.ПорядокРеквизита("ВерхнийПредел");
л_Предел.ИспользоватьВладельца(ШкалаПН);
л_Предел.ВыбратьЭлементы();
ПНРег15 = 0;
Пока л_Предел.ПолучитьЭлемент() <> 0 Цикл
Если п_ОблагаемыйОстаток <= 0 Тогда
Прервать;
Конецесли;
Если л_Предел.Процент = 15 Тогда
ПНРег15= п_ОблагаемыйОстаток * л_Предел.Процент / 100;
СуммаДохода15 = ?(п_ОблагаемыйОстаток<л_ОблагаемыйДоход-л_ИтДоход,п_ОблагаемыйОстаток,л_ОблагаемыйДоход-л_ИтДоход);
п_ОблагаемыйОстаток15 = п_ОблагаемыйОстаток;
КонецЕсли;
п_ОблагаемыйОстаток = п_ОблагаемыйОстаток - л_Предел.ВерхнийПредел;
ПНРег15 = Окр(ПНРег15,ШкалаПН.ОкруглениеПН,1);
Конеццикла;
//ПНРег15 = ПНРег15 - ПНУдержан15 - ПНРегМес15; было в релизе
ПНРег15 = ПНРег15 - ПНУдержан15; // исправил
л_Доход15 = п_ОблагаемыйОстаток15 - ВаловыйДоход15;
//СуммаДохода15 = ПНРег15*100/15.
//м_ТаблицаРасчета.Доход15 = ПНРег15*100/15; // было в релизе, но некорректно, в справку 2 НДФЛ выходили копейки (частный случай у меня вместо 5000000,00 вышло 5000002,25
м_ТаблицаРасчета.Доход15 = л_Доход15;
я могу быть неправ, но считало неправильно, после исправления вроде как стало нормально.
и в модуле документа ВыплатаМР модуль формы процедура РассчитатьНДФЛ()
внес исправления для корректного переноса расчета, а именно Доход15, т.к.
Доход15 = (л_ОбщНДФЛ15*(СуммаНачислено)/(л_ОбщДоход))*100/15; выдаст некорректную сумму, из за округления ндфл15 до рублей, и обратный пересчет, как уже писал выше, выдаст сумму базыНДФЛ15 в разнице до 0,5 /0,13 = 4 рублей
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
л_Стр = 0;
Если л_ТаблицаРасчетов.НайтиЗначение(Сотрудник,л_Стр,"Сотрудник")=0 Тогда
Продолжить;
КонецЕсли;
л_ОбщДоход = л_ТаблицаРасчетов.ПолучитьЗначение(л_Стр,"Доход");
л_ОбщНДФЛ = л_ТаблицаРасчетов.ПолучитьЗначение(л_Стр,"НДФЛ");
л_ОбщНДФЛ15 = л_ТаблицаРасчетов.ПолучитьЗначение(л_Стр,"НДФЛ15");
л_Скидка = л_ТаблицаРасчетов.ПолучитьЗначение(л_Стр,"Скидки");
// добавлено
л_ОбщДоход15 = л_ТаблицаРасчетов.ПолучитьЗначение(л_Стр,"Доход15");
//
//НДФЛ = Окр(л_ОбщНДФЛ*(СуммаНачислено - л_Скидка)/(л_ОбщДоход - л_Скидка),ШкалаПН.ОкруглениеПН,1);
//НДФЛ15 = Окр(л_ОбщНДФЛ15*(СуммаНачислено - л_Скидка)/(л_ОбщДоход - л_Скидка),ШкалаПН.ОкруглениеПН,1);
//Доход15 = (л_ОбщНДФЛ15*(СуммаНачислено - л_Скидка)/(л_ОбщДоход - л_Скидка))*100/15;
Если л_ОбщДоход<>0 Тогда
НДФЛ = Окр(л_ОбщНДФЛ*(СуммаНачислено)/(л_ОбщДоход),ШкалаПН.ОкруглениеПН,1);
НДФЛ15 = Окр(л_ОбщНДФЛ15*(СуммаНачислено)/(л_ОбщДоход),ШкалаПН.ОкруглениеПН,1);
//Доход15 = (л_ОбщНДФЛ15*(СуммаНачислено)/(л_ОбщДоход))*100/15;
// добавлено
Доход15 = (л_ОбщДоход15*(СуммаНачислено)/(л_ОбщДоход));
// добавлено
КонецЕсли;
//НДФЛ = Окр(л_ОбщНДФЛ,ШкалаПН.ОкруглениеПН,1);
//НДФЛ15 = Окр(л_ОбщНДФЛ15,ШкалаПН.ОкруглениеПН,1);
//Доход15 = л_ОбщНДФЛ15*100/15;
КонецЦикла;
могу ошибаться, прошу проверить и поправить в следующем релизе.