Я вообще не понимаю зачем 1С решила рассчитывать сумму ежемесячного платежа самостоятельно.
Единственный вариант применения - чтоб не вводить вручную.
Хотя проще уже было бы разработать умную настраиваемую загрузку из файла Excel.
Беда в том что этот расчет мешает заполнить цифры вручную
А какие даты платежей закреплены в договоре. И тут у банков свистопляска.
Может конечно у меня не такой уж и большой кредитный портфель, но я имел дело с такими банками как Сбербанк, Райффайзенбанк, Почта Банк, Хоум Кредит, ОТП-Банк. У всех дата платежа в определенный день месяца, и у 3 из 5 расчет процентов сошелся с моим ручным расчетом в экселе, общая сумма расхождения в пределах 10 копеек.
Предполагаю, что так в большинстве остальных банков, поэтому предложенный мной вариант вполне должен подойти большинству пользователей.
Вот конфа с моими изменениями, может кто-нибудь протестирует, выразит своё мнение:
https://1drv.ms/u/s!AiTJ0DSrFd5Hjudl8DrZmf8qQv9ssw
Единственный вариант применения - чтоб не вводить вручную.
Та это понятно, но алгоритм расчета они свой придумали, возможно, универсальный, но совершенно не удовлетворяющий требованиям законодательства. Я код посмотрел и офигел. Если бы какое-нибудь юр.лицо использовало формулу расчета процентов, как сделано сейчас в 1С:Деньги, налоговики обязательно придрались бы к этому.
Хотя проще уже было бы разработать умную настраиваемую загрузку из файла Excel.
Я "ЗА" всеми руками и ногами, раз не смогли сделать более автоматический расчет, наиболее приближенный к расчетам банка.
Буду некропостером, но формула у них странная. Она выдает графики которые не бьются со многими онлайн-калькуляторами.
Вот так они считают:
КоэффициентПлатежа = СтавкаМесяца / (1 - Pow( 1 + СтавкаМесяца, -((КоличествоМесяцев-1)-1) ));
ЕжемесячныйПлатеж = Окр(СуммаКредита * КоэффициентПлатежа, 2, 1);
А вот так я переписал по формуле, которую предоставляют многие сайты:
КоэффициентПлатежа = СтавкаМесяца / (1 - Pow( 1 + СтавкаМесяца, -КоличествоМесяцев)); /// МОЕ
ЕжемесячныйПлатеж = Окр(СуммаКредита * КоэффициентПлатежа, 2, 1);
И сразу платеж стал совпадать с калькуляторами и даже со сбером.
Но это половина беды. У них еще и не правильно считаются проценты в месячном платеже. А все из-за того, что они не правильно определяют количество дней в интервале. Смотрим код:
Дней = (КонецМесяца(СтрокаГрафика.ПлановаяДата) - Макс(НачалоМесяца(СтрокаГрафика.ПлановаяДата), ДатаПолучения + 86400)) / 86400;
Расшифровываю: они берут количество дней в месяце следующего планового платежа.
Пример: У вас следующая плановая дата платежа 10 октября. Между 10 сентября и 10 октября у нас по календарю 30 дней. По приведенной выше формуле получится 31.
Я решил это "в лоб", сдвигая все даты на месяц назад.
Дней = (КонецМесяца(ДобавитьМесяц(СтрокаГрафика.ПлановаяДата, -1)) - Макс(НачалоМесяца(ДобавитьМесяц(СтрокаГрафика.ПлановаяДата, -1)), ДобавитьМесяц(ДатаПолучения, -1) + 86400)) / 86400; // МОЕ
Теперь платеж соответствует большинству графиков и проценты в графике отличаются на копейки. Меня эти две правки устроили в полной мере.
Кривизна не в мелких+- день, а в том что не надо так считать.
Все банки считают ставку не за месяц а за СУТКИ. Суточная ставка помножается на остаток долга на начало периода расчета (кредитного интервала -условный месяц) и на число дней в интервале.
И не надо мудрить со степенями процентов это полнейший бред. Математически, в абстрактно ваккумной теории, это дает тот же результат, но не в жизни с округлениями.
Ну и таки да ). Надо корректно рассчитывать кредитные интервалы. И они не всегда ровные, особенно хороши интервалы что первый рабочий день после окончания месяца. А еще бывают високосные года когда в феврале 29 дней.