-- new 20/05/05 create procedure dbo.%PROC% @owner_id numeric, @plan_id numeric, @out_method_id numeric, @deb_or_cred int, -- На Дебете (1) или кредите лежат активы @home_acc_id numeric, --- 100 @ext_acc_id numeric, --- 200 или 5 @unkd_acc_id numeric, @pnkd_acc_id numeric, @pereoc_acc_id numeric, @profloss_fut_acc_id numeric, @lf_subc_type_id numeric, @oper_date datetime, @out_qty money, @comment_str varchar(255), @home_subc_str varchar(255), @ext_subc_str varchar(255), @pnkd_subc_str varchar(255), @action_history_id numeric, @is_com_in int, @res_total_out_sum money out, @res_total_qty_sum money out, @res_total_unkd_sum money out, @res_total_unkd_qty_sum money out, @res_total_pereoc_sum money out, @res_total_pereoc_qty_sum money out, @res int out, @res_total_com_in money out, @res_total_nkd2portf_sum money out, @res_total_nkd2portf_acc_sum money out, @res_total_out_acc_sum money out, ---Бал. сумма списания в валюте @res_total_unkd_acc_sum money out, ---Сумма списания УНКД в валюте @res_total_vbr_sum money out, @res_oper_sum_close money out, @type_redemption NUMERIC = 1, @rate_face_value MONEY = 100 as begin SELECT @type_redemption = ISNULL(@type_redemption, 1) DECLARE @all_sum_my MONEY, @op_sum_lf_my MONEY, @acc_sum_long_my MONEY, @long_acc_sum_my MONEY, @bo1_comis_bal_sum_my MONEY, @bo1_unkd_bal_sum_my MONEY, @bo1_unkd_acc_sum_my MONEY, @op_sum_acc_lf_my MONEY .NAME_VAR(@saldo_subc_str) .ID_VAR(@id) .ID_VAR(@action_id) .ID_VAR(@bo1_d_acc_id) .ID_VAR(@bo1_c_acc_id) .ID_VAR(@bo1_d_cur_id) .ID_VAR(@bo1_c_cur_id) .ID_VAR(@plan_cur_id) .MONEY_VAR(@bo1_com_in_sum) .MONEY_VAR(@zatr_sum) .MONEY_VAR(@bo1_com_acc_in_sum) .MONEY_VAR(@bo1_com_in_qty) .MONEY_VAR(@bo1_com_qty_in_sum) .ID_VAR(@plan2partner_id) .NAME_VAR(@bo1_d_subc) .NAME_VAR(@bo1_c_subc) .NAME_VAR(@mess) .NAME_VAR(@subc_nkd_in) .ID_VAR(@un1_d_acc_id) .ID_VAR(@un1_c_acc_id) .ID_VAR(@p1_c_acc_id) .ID_VAR(@p1_d_acc_id) .ID_VAR(@inv_type_subc_id) .ID_VAR(@fin_result) .ID_VAR(@fin_result_zatr) .ID_VAR(@character_id) .ID_VAR(@investor_id) .NAME_VAR(@coupon_subc) .NAME_VAR(@un1_d_subc) .NAME_VAR(@un1_c_subc) .NAME_VAR(@subc_com_in) .NAME_VAR(@subc_str) .NAME_VAR(@bo1_comm) .NAME_VAR(@bo1_comm_add1) .NAME_VAR(@bo1_comm_add2) .NAME_VAR(@bo1_comm_add3) .MONEY_VAR(@total_unkd_sum) .MONEY_VAR(@total_unkd_qty_sum) .MONEY_VAR(@bo1_unkd_bal_sum) .MONEY_VAR(@bo1_unkd_qty_sum) .MONEY_VAR(@bo1_unkd_acc_sum) .MONEY_VAR(@total_pereoc_sum) .MONEY_VAR(@total_pereoc_qty_sum) .MONEY_VAR(@total_unkd_acc_sum) .MONEY_VAR(@bo1_pereoc_bal_sum) .MONEY_VAR(@bo1_pereoc_qty_sum) .MONEY_VAR(@bo1_pereoc_acc_sum) .MONEY_VAR(@bo1_bal_sum) .MONEY_VAR(@bo1_qty_sum) .MONEY_VAR(@bo1_accur_sum) .INT_VAR(@deb_or_cred_unkd) .INT_VAR(@deb_or_cred_pereoc) .ID_VAR(@com_in_acc_id) .ID_VAR(@nkd2portf_acc_id) .ID_VAR(@lf_subc_item_id) .NAME_VAR(@pereoc_const_s) -- letsko_av -- 14.09.2005 -- Изменения для новой справки СЧА .ID_VAR(@pif_pereoc_acc_id) .MONEY_VAR(@bo1_comis_bal_sum) .MONEY_VAR(@bo1_comis_qty_sum) .MONEY_VAR(@bo1_comis_acc_sum) .NAME_VAR(@comis_subc) -- letsko_av (end) select @plan2partner_id = .PLAN2PARTNER_ID(@owner_id,@plan_id) select @pereoc_const_s = .GET_CONST('IS_PEREOC_OUT_IN_DEAL') declare @is_realiz int, @is_p2l_comis int, @is_acc int, @is_com_in1 int, @is_allow_short4stocks int, @is_allow_short4money int, @asset4pereoc_type_id numeric, @broker_id numeric, @back_money_plan_id numeric, @back_securs_plan_id numeric /************************/ .BACK_GET_ORG_PARMS(@owner_id,@broker_id,@back_money_plan_id,@back_securs_plan_id,@out_method_id,@is_realiz,@is_p2l_comis,@is_com_in1,@is_allow_short4stocks,@is_allow_short4money,@asset4pereoc_type_id) --Богаковский 15/07/04 Отладочный селект --select @out_method_id as '.BACK_GET_ORG_PARMS выходной параметр @out_method_id' /************************/ if @is_com_in=1 begin -- .ACCID_FROM_CONST2PLAN(@com_in_acc_id,'BACK_ACC_PROFIT_BAYSALE_COMIS',@plan_id,1,1,'Прибыль-убыток по комиссиям',@mess) if @deb_or_cred =1 begin .ACCID_FROM_CONST2PLAN(@com_in_acc_id,'BACK_ACC_COM_IN',@plan_id,1,1,'Счет затрат на приобретение',@mess) .ACCID_FROM_CONST2PLAN(@nkd2portf_acc_id,'BACK_ACC_NKD_IN_PORTFOLIO',@plan_id,1,1,'Счет НКД за нахождение в портфеле',@mess) end else begin .ACCID_FROM_CONST2PLAN(@com_in_acc_id,'BACK_ACC_COM_OUT',@plan_id,1,1,'Счет затрат при продаже',@mess) end end .ASSIGN(@saldo_subc_str,@home_subc_str) ---select @saldo_subc_str .SUBC_STR_DEL(@saldo_subc_str,@lf_subc_type_id) .SUBC_STR_DEL(@saldo_subc_str,'PORTFOLIO') select @inv_type_subc_id=.SUBCTYPE_FROM_CODE('INVESTORS') .GET_ITEM_FROM_TYPE_SUBC_STR(@home_subc_str,@lf_subc_type_id,@lf_subc_item_id) ---.GET_ITEM_FROM_TYPE_SUBC_STR(@home_subc_str,@stock_type_subc_id,@stock_id) .GET_ITEM_FROM_TYPE_SUBC_STR(@home_subc_str,@inv_type_subc_id,@investor_id) DECLARE @my_stock_id NUMERIC, @my_stock_nominal MONEY, @my_first_nominal MONEY, @stock_type_subc_id NUMERIC SELECT @stock_type_subc_id = .SUBCTYPE_FROM_CODE('STOCK_EMIS') .GET_ITEM_FROM_TYPE_SUBC_STR(@home_subc_str, @stock_type_subc_id, @my_stock_id) SELECT @my_stock_nominal = stock_nominal, @my_first_nominal = first_nominal FROM td_stock_emis WHERE id = @my_stock_id if exists(select 1 from tb_contracts where id=@investor_id) begin select @fin_result=(select fin_result from tb_contracts where id=@investor_id) select @character_id=2 if @fin_result is null .EXIT_MESSAGE('У клиента не задано ведение финансового результа') end else begin select @fin_result=1 select @character_id=1 end if @plan_id=(select .ARG_PLAN('PIF_ACCOUNT')) select @fin_result=1 .ASSIGN(@coupon_subc,@saldo_subc_str) .SUBC_STR_CONVERT(@saldo_subc_str,1) --- Получение балансовой стоимости declare @subc_pif_str varchar(255) select @subc_pif_str=@saldo_subc_str .SUBC_STR_DEL(@subc_pif_str,'INVESTOR2PORTFOLIO') .SUBC_STR_DEL(@subc_pif_str,'INVESTORS') .SUBC_STR_DEL(@subc_pif_str,'DOC_SEC') .SUBC_STR_DEL(@subc_pif_str,'ASSET_PLACES') if @plan_id=(select .ARG_PLAN('PIF_ACCOUNT')) select @saldo_subc_str=@subc_pif_str, @coupon_subc=@subc_pif_str if @deb_or_cred =1 begin .SALDO_NOW_SUM(@plan2partner_id,@home_acc_id,@saldo_subc_str,1,@bo1_bal_sum,@bo1_qty_sum,@bo1_accur_sum,null,null,null) end else begin .SALDO_NOW_SUM(@plan2partner_id,@home_acc_id,@saldo_subc_str,(-1),@bo1_bal_sum,@bo1_qty_sum,@bo1_accur_sum,null,null,null) end /* if @plan_id=(select .ARG_PLAN('PIF_ACCOUNT')) .EXIT_MESSAGE_PARM('@bo1_bal_sum',@bo1_bal_sum) */ if isnull(@bo1_qty_sum,0) <=0 begin .ASSIGN(@res,1) .ASSIGN(@res_total_unkd_sum,0) .ASSIGN(@res_total_unkd_qty_sum,0) .ASSIGN(@res_total_out_sum,0) .ASSIGN(@res_total_qty_sum,0) .ASSIGN(@res_total_pereoc_sum,0) .ASSIGN(@res_total_pereoc_qty_sum,0) .ASSIGN(@res_total_com_in,0) .ASSIGN(@res_total_nkd2portf_sum,0) return end .ASSIGN(@total_pereoc_sum,0) .ASSIGN(@total_pereoc_qty_sum,0) .ASSIGN(@total_unkd_sum,0) .ASSIGN(@total_unkd_qty_sum,0) .ASSIGN(@bo1_comm, @comment_str) .ASSIGN(@bo1_comm_add1, (@comment_str + 'УНКД')) .ASSIGN(@bo1_comm_add2, (@comment_str +' Накопленная переоценка')) .ASSIGN(@bo1_comm_add3, (@comment_str +' Списание затрат')) .ASSIGN(@subc_com_in, @pnkd_subc_str) .ASSIGN(@subc_nkd_in, @pnkd_subc_str) .SUBC_STR_DEL(@subc_com_in, 'PORTFOLIO') .SUBC_STR_DEL(@subc_com_in, 'DOC_SEC') IF @deb_or_cred = 1 BEGIN .ASSIGN(@bo1_c_acc_id,@home_acc_id) .ASSIGN(@bo1_d_acc_id,@ext_acc_id) .ASSIGN(@bo1_c_subc,@home_subc_str) .ASSIGN(@bo1_d_subc,@ext_subc_str) -- .ASSIGN(@un1_c_acc_id,@unkd_acc_id) .ASSIGN(@un1_d_acc_id,@pnkd_acc_id) .ASSIGN(@un1_c_subc,@home_subc_str) .ASSIGN(@un1_d_subc,@pnkd_subc_str) .ASSIGN(@p1_c_acc_id,@pereoc_acc_id) .ASSIGN(@p1_d_acc_id,@profloss_fut_acc_id) end else begin .ASSIGN(@bo1_d_acc_id,@home_acc_id) .ASSIGN(@bo1_c_acc_id,@ext_acc_id) .ASSIGN(@bo1_d_subc,@home_subc_str) .ASSIGN(@bo1_c_subc,@ext_subc_str) -- .ASSIGN(@un1_d_acc_id,@unkd_acc_id) .ASSIGN(@un1_c_acc_id,@pnkd_acc_id) .ASSIGN(@un1_d_subc,@home_subc_str) .ASSIGN(@un1_c_subc,@pnkd_subc_str) .ASSIGN(@p1_d_acc_id,@pereoc_acc_id) .ASSIGN(@p1_c_acc_id,@profloss_fut_acc_id) end select @plan_cur_id = (select cur_id from t_plans where id = @plan_id) declare @deal_id numeric, @doc_sec_type_subc_id numeric, @dog_date datetime, @bo1_s_sum money, @bo1_sum_qty2accur money, @bo1_sum_a money, @bo1_full_sum_accur money, @ext_subc_str_s varchar(255), @stock_id numeric, @acc_cur_id numeric, @op_qty_lf_full money, @long_acc_sum money, @acc_sum_long money select @op_qty_lf_full=0 select @ext_subc_str_s=@ext_subc_str select @doc_sec_type_subc_id=.SUBCTYPE_FROM_CODE('DOC_SEC') .GET_ITEM_FROM_TYPE_SUBC_STR(@ext_subc_str,@doc_sec_type_subc_id,@deal_id) if @deal_id is not null and exists(select 1 from t_items,t_types where t_items.id=@deal_id and t_types.id=t_items.type_id and upper(t_types.type_code) in ('DOG_DEALINGS_BAY_VBR','DOG_DEALINGS_SALE_VBR', 'DEALINGS_VIA_BROKER','DEALINGS_VIA_BROKER_SALE')) begin select @dog_date=fact_dog_date, @stock_id=stock_id from tb_plan2fact_dates,tb_baysale_docitems where tb_plan2fact_dates.id=@deal_id and tb_baysale_docitems.id=@deal_id if exists(select 1 from t_items,t_types where t_items.id=@deal_id and t_types.id=t_items.type_id and upper(t_types.type_code) in ('DOG_DEALINGS_BAY_VBR','DOG_DEALINGS_SALE_VBR')) select @acc_cur_id=cur_id from tb_baysale_docitems where tb_baysale_docitems.id=@deal_id ---.EXIT_MESSAGE_PARM('@acc_cur_id',@acc_cur_id) /* -- Из за этого не списывалась валюта по обязательствам .SUBC_STR_ADD(@ext_subc_str_s,'STOCK_EMIS',@stock_id,Y) */ /* --- Старый вариант if @deb_or_cred=1 begin .SALDO(@owner_id,@plan_id,@dog_date,@bo1_d_acc_id,@ext_subc_str_s,Y,K,@bo1_s_sum,@bo1_sum_qty2accur,@bo1_full_sum_accur) end else begin .SALDO(@owner_id,@plan_id,@dog_date,@bo1_c_acc_id,@ext_subc_str_s,Y,D,@bo1_s_sum,@bo1_sum_qty2accur,@bo1_full_sum_accur) end */ -- Богаковский 24/11/2005 поменял местами "1" и "-1" в шаблонах, поскольку @bo1_d_acc_id - счет 100 активный if @deb_or_cred=1 begin .SALDO_NOW_SUM(@plan2partner_id,@bo1_d_acc_id,@ext_subc_str_s,1,@bo1_s_sum,@bo1_sum_qty2accur,@bo1_full_sum_accur,null,null,null) end else begin .SALDO_NOW_SUM(@plan2partner_id,@bo1_c_acc_id,@ext_subc_str_s,(-1),@bo1_s_sum,@bo1_sum_qty2accur,@bo1_full_sum_accur,null,null,null) end select @fin_result_zatr = @fin_result end else ----- Не по сделке begin select @fin_result_zatr = 0 select @bo1_sum_a=0 end ---- ======== select @res_total_vbr_sum=0 --- ======LIFO_FIFO BEGIN select @plan_cur_id = (select cur_id from t_plans where id = @plan_id) declare @stock2calc_id numeric, @nominal_cur_id numeric select @stock_type_subc_id=.SUBCTYPE_FROM_CODE('STOCK_EMIS') .GET_ITEM_FROM_TYPE_SUBC_STR(@saldo_subc_str,@stock_type_subc_id,@stock2calc_id) select @nominal_cur_id=(select stock_curr_id from td_stock_emis where id=@stock2calc_id) if @nominal_cur_id is null .EXIT_MESSAGE('Валюта номинала ЦБ не задана') /* Богаковский 15/07/04 Отладочный селект*/ --select @out_method_id as '.LIFO_FIFO_BEGIN_NOW входной параметр @out_method_id' /************************/ .LIFO_FIFO_BEGIN_NOW(@oper_date,@plan2partner_id,@home_acc_id,@lf_subc_type_id,@lf_subc_item_id,@saldo_subc_str,@out_method_id,@out_qty) --- ---if @plan_id=(select .ARG_PLAN('PIF_ACCOUNT')) ---.EXIT_MESSAGE_PARM('@bo1_bal_sum',@out_qty) if @deb_or_cred = 1 begin .ASSIGN(@bo1_d_cur_id, @acc_cur_id) .ASSIGN(@bo1_c_cur_id, @nominal_cur_id) .SUBC_STR_ADD(@bo1_c_subc,@lf_subc_type_id,@subc2_id_lf) .SUBC_STR_DEL(@un1_d_subc,'contragents') .SUBC_STR_ADD(@un1_c_subc,@lf_subc_type_id,@subc2_id_lf) end else begin .ASSIGN(@bo1_c_cur_id,@acc_cur_id) .ASSIGN(@bo1_d_cur_id,@nominal_cur_id) .SUBC_STR_ADD(@bo1_d_subc,@lf_subc_type_id,@subc2_id_lf) .SUBC_STR_ADD(@un1_d_subc,@lf_subc_type_id,@subc2_id_lf) end -- Снятие обязательств пропорционально кол-ву списываемых ЦБ IF ISNULL(@bo1_sum_qty2accur, 0) <> 0 -- letsko_av -- 13.05.2005 -- Мне кажется ТАК оно поточнее получится --select @bo1_sum_a=round((convert(double precision,@bo1_full_sum_accur)*convert(double precision,@op_qty_lf/@bo1_sum_qty2accur)),2) SELECT @bo1_sum_a = ROUND(@bo1_full_sum_accur * @op_qty_lf / @bo1_sum_qty2accur, 2) -- letsko_av (end) ELSE SELECT @bo1_sum_a = 0; select @op_sum_lf=round(@op_sum_lf,2) select @op_sum_acc_lf=round(@op_sum_acc_lf,2) select @op_qty_lf_full=@op_qty_lf_full+@op_qty_lf if @op_qty_lf_full=@bo1_sum_qty2accur begin if @bo1_full_sum_accur>(@res_total_vbr_sum+@bo1_sum_a) select @bo1_sum_a=@bo1_sum_a+(@bo1_full_sum_accur-(@res_total_vbr_sum+@bo1_sum_a)) else select @bo1_sum_a=@bo1_sum_a-((@res_total_vbr_sum+@bo1_sum_a)-@bo1_full_sum_accur) end select @res_total_vbr_sum=@res_total_vbr_sum+@bo1_sum_a ---.EXIT_MESSAGE_PARM('@bo1_sum_a',@bo1_sum_a) IF @plan_id = (SELECT .ARG_PLAN('PIF_ACCOUNT')) BEGIN DECLARE @new_deb NUMERIC .ACCID_FROM_CONST2PLAN(@new_deb, 'REALIZ_COST', @plan_id, 1, 1, 'Себестоимость продаж', @mess) END if @deb_or_cred = 1 select @long_acc_sum=@op_sum_acc_lf, @acc_sum_long=@bo1_sum_a else select @long_acc_sum=@bo1_sum_a, @acc_sum_long=@op_sum_acc_lf IF @type_redemption IN (3, 4) BEGIN SELECT @op_sum_lf_my = ROUND(((@op_sum_lf * @rate_face_value * @my_first_nominal) / (100 * @my_stock_nominal)), 2); SELECT @acc_sum_long_my = ROUND(((@acc_sum_long * @rate_face_value * @my_first_nominal) / (100 * @my_stock_nominal)), 2); SELECT @long_acc_sum_my = ROUND(((@long_acc_sum * @rate_face_value * @my_first_nominal) / (100 * @my_stock_nominal)), 2); --select @bo1_comm = '1' IF @plan_id = (SELECT .ARG_PLAN('PIF_ACCOUNT')) BEGIN .OPERATION_SBC(@owner_id, @plan_id, @oper_date, @new_deb, @bo1_c_acc_id, @op_sum_lf_my, @plan_cur_id, @oper_date, 0, 0, @bo1_comm, Y, @operation_id, NULL, NULL, @action_history_id, @acc_sum_long_my, @long_acc_sum_my, @bo1_d_subc, @bo1_c_subc, @bo1_d_cur_id, @bo1_c_cur_id) END ELSE BEGIN --select @bo1_comm = '2' .OPERATION_SBC(@owner_id, @plan_id, @oper_date, @bo1_d_acc_id, @bo1_c_acc_id, @op_sum_lf_my, @plan_cur_id, @oper_date, 0, 0, @bo1_comm, Y, @operation_id, NULL, NULL, @action_history_id, @acc_sum_long_my, @long_acc_sum_my, @bo1_d_subc, @bo1_c_subc, @bo1_d_cur_id, @bo1_c_cur_id) END END ELSE BEGIN IF @plan_id = (SELECT .ARG_PLAN('PIF_ACCOUNT')) BEGIN --select @bo1_comm = '3' .OPERATION_SBC(@owner_id, @plan_id, @oper_date, @new_deb, @bo1_c_acc_id, @op_sum_lf, @plan_cur_id, @oper_date, @op_qty_lf, @op_qty_lf, @bo1_comm, Y, @operation_id, NULL, NULL, @action_history_id, @acc_sum_long, @long_acc_sum, @bo1_d_subc, @bo1_c_subc, @bo1_d_cur_id, @bo1_c_cur_id) END ELSE BEGIN --select @bo1_comm = '4' .OPERATION_SBC(@owner_id, @plan_id, @oper_date, @bo1_d_acc_id, @bo1_c_acc_id, @op_sum_lf, @plan_cur_id, @oper_date, @op_qty_lf, @op_qty_lf, @bo1_comm, Y, @operation_id, NULL, NULL, @action_history_id, @acc_sum_long, @long_acc_sum, @bo1_d_subc, @bo1_c_subc, @bo1_d_cur_id, @bo1_c_cur_id) END END; if not(@unkd_acc_id is null) or not(@pereoc_acc_id is null) or not(@com_in_acc_id is null) begin .SUBC_STR_ADD(@coupon_subc,@lf_subc_type_id,@subc2_id_lf) end -- letsko_av -- 14.09.2005 -- Изменения для новой справки СЧА IF @plan_id =(SELECT .ARG_PLAN('PIF_ACCOUNT')) BEGIN .ACCID_FROM_CONST2PLAN(@pif_pereoc_acc_id, 'BACK_ACC_PEREOC_COMIS', @plan_id, 1, 1, 'Счет переоценки по ПИФ', @mess) SELECT @comis_subc = @saldo_subc_str .SUBC_STR_ADD(@comis_subc, @lf_subc_type_id, @subc2_id_lf) -- .SUBC_STR_DEL(@comis_subc, 'DOC_SEC_IN') .SALDO_NOW_SUM(@plan2partner_id, @pif_pereoc_acc_id, @saldo_subc_str, @deb_or_cred, @bo1_comis_bal_sum, @bo1_comis_qty_sum, @bo1_comis_acc_sum, NULL, NULL, NULL) SELECT @bo1_comis_bal_sum = .ROUND_MONEY((@bo1_comis_bal_sum * @op_qty_lf / @bo1_qty_sum), 2) SELECT @bo1_comis_qty_sum = @op_qty_lf IF @bo1_comis_bal_sum > 0 BEGIN select @bo1_comm = 'Списание с переоценки' IF @type_redemption IN (3, 4) BEGIN -- SELECT @bo1_comis_bal_sum_my = ROUND(((@bo1_comis_bal_sum * @rate_face_value) / 100), 2); SELECT @bo1_comis_bal_sum_my = ROUND(((@bo1_comis_bal_sum * @rate_face_value * @my_first_nominal) / (100 * @my_stock_nominal)), 2); --select @bo1_comm = '5' .OPERATION_SBC(@owner_id, @plan_id, @oper_date, @new_deb, @pif_pereoc_acc_id, @bo1_comis_bal_sum_my, @acc_cur_id_lf, @oper_date, 0, 0, @bo1_comm, Y, @operation_id, NULL, NULL, @action_history_id, NULL, @bo1_comis_bal_sum_my, @comis_subc, @un1_c_subc, @acc_cur_id_lf, @bo1_c_cur_id) END ELSE BEGIN --select @bo1_comm = '6' .OPERATION_SBC(@owner_id, @plan_id, @oper_date, @new_deb, @pif_pereoc_acc_id, @bo1_comis_bal_sum, @acc_cur_id_lf, @oper_date, 0, 0, @bo1_comm, Y, @operation_id, NULL, NULL, @action_history_id, NULL, @bo1_comis_bal_sum, @comis_subc, @un1_c_subc, @acc_cur_id_lf, @bo1_c_cur_id) END END ELSE BEGIN SELECT @bo1_comis_bal_sum = @bo1_comis_bal_sum * -1 IF @type_redemption IN (3, 4) BEGIN -- SELECT @bo1_comis_bal_sum_my = ROUND(((@bo1_comis_bal_sum * @rate_face_value) / 100), 2); SELECT @bo1_comis_bal_sum_my = ROUND(((@bo1_comis_bal_sum * @rate_face_value * @my_first_nominal) / (100 * @my_stock_nominal)), 2); --select @bo1_comm = '7' .OPERATION_SBC(@owner_id, @plan_id, @oper_date, @pif_pereoc_acc_id, @new_deb, @bo1_comis_bal_sum_my, @acc_cur_id_lf, @oper_date, 0, 0, @bo1_comm, Y, @operation_id, NULL, NULL, @action_history_id, NULL, @bo1_comis_bal_sum, @un1_c_subc, @comis_subc, @acc_cur_id_lf, @bo1_c_cur_id) END ELSE BEGIN --select @bo1_comm = '8' .OPERATION_SBC(@owner_id, @plan_id, @oper_date, @pif_pereoc_acc_id, @new_deb, @bo1_comis_bal_sum, @acc_cur_id_lf, @oper_date, 0, 0, @bo1_comm, Y, @operation_id, NULL, NULL, @action_history_id, NULL, @bo1_comis_bal_sum, @un1_c_subc, @comis_subc, @acc_cur_id_lf, @bo1_c_cur_id) END END END -- letsko_av (end) -- Если задан счет УНКД IF NOT(@unkd_acc_id IS NULL) BEGIN .ACC_DEB_OR_CRED(@unkd_acc_id, @deb_or_cred_unkd) -- letsko_av -- 29.04.2005 -- Пропорциональное списывание купона .MONEY_VAR(@bo1_unkd_qty_sum_right) -- Тут реально интересно только количество .SALDO_NOW_SBC(@plan2partner_id, @home_acc_id, @coupon_subc, @deb_or_cred_unkd, @bo1_unkd_bal_sum, @bo1_unkd_qty_sum_right, @bo1_unkd_acc_sum, NULL, NULL, NULL) -- А тут по другому счету заполняем все остальное .SALDO_NOW_SBC(@plan2partner_id, @unkd_acc_id, @coupon_subc, @deb_or_cred_unkd, @bo1_unkd_bal_sum, @bo1_unkd_qty_sum, @bo1_unkd_acc_sum, NULL, NULL, NULL) IF @type_redemption IN (3, 4) BEGIN -- Общее количество купонов = Скока осталось SELECT @bo1_unkd_qty_sum_right = @bo1_unkd_qty_sum_right END ELSE IF @type_redemption = 1 BEGIN -- Общее количество купонов = Скока осталось + Скока списываем SELECT @bo1_unkd_qty_sum_right = @bo1_unkd_qty_sum_right + @op_qty_lf END IF ISNULL(@bo1_unkd_bal_sum, 0) > 0 BEGIN IF @bo1_unkd_qty_sum_right > @op_qty_lf BEGIN SELECT @bo1_unkd_bal_sum = .ROUND_MONEY((@bo1_unkd_bal_sum * @op_qty_lf / @bo1_unkd_qty_sum_right), 2) SELECT @bo1_unkd_acc_sum = .ROUND_MONEY((@bo1_unkd_acc_sum * @op_qty_lf / @bo1_unkd_qty_sum_right), 2) SELECT @bo1_unkd_qty_sum = @op_qty_lf END; -- letsko_av (end) SELECT @bo1_unkd_bal_sum = ROUND(@bo1_unkd_bal_sum, 2) SELECT @bo1_unkd_acc_sum = ROUND(@bo1_unkd_acc_sum, 2) IF @type_redemption = 3 BEGIN -- SELECT @bo1_unkd_bal_sum_my = ROUND(((@bo1_unkd_bal_sum * @rate_face_value * @my_first_nominal) / (100 * @my_stock_nominal)), 2); -- SELECT @bo1_unkd_acc_sum_my = ROUND(((@bo1_unkd_acc_sum * @rate_face_value * @my_first_nominal) / (100 * @my_stock_nominal)), 2); --select @bo1_comm_add1 = '9' .OPERATION_SBC(@owner_id, @plan_id, @oper_date, @un1_d_acc_id, @un1_c_acc_id, @bo1_unkd_bal_sum, @plan_cur_id, @oper_date, 0, 0, @bo1_comm_add1, Y, @operation_id, NULL, NULL, @action_history_id, NULL, @bo1_unkd_acc_sum_my, @un1_d_subc, @un1_c_subc, @bo1_d_cur_id, @bo1_c_cur_id) END ELSE IF @type_redemption = 1 BEGIN --select @bo1_comm_add1 = '10' .OPERATION_SBC(@owner_id, @plan_id, @oper_date, @un1_d_acc_id, @un1_c_acc_id, @bo1_unkd_bal_sum, @plan_cur_id, @oper_date, @bo1_unkd_qty_sum, @bo1_unkd_qty_sum, @bo1_comm_add1, Y, @operation_id, NULL, NULL, @action_history_id, NULL, @bo1_unkd_acc_sum, @un1_d_subc, @un1_c_subc, @bo1_d_cur_id, @bo1_c_cur_id) END .ASSIGN(@total_unkd_sum, (@total_unkd_sum + @bo1_unkd_bal_sum)) .ASSIGN(@total_unkd_acc_sum, (@total_unkd_acc_sum + @bo1_unkd_acc_sum)) .ASSIGN(@total_unkd_qty_sum, (@total_unkd_qty_sum + @bo1_unkd_qty_sum)) END; END; --- Затраты при покупке if @is_com_in=1 begin .SALDO_NOW_SBC(@plan2partner_id,@com_in_acc_id,@coupon_subc,1,@bo1_com_in_sum,@bo1_com_qty_in_sum,@bo1_com_acc_in_sum,null,null,null) if @q_saldo_lf > @op_qty_lf -- Списываем не все select @zatr_sum = .ROUND_MONEY((@bo1_com_in_sum * @op_qty_lf /@q_saldo_lf),2) else select @zatr_sum = .ROUND_MONEY(@bo1_com_in_sum,2) declare @type_close int if @is_p2l_comis=1 select @type_close=2 else select @type_close=1 .BACK_CLOSE_ZATR(@owner_id, @plan_id, @oper_date, @fin_result_zatr, @character_id, @pnkd_subc_str, @type_close, @com_in_acc_id, @zatr_sum, @op_qty_lf, @coupon_subc, @type_redemption, @rate_face_value, @my_stock_nominal, @my_first_nominal) SELECT @res_oper_sum_close = @oper_sum_close .ASSIGN(@res_total_com_in,(isnull(@res_total_com_in,0)+@bo1_com_in_sum)) end --- Переоценка накопленная ------ if (rtrim(ltrim(@pereoc_const_s)) = '1') begin if not(@pereoc_acc_id is null) -- Если задан счет переоценки - begin .ACC_DEB_OR_CRED(@pereoc_acc_id,@deb_or_cred_pereoc) .SALDO_NOW_SBC(@plan2partner_id,@pereoc_acc_id,@coupon_subc,@deb_or_cred_pereoc,@bo1_pereoc_bal_sum,@bo1_pereoc_qty_sum,@bo1_pereoc_acc_sum,null,null,null) if isnull(@bo1_pereoc_bal_sum,0) > 0 begin if @bo1_pereoc_qty_sum > @op_qty_lf begin select @bo1_pereoc_bal_sum = .ROUND_MONEY((@bo1_pereoc_bal_sum * @op_qty_lf /@bo1_pereoc_qty_sum),2) select @bo1_pereoc_acc_sum = .ROUND_MONEY((@bo1_pereoc_acc_sum * @op_qty_lf /@bo1_pereoc_qty_sum),2) select @bo1_pereoc_qty_sum = @op_qty_lf end .BACK_CLOSE_PROFIT_LOSS(@owner_id,@plan_id,@oper_date,@fin_result,@character_id,@un1_d_subc,3,@pereoc_acc_id,@bo1_pereoc_bal_sum) .ASSIGN(@total_pereoc_sum,(@total_pereoc_sum + @bo1_pereoc_bal_sum)) .ASSIGN(@total_pereoc_qty_sum,(@total_pereoc_qty_sum+@bo1_pereoc_qty_sum)) end end end ---Конец Переоценки накопленной ------ .LIFO_FIFO_END .ASSIGN(@res_total_unkd_sum,(isnull(@total_unkd_sum,0))) .ASSIGN(@res_total_unkd_acc_sum,(isnull(@total_unkd_acc_sum,0))) .ASSIGN(@res_total_unkd_qty_sum,(isnull(@total_unkd_qty_sum,0))) .ASSIGN(@res_total_pereoc_sum,(isnull(@total_pereoc_sum,0))) .ASSIGN(@res_total_pereoc_qty_sum,(isnull(@total_pereoc_qty_sum,0))) .ASSIGN(@res_total_out_sum,(isnull(@bal_sum_total_lf,0))) .ASSIGN(@res_total_out_acc_sum,(isnull(@bal_sum_total_acc_lf,0))) .ASSIGN(@res_total_qty_sum,(isnull(@out_qty,0)- isnull(@qty_rest_lf,0))) /* update tb_baysale_docitems set bal_sum_out_cur = @res_total_out_acc_sum where id = @deal_id update tb_baysale_docitems set unkd_sum_out_cur = @res_total_unkd_acc_sum where id = @deal_id */ if (@nkd2portf_acc_id is not null) and (@nkd2portf_acc_id <> @unkd_acc_id) begin declare @ssb_doc_sec_subc_type_id numeric select @op_sum_lf=0 select @bo1_comm_add1='Списание НКД за нахождение в портфеле' select @un1_d_subc=@pnkd_subc_str select @ssb_doc_sec_subc_type_id = .SUBCTYPE_FROM_CODE('DOC_SEC_IN') .SUBC_STR_DEL(@un1_d_subc,'contragents') declare nkd_srez cursor for select round((((o.saldo * o.deb_or_cred)*@res_total_qty_sum)/(o.saldo_qty * o.deb_or_cred)),2), o.saldo_qty * o.deb_or_cred, s.item_id,round((((o.saldo_accur * o.deb_or_cred)*@res_total_qty_sum)/(o.saldo_qty * o.deb_or_cred)),2) from t_account_now o, t_accnow_subconto s where o.plan2partner_id = @plan2partner_id and o.acc_id = @nkd2portf_acc_id and o.subc_eff_num like isnull('%'+ @saldo_subc_str +'%','%') and o.id = s.id and s.subconto_type_id = @ssb_doc_sec_subc_type_id and ISNULL(o.saldo_qty, 0) <> 0 for read only open nkd_srez fetch nkd_srez into @op_sum_lf,@op_qty_lf,@subc2_id_lf,@op_sum_acc_lf while .CURSOR_STATE=0 begin .SUBC_STR_ADD(@un1_d_subc,@lf_subc_type_id,@subc2_id_lf) select @un1_c_subc=@un1_d_subc if isnull(@op_sum_lf,0) <> 0 begin IF @type_redemption IN (3, 4) BEGIN -- SELECT @op_sum_lf_my = ROUND(((@op_sum_lf * @rate_face_value) / 100), 2); SELECT @op_sum_lf_my = ROUND(((@op_sum_lf * @rate_face_value * @my_first_nominal) / (100 * @my_stock_nominal)), 2); -- SELECT @op_sum_acc_lf_my = ROUND(((@op_sum_acc_lf * @rate_face_value) / 100), 2); SELECT @op_sum_acc_lf_my = ROUND(((@op_sum_acc_lf * @rate_face_value * @my_first_nominal) / (100 * @my_stock_nominal)), 2); --select @bo1_comm_add1 = '11' .OPERATION_SBC(@owner_id, @plan_id, @oper_date, @pnkd_acc_id, @nkd2portf_acc_id, @op_sum_lf_my, @plan_cur_id, @oper_date, 0, 0, @bo1_comm_add1, Y, @operation_id, NULL, NULL, @action_history_id, NULL, @op_sum_acc_lf_my, @un1_d_subc, @un1_c_subc) END ELSE IF @type_redemption = 1 BEGIN --select @bo1_comm_add1 = '12' .OPERATION_SBC(@owner_id, @plan_id, @oper_date, @pnkd_acc_id, @nkd2portf_acc_id, @op_sum_lf, @plan_cur_id, @oper_date, @res_total_qty_sum, @res_total_qty_sum, @bo1_comm_add1, Y, @operation_id, NULL, NULL, @action_history_id, NULL, @op_sum_acc_lf, @un1_d_subc, @un1_c_subc) END select @res_total_nkd2portf_sum=isnull(@res_total_nkd2portf_sum,0)+@op_sum_lf select @res_total_nkd2portf_acc_sum=isnull(@res_total_nkd2portf_acc_sum,0)+@op_sum_acc_lf end fetch nkd_srez into @op_sum_lf,@op_qty_lf,@subc2_id_lf,@op_sum_acc_lf end close nkd_srez .DEALLOCATE nkd_srez end .ASSIGN(@res,1) end