Каталог решений - Определение количества лет между двумя датами в запросе

Определение количества лет между двумя датами в запросе

Определение количества лет между двумя датами в запросе

В наличии

Фрагмент запроса для определения количества лет между двумя датами для решения задачи простых процентов.

Категория:

Описание

Для задачи начисления простых процентов (пени, вклады без капитализации процентов) при использовании годовой ставки необходимо вычислить дробное количество лет. Например, человек открыл вклад без капитализации процентов 01.10.2018 и решил досрочно закрыть его из-за коронавирусного кризиса 01.04.2020. Сколько всего он получил процентов по вкладу? В 2018 году это будут проценты за 92 дня или 0,252 года; в 2019 – за целый год; а в 2020 за те же 92 дня, но это будет 0,251 года, поскольку 2020 – високосный. Итого получаются проценты за 1,503 года. Количество лет нам заранее неизвестно, поэтому проще всего произвести такой расчет в цикле, перебрать каждый год, и вычислить для него долю года, для которой нужно рассчитать процент с учетом количества дней в каждом году. Например, вот так:

КоличествоЛет = 0;
НачалоИнтервала = ДатаНачалаРасчета;
КонецИнтервала = ?(Год(ДатаНачалаРасчета) = Год(ДатаОкончанияРасчета), КонецДня(ДатаОкончанияРасчета), КонецГода(ДатаНачалаРасчета));

Пока НачалоИнтервала < ДатаОкончанияРасчета Цикл
	КоличествоЛет = КоличествоЛет + (КонецИнтервала - НачалоДня(НачалоИнтервала) + 1) / (КонецГода(КонецИнтервала) - НачалоГода(НачалоИнтервала) + 1);
	НачалоИнтервала = КонецИнтервала + 1;
	КонецИнтервала =?(Год(НачалоИнтервала) = Год(ДатаОкончанияРасчета), КонецДня(ДатаОкончанияРасчета), КонецГода(НачалоИнтервала));
КонецЦикла;

Но что если нам нужно вычислить количество лет в запросе? В языке запросов 1С нет возможности организовывать циклы. Здесь нам поможет тот факт, что дробными могут быть только два крайних года, а годы, расположенные внутри отрезка всегда окажутся целыми, сколько бы их ни было. Таким образом, задача от неопределенного числа итераций сводится к трем:

  1. Вычислить количество полных лет внутри интервала
  2. Вычислить долю первого года
  3. Вычислить долю последнего года                                     

Что довольно лаконично формулируется на языке запросов:

ВЫБОР
	КОГДА РАЗНОСТЬДАТ(ДатаНачалаРасчета, ДатаОкончанияРасчета, ГОД) > 1
		ТОГДА РАЗНОСТЬДАТ(ДатаНачалаРасчета, ДатаОкончанияРасчета, ГОД) - 1
	ИНАЧЕ 0
КОНЕЦ
+ 
ВЫБОР
	КОГДА РАЗНОСТЬДАТ(ДатаНачалаРасчета, ДатаОкончанияРасчета, ГОД) > 0
		ТОГДА (РАЗНОСТЬДАТ(ДатаНачалаРасчета, КОНЕЦПЕРИОДА(ДатаНачалаРасчета, ГОД), ДЕНЬ) + 1)
				 / (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДатаНачалаРасчета, ГОД), КОНЕЦПЕРИОДА(ДатаНачалаРасчета, ГОД), ДЕНЬ) + 1)
		 	+ (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДатаОкончанияРасчета, ГОД), ДатаОкончанияРасчета, ДЕНЬ) + 1)
		 		 / (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДатаОкончанияРасчета, ГОД), КОНЕЦПЕРИОДА(ДатаОкончанияРасчета, ГОД), ДЕНЬ) + 1)
	ИНАЧЕ (РАЗНОСТЬДАТ(ДатаНачалаРасчета, ДатаОкончанияРасчета, ДЕНЬ) + 1)
			 / (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДатаНачалаРасчета, ГОД), КОНЕЦПЕРИОДА(ДатаОкончанияРасчета, ГОД), ДЕНЬ) + 1)
КОНЕЦ

 

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