Добрый день! Очень нужна помощь в доработке запроса. Нарыл очень похожую ко мне ситуацию
http://www.sql.ru/forum/851890-1/zapros-na-vyborkuПоясню суть: есть данные
год_ввода = 1977
тип=10
капитальный=ложь
первоначальная_стоимость=510
износ_эксп=15
дата_С=01.03.2015
дата_По=01.05.2015
Нужно применить следующий алгоритм расчета износа за период с 01.03.2015 по 01.05.2015 - 2 месяца:
А) на 01.04.2015:
1) Вычисляем количество лет в эксплуатации
у1=нынешний год - год_ввода = 2015-1977=38
2) Вычисляем количество оставшихся лет эксплуатации
если капитальный=ложь, то
y2 = 100 - у1 = 100-38=62
если капитальный=правда, то y2 = 70 - у1
3) Вычисляем износ на период 01.04.2015
износ_04 = (первоначальная_стоимость - износ_эксп / y2) / 12 = (510-15/62)/12 = 0,6653
где 12 - количество месяцев в году
ЕСЛИ в условие было бы с 01.03.2015 по 01.04.2015 то вот это число износ_04=0,6653 мне и нужно было вывести как результат
ИЗНОС_за_заданный период=износ_04=0,6653
НО так как период больше одного месяца расчет продолжается:
5) износ_с_учетом_04 = износ_эксп + износ_04 = 15 + 0,6653 = 15,6653
6) аналогично пункту 3:
износ_05=(первоначальная_стоимость - износ_с_учетом_04 / y2) / 12 =
(510-15,6653/62)/12 = 0,6644
7) ИЗНОС_за_заданный период = износ_04+износ_05=0,6653+0,6644=1,3297
Под этот алгоритм была сформированна формула в запрос:
Year(Date())-[год_ввода] AS Y1,
IIf([капитальный]=-1,70-Y1,IIf([тип]=10,100-y1,50-y1)) AS Y2,
(AGF(True,DateDiff('m',[дата_С],[дата_По]),[первоначальная_стоимость],[износ_эксп],Y2)*100)/100 AS износ_04,
(AGF(False,DateDiff('m',[дата_С],[дата_По]),[первоначальная_стоимость],[износ_эксп],Y2)*100)/100 AS износ_с_учетом_04,
(износ_с_учетом_04-[износ_эксп]) AS ИЗНОС_за_заданный период,
http://www.sql.ru/forum/1152778/zapros-amortizacii-iznosa