Вхождение одного периода в другой и количество дней при неполном вхождении в период

1. Дон Кихот 14.02.20 09:43 Сейчас в теме
Нужно решить следующую задачу для расчета пеней:
Ставка рефинансирования разная в разные периоды. Период ставки может полностью входить в период расчета пеней, но не всегда. Дата документа может находиться внутри периода действия ставки . Нужно получить количество дней вхождения периода ,в который нужно начислить пени, в период действия ставки рефинансирования.
Может такая задача решена уже и есть ссылка на решение.
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Дон Кихот 18.02.20 08:06 Сейчас в теме
Сделал следующим образом:
Сначала проверил входят ли крайние даты периода в период, во вхождение в который проверяем. Потом написал три условия на отдельное вхождение каждого и вхождение обоих одновременно.
В данном примере проверяем входит ли период от ДатаДок до ДатаБезНачисленияПеней в период от НачалоДня(Дата("20191216")) до КонецДня(Дата("20200209")).

ВхождениеДатыДокВПериод = ПолучитьВхождениеДатыДокВПериод(ДатаДок, НачалоДня(Дата("20191216")), КонецДня(Дата("20200209")));
ВхождениеДатаБезНачисленияПеней = ПолучитьВхождениеДатыДокВПериод(ДатаБезНачисленияПеней, НачалоДня(Дата("20191216")), КонецДня(Дата("20200209")));
Если ВхождениеДатыДокВПериод И ВхождениеДатаБезНачисленияПеней Тогда
СтрокаТЧСтавка = Объект.СтавкаИДнейВПериоде.Добавить();
СтрокаТЧСтавка.Дней = Цел((ДатаБезНачисленияПеней - ДатаДок)/(24*3600));
СтрокаТЧСтавка.Ставка = 6.25;
Иначе
Если ВхождениеДатыДокВПериод И Не ВхождениеДатаБезНачисленияПеней Тогда
СтрокаТЧСтавка = Объект.СтавкаИДнейВПериоде.Добавить();
СтрокаТЧСтавка.Дней = Цел((КонецДня(Дата("20200209")) - ДатаДок)/(24*3600));
СтрокаТЧСтавка.Ставка = 6.25;
Иначе
Если ВхождениеДатаБезНачисленияПеней И Не ВхождениеДатыДокВПериод Тогда
СтрокаТЧСтавка = Объект.СтавкаИДнейВПериоде.Добавить();
СтрокаТЧСтавка.Дней = Цел((ДатаБезНачисленияПеней - НачалоДня(Дата("20191216")))/(24*3600));
СтрокаТЧСтавка.Ставка = 6.25;
Иначе
Если ДатаДок < НачалоДня(Дата("20191216")) И ДатаБезНачисленияПеней > КонецДня(Дата("20200209")) Тогда
СтрокаТЧСтавка = Объект.СтавкаИДнейВПериоде.Добавить();
СтрокаТЧСтавка.Дней = 56;
СтрокаТЧСтавка.Ставка = 6.25;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;


Функция ПолучитьВхождениеДатыДокВПериод(ДатаДок, НачалоСтавки, КонецСтавки)
Если ДатаДок > НачалоСтавки И ДатаДок < КонецСтавки Тогда
Возврат Истина
Иначе
Возврат Ложь
КонецЕсли;

КонецФункции
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот