create procedure dbo.%PROC% @id numeric = null, -- ID Купона @calc_date datetime = null, -- Дата для расчета @nkd decimal(18,8) = 0 out as declare @nominal money declare @stock_sum_calc money declare @stock_type_calc_id money declare @days int declare @cd datetime declare @stock_curr_id numeric declare @notround_income_sum decimal(18, 8) -- Обнуляем время select @calc_date = convert(datetime,(convert(varchar(8), @calc_date, 3)), 3) -- Обнуляем НКД select @nkd = 0 --if @stock_qty is null -- select @stock_qty = 1 .GET_PROPS -- Проверка выхода за границы if (@calc_date < @date_b) OR (@calc_date > @date_e) return if @coupon_rate_ind = 2 begin -- Процент от номинала select @nominal=stock_nominal, @stock_sum_calc=stock_sum, @stock_type_calc_id=t_stock_types.stock_type_id from td_stock_emis,t_stock_types where td_stock_emis.id=@stock_id and t_stock_types.id=td_stock_emis.stock_type_id if @stock_type_calc_id=3 select @nominal=@stock_sum_calc if @nominal is null return IF @day_basis_code = 1 BEGIN SELECT @notround_income_sum = @nominal * @income_percent / 36000 END ELSE BEGIN SELECT @notround_income_sum = @nominal * @income_percent / 36500 END SELECT @income_sum = ROUND(@notround_income_sum * @coupon_period, 2) END -- @day_basis_code -- 1 - 30 дней в месяце (360 в году) -- 2 - Календарный месяц без 29 февраля (365 дней в году) -- 3 - Календарный месяц (365/366 дней в году) if @day_basis_code = 1 begin select @days = 360.0 * (datepart(year, @calc_date) - datepart(year, @date_b)) + 30.0 * (datepart(month, @calc_date) - datepart(month, @date_b)) + (datepart(day, @calc_date) - datepart(day, @date_b)) + 1 if datepart(day, @date_b) = 31 select @days = @days - 1 if datepart(day, @calc_date) = 31 select @days = @days - 1 end else if @day_basis_code = 2 begin -- Календарный месяц без 29 февраля (365 дней в году) -- 17.04.2006 -- select @days = datediff(day, @date_b, @calc_date) + 1 SELECT @days = DATEDIFF(DAY, @date_b, @calc_date) select @cd = @date_b -- Убираем 29 февраля WHILE @cd <= @calc_date begin if (datepart(month, @cd) = 2 ) and (datepart(day, @cd) = 29) select @days = @days -1 select @cd = dateadd(dd, 1, @cd) end end else begin -- Календарный месяц/ календарный год -- 17.04.2006 -- select @days = datediff(dd, @date_b, @calc_date) + 1 SELECT @days = DATEDIFF(DD, @date_b, @calc_date) end -- -- select @income_sum, @days, @coupon_period -- -- Округление заглушка select @stock_curr_id = td_stock_emis.id from td_stock_emis where td_stock_emis.id = @stock_id IF @stock_curr_id = .CUR('RUR') BEGIN -- Округляем до копеек SELECT @nkd = ROUND(@notround_income_sum * @days, 2) END ELSE BEGIN -- Валюта до пятого знака SELECT @nkd = ROUND(@notround_income_sum * @days, 5) END