create procedure dbo.%PROC% @deal_id numeric, @com_id numeric, @date_b datetime, @oper_id numeric, @id numeric, @action_id numeric, @action_history_id numeric, @owner_id numeric as declare @user_id numeric, @state_id numeric, @new_state_id numeric, @type_id numeric, @type_code varchar(255), @com_id_s varchar(30) begin select @com_id_s=convert(varchar(30),@com_id) declare @contr_own_id numeric, @pos_own_id numeric, @contr_ts_id numeric, @pos_ts_id numeric, @contr_kk_id numeric, @pos_kk_id numeric, @contr_br_id numeric, @pos_br_id numeric, @acc_long_id numeric, @acc_short_id numeric, @acc_pr2loss_id numeric, @acc_fond_cl numeric, @acc_fond_own numeric, @acc_fond_cl_secur numeric, @acc_realiz_id numeric, @value_id numeric, @cur_stock_id numeric .TYPE_GET('td_comis2oper',@com_id,100) /* exec ap_get_contr_comis @deal_id_s,@contr_own_id out,@pos_own_id out,@contr_ts_id out,@pos_ts_id out, @contr_kk_id out,@pos_kk_id out,@contr_br_id out,@pos_br_id out */ ---begin tran select @type_code=(select t_types.type_code from t_types,t_items where t_items.id=@deal_id and t_types.id=t_items.type_id) if @comis100<>0 begin declare @acc_id numeric, @com_acc_id numeric, @type_deal_id numeric, @stock_id numeric, @stock_qty money, @cur_id numeric, @contract_id numeric, @sale_place_id numeric, @portfolio_id numeric, @portfolio_sub_id numeric, @props_id numeric, @external_broker_id numeric, @character_id numeric, @broker_id numeric, @profit_or_loss money, @comment varchar(255), @sum_min_fond money, @sum_min money, @deal_date datetime, @p_o_l money, @saldo100 money, @saldo190 money, @investor_id numeric, @contr_brok_id numeric, @sum_bal money, @cur_rur numeric, @contragent_id numeric, @price_position_id numeric, @bank_account_id numeric, @asset_place_id numeric, @depo_subacc_id numeric, @account_id numeric, @acc_pr2loss_comis_id numeric, @acc_nds_id numeric, @fond_id numeric declare @cur_doc_id numeric, @cur_stock_qty money, @com2part money, @com1part money, @bal_sum_out money, @sum_in_paycur money declare @purpose_code int select @purpose_code=(select (.PURPOSE_CODE(is_dogovor_id)) from td_stock_moves where id=@deal_id) if @type_code in ('DOG_DEALINGS_BAY_VBR','DOG_DEALINGS_SALE_VBR','DEALINGS_VIA_BROKER','DEALINGS_VIA_BROKER_SALE') begin select @bal_sum_out = bal_sum_out, @sum_in_paycur = sum_in_paycur, @type_deal_id=ticket_type_id, @stock_id=stock_id, @stock_qty=stock_qty, @contract_id=client_contract_id, @sale_place_id=sale_place_id, @portfolio_id=portfolio_id, @portfolio_sub_id=portfolio_sub_id, @props_id=props_id, @external_broker_id=external_broker_id, @character_id=character_id, @profit_or_loss=profit_or_loss, @deal_date=in_date, @asset_place_id=asset_place_id, @depo_subacc_id=depo_subacc_id, @bank_account_id=bank_account_id from tb_baysale_docitems,td_depo_docs where tb_baysale_docitems.id=@deal_id and tb_baysale_docitems.id=td_depo_docs.id if @investor_bank_acc_id100 is not null select @bank_account_id=@investor_bank_acc_id100 end else if @type_code in ('D_STOCK_IN_OTHER_DEPO','D_STOCK_IN','D_STOCK_IN_MOVE','D_STOCK_OUT_OTHER_DEPO','D_STOCK_OUT','D_STOCK_OUT_MOVE') begin select ---@bal_sum_out = bal_sum_out, ---@sum_in_paycur = sum_in_paycur, ---@type_deal_id=ticket_type_id, @stock_id=stock_id, @stock_qty=stock_qty, @contract_id=client_contract_id, ---@sale_place_id=sale_place_id, @portfolio_id=portfolio_id, @portfolio_sub_id=portfolio_sub_id, ---@props_id=props_id, ---@external_broker_id=external_broker_id, ---@character_id=character_id, ---@profit_or_loss=profit_or_loss, @deal_date=in_date, @asset_place_id=to_object_id ---@depo_subacc_id=depo_subacc_id, ---@bank_account_id=bank_account_id from td_stock_moves,td_depo_docs where td_stock_moves.id=@deal_id and td_stock_moves.id=td_depo_docs.id /* declare @purpose_code int select @purpose_code=((.PURPOSE_CODE(is_dogovor_id)) from td_stock_moves where id=@deal_id) */ if @contract_id is null select @character_id=1 else select @character_id=2 if upper(@type_code) like '%'+'_IN'+'%' select @type_deal_id=1, @depo_subacc_id=t_subacc_id from td_stock_moves where td_stock_moves.id=@deal_id else if upper(@type_code) like '%'+'_OUT'+'%' select @type_deal_id=2, @depo_subacc_id=s_subacc_id from td_stock_moves where td_stock_moves.id=@deal_id select @bank_account_id=@investor_bank_acc_id100 end if @bank_account_id is null and @character_id=2 select @bank_account_id=money_acc_id from tb_contracts where id=@contract_id if @bank_account_id is null .EXIT_MESSAGE('Счет для списания комиссий не найден') if @character_id=2 and @service_id100=6 begin select @comis100=@comis100-isnull((select sum(isnull(comis,0)) from td_comis2oper where service_id=3 and item_id=@deal_id and .ITEMS_EXISTS_BY_TYPE(td_comis2oper.id,'td_comis2oper')),0) --- .EXIT_MESSAGE_PARM('@comis100',@comis100) end --select @cur_rur=.CUR('RUR') /* declare @state_sale1_id numeric, @type_sale1_id numeric, @state_bay1_id numeric, @type_bay1_id numeric, @state_sale2_id numeric, @type_sale2_id numeric, @state_bay2_id numeric, @type_bay2_id numeric .TYPE_ID_FROM_CODE('D_STOCK_IN_OTHER_DEPO',@type_bay1_id) select @state_bay1_id=.STATE_ID_FROM_CODE(@type_bay1_id,'OP_END') .TYPE_ID_FROM_CODE('D_STOCK_OUT_OTHER_DEPO',@type_sale1_id) select @state_sale1_id=.STATE_ID_FROM_CODE(@type_sale1_id,'OP_END') .TYPE_ID_FROM_CODE('D_STOCK_IN',@type_bay2_id) select @state_bay2_id=.STATE_ID_FROM_CODE(@type_bay2_id,'OP_END') .TYPE_ID_FROM_CODE('D_STOCK_OUT',@type_sale2_id) select @state_sale2_id=.STATE_ID_FROM_CODE(@type_sale2_id,'OP_END') */ declare @back_sec_plan_id numeric, @out_method_id numeric, @plan_money numeric, @is_realiz int, @is_p2l_comis int, @is_com_in int, @is_allow_short4stocks int, @is_allow_short4money int, @asset4pereoc_type_id numeric, @com_in_acc_id numeric, @com_in_qty money .BACK_GET_ORG_PARMS(@owner_id,@broker_id,@plan_money,@back_sec_plan_id,@out_method_id,@is_realiz,@is_p2l_comis,@is_com_in,@is_allow_short4stocks,@is_allow_short4money,@asset4pereoc_type_id) select @cur_rur=.CUR2PLAN(@plan_money) if @character_id=2 select @investor_id=@contract_id else select @investor_id=@broker_id .TRANSACTION_SAVE create table #oper_doc(id numeric,stock_qty money,stock_id numeric,comis money null) if upper(@type_code) in ('DOG_DEALINGS_BAY_VBR','DEALINGS_VIA_BROKER') begin insert #oper_doc select td_stock_moves.id,td_stock_moves.stock_qty,td_stock_moves.stock_id,null from td_depo_docs,td_stock_moves,t_items,t_types,t_states where td_depo_docs.foundation_id=@deal_id and td_stock_moves.id=td_depo_docs.id and td_stock_moves.id=t_items.id and t_types.id=t_items.type_id and t_states.id=t_items.state_id and t_states.class_id=0 and upper(type_code) in ('D_STOCK_IN_OTHER_DEPO','D_STOCK_IN','D_STOCK_IN_MOVE') --- and .ITEMS_EXISTS_BY_STATE(td_stock_moves.id,@state_bay_id) end else if upper(@type_code) in ('DOG_DEALINGS_SALE_VBR','DEALINGS_VIA_BROKER_SALE') begin insert #oper_doc select td_stock_moves.id,td_stock_moves.stock_qty,td_stock_moves.stock_id,null from td_depo_docs,td_stock_moves,t_items,t_types,t_states where td_depo_docs.foundation_id=@deal_id and td_stock_moves.id=td_depo_docs.id and td_stock_moves.id=t_items.id and t_types.id=t_items.type_id and t_states.id=t_items.state_id and t_states.class_id=0 and upper(type_code) in ('D_STOCK_OUT_OTHER_DEPO','D_STOCK_OUT','D_STOCK_OUT_MOVE') --- and .ITEMS_EXISTS_BY_STATE(td_stock_moves.id,@state_sale_id) end if (select count(id) from #oper_doc)=0 begin insert #oper_doc select @deal_id,@stock_qty,@stock_id,null end /*Бьем общую комиссию прапорционально количествам ЦБ*/ update #oper_doc set comis=round((convert(double precision,isnull(@comis100,0))*convert(double precision,(stock_qty/@stock_qty))),2) /* ----- TEST Count .INT_VAR(@mm) select @mm = count(*) from #oper_doc .EXIT_MESSAGE_PARM('XX',@mm) ---------------*/ .TEST_RATE2CUR2DATE(@date_b,@cur_rur) declare @method_id numeric, @method_date datetime, @partion_id numeric, @is_nds int, @nds_sum money, @nds money .TYPE_GET('CLIENT_CONTRACTS',@contract_id,10) select @method_id=.GET_METHOD_OUT(@portfolio_sub_id) select @method_date=.GET_METHOD_DATE(@portfolio_sub_id) select @is_nds=.GET_IS_NDS(@portfolio_sub_id) select @nds=convert(money,(.GET_CONST('VAT'))) if @is_nds=1 and @is_nds100=1 select @nds_sum=round(convert(money,(@comis100*(@nds/100.0))/(1+(@nds/100.0))),2) select @comis100=(@comis100-isnull(@nds_sum,0)) /*Корректируем последнюю комиссию на дельту погрешности*/ .INT_VAR(@rec_full) .INT_VAR(@rec_current) .ID_VAR(@current_id) .MONEY_VAR(@current_com2cur) .MONEY_VAR(@current_comis) .MONEY_VAR(@cur_com) select @rec_full = count(*) from #oper_doc select @rec_current=0 select @current_comis=0 declare cur_for_update cursor for select id,comis from #oper_doc for update open cur_for_update fetch cur_for_update into @current_id,@current_com2cur while .CURSOR_STATE=0 begin select @current_comis=@current_comis+isnull(@current_com2cur,0) select @rec_current=@rec_current+1 if @rec_current=@rec_full and @current_comis<@comis100 update #oper_doc set comis=comis+abs(@comis100-@current_comis) where id=@current_id else if @rec_current=@rec_full and @current_comis>@comis100 update #oper_doc set comis=comis-abs(@current_comis-@comis100) where id=@current_id fetch cur_for_update into @current_id,@current_com2cur end close cur_for_update .DEALLOCATE cur_for_update select @current_comis=0 /*Конец корректировки*/ if @date_b<@method_date .EXIT_MESSAGE('Невозможно провести, поскольку изменился метод списания') if @method_id=3 begin select @partion_id=(select td_depo_docs.id from td_depo_docs where in_no='COMMON_ASSET_INPUT' and .ITEMS_EXISTS_BY_TYPE(td_depo_docs.id,'letter_in')) end if @character_id=1 select @fin_result10=1 declare @portfolio_brok_id numeric, @portfolio_sub_brok_id numeric select @portfolio_brok_id = min(tb_portfolio.id) from tb_portfolio, tb_portfolio2investor where tb_portfolio2investor.investor_id = @broker_id and tb_portfolio2investor.portfolio_id = tb_portfolio.id and tb_portfolio.charge_flag = 1 and .ITEMS_EXISTS_BY_TYPE(tb_portfolio.id,'portfolio') if @portfolio_brok_id is null begin select @value_id=t_classvalues.id from t_classvalues, t_classes where t_classes.code='COMMON' and t_classvalues.class_id=t_classes.id and t_classvalues.code='YES' select @portfolio_brok_id = min(tb_portfolio.id) from tb_portfolio where tb_portfolio.charge_flag = 1 and .ITEMS_EXISTS_BY_TYPE(tb_portfolio.id,'portfolio') and .ITEMS_EXISTS_BY_CLASS_VALUE(tb_portfolio.id,@value_id) end select @portfolio_sub_brok_id=min(tb_portfolio_section.id) from tb_portfolio_section where tb_portfolio_section.investor_id = @broker_id and tb_portfolio_section.charge_flag = 1 and .ITEMS_EXISTS_BY_TYPE(tb_portfolio_section.id,'portfolio_section') .NAME_VAR(@res_mess) .ACCID_FROM_CONST2PLAN(@com_acc_id,'BACK_ACC_COMISSIONS',@plan_money,1,1,'Счет комиссии',@res_mess) -- select @com_acc_id=.ACCID_FROM_EFFNO(@plan_money,"4.1") declare cur1 cursor for select id,stock_qty,stock_id,comis from #oper_doc declare @res_mes1 varchar(255) .ACCID_FROM_CONST2PLAN(@acc_long_id,'BACK_ACC_SECUR_MP_LONG',@plan_money,1,1,'Счет длинной позиции',@res_mes1) .ACCID_FROM_CONST2PLAN(@acc_short_id,'BACK_ACC_SECUR_MP_SHORT',@plan_money,1,1,'Счет короткой позиции',@res_mes1) .ACCID_FROM_CONST2PLAN(@acc_pr2loss_comis_id,'BACK_ACC_PROFIT_BAYSALE_COMIS',@plan_money,1,1,'Счет прибылей/убытков',@res_mes1) .ACCID_FROM_CONST2PLAN(@acc_pr2loss_id,'BACK_ACC_PROFIT_BAYSALE_MAIN',@plan_money,1,1,'Счет прибылей/убытков',@res_mes1) .ACCID_FROM_CONST2PLAN(@acc_fond_cl,'BACK_ACC_FUND_MONEY',@plan_money,1,3,'Счет фонда клиента',@res_mes1) .ACCID_FROM_CONST2PLAN(@acc_fond_own,'BACK_ACC_FUND_MONEY',@plan_money,1,2,'Счет фонда компании',@res_mes1) .ACCID_FROM_CONST2PLAN(@acc_fond_cl_secur,'BACK_ACC_FUND_SECUR',@plan_money,1,3,'Счет фонда клиента',@res_mes1) .ACCID_FROM_CONST2PLAN(@acc_realiz_id,'BACK_ACC_REALIZ',@plan_money,1,1,'Cчет реализации',@res_mes1) .ACCID_FROM_CONST2PLAN(@acc_nds_id,'BACK_COMIS_NDS',@plan_money,1,1,'Cчет НДС накопленный',@res_mes1) if @is_com_in=1 begin if @type_deal_id=1 begin .ACCID_FROM_CONST2PLAN(@com_in_acc_id,'BACK_ACC_COM_IN',@plan_money,1,1,'Счет затрат на приобретение',@res_mes1) end else begin .ACCID_FROM_CONST2PLAN(@com_in_acc_id,'BACK_ACC_COM_OUT',@plan_money,1,1,'Счет затрат при продаже',@res_mes1) end select @com_in_qty=0 end else begin if @type_deal_id=1 select @com_in_acc_id=@acc_long_id else select @com_in_acc_id=@acc_short_id select @com_in_qty=null end select @comment=.SIMPLE_NAME(5500,@service_id100) select @price_position_id=@price_position_id100 select @contragent_id=@recipient_id100 if isnull(@nds_sum,0)<>0 begin select @comment='НДС оплаченный'+' '+@comment .OPERATION(@owner_id,@plan_money,@date_b,@acc_nds_id,@com_acc_id,@nds_sum,@cur_rur,@date_b,null,null,@comment,N,@oper_id,@id,@action_id,@action_history_id) .UPDATE_SUBC(D,'investors',@investor_id) .UPDATE_SUBC(D,'investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC(D,'portfolio',@portfolio_id) .UPDATE_SUBC(D,'contragents',@contragent_id) .UPDATE_SUBC(K,'investors',@investor_id) .UPDATE_SUBC(K,'portfolio',@portfolio_id) .UPDATE_SUBC(K,'investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC(K,'price_position',@price_position_id) .UPDATE_SUBC(K,'contragents',@contragent_id) .UPDATE_SUBC(K,'doc_sec',@deal_id) .SUBC_CHECK if @character_id=2 --- Сделка клиентская select @fond_id= @acc_fond_cl else select @fond_id= @acc_fond_own select @comment=.SIMPLE_NAME(5500,@service_id100) select @comment='НДС начисленный'+' '+@comment .OPERATION(@owner_id,@plan_money,@date_b,@fond_id,@acc_nds_id,@nds_sum,@cur_rur,@date_b,null,null,@comment,N,@oper_id,@id,@action_id,@action_history_id) .UPDATE_SUBC(D,'investors',@investor_id) .UPDATE_SUBC(D,'portfolio',@portfolio_id) .UPDATE_SUBC(D,'investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC(K,'investors',@investor_id) .UPDATE_SUBC(K,'portfolio',@portfolio_id) .UPDATE_SUBC(K,'investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC(K,'contragents',@contragent_id) .SUBC_CHECK end select @comment=.SIMPLE_NAME(5500,@service_id100) if @service_id100=6 begin if @portfolio_brok_id is null .EXIT_MESSAGE('Портфель для нераспределенных ср-в не найден') if @portfolio_sub_brok_id is null .EXIT_MESSAGE('Раздел учета для нераспределенных ср-в не найден') end ---- Используем счет реализации ------ if @is_realiz=1 begin select @account_id=@acc_realiz_id end else begin if @is_p2l_comis=1 select @account_id=@acc_pr2loss_comis_id else select @account_id=@acc_pr2loss_id end /*if not (@service_id100=3 and @character_id=2) begin */ if @type_deal_id=1 /*======================Покупка========================*/ begin open cur1 fetch cur1 into @cur_doc_id,@cur_stock_qty,@cur_stock_id,@cur_com while .CURSOR_STATE=0 begin if @method_id<>3 select @partion_id=@cur_doc_id select @saldo100=(select sum(t_oper_list.qty_sum) from t_operations,t_oper_list where t_operations.item_id=@cur_doc_id and t_oper_list.head_id=t_operations.id and t_oper_list.acc_id=@acc_long_id and t_operations.partner2plan_id=((select t_plans2partner.id from t_plans2partner,t_items,t_states, t_plans,t_partners where t_plans2partner.plan_id=t_plans.id and t_plans.id=@plan_money and t_plans2partner.partner_id=t_partners.id and t_partners.id=@owner_id and t_plans2partner.id=t_items.id and t_items.state_id=t_states.id and t_states.class_id=0))) select @saldo190=(select sum(t_oper_list.qty_sum) from t_operations,t_oper_list where t_operations.item_id=@cur_doc_id and t_oper_list.head_id=t_operations.id and t_oper_list.acc_id=@acc_short_id and t_operations.partner2plan_id=((select t_plans2partner.id from t_plans2partner,t_items,t_states, t_plans,t_partners where t_plans2partner.plan_id=t_plans.id and t_plans.id=@plan_money and t_plans2partner.partner_id=t_partners.id and t_partners.id=@owner_id and t_plans2partner.id=t_items.id and t_items.state_id=t_states.id and t_states.class_id=0))) if isnull(@saldo100,0)>0 -- Есть длинная begin if @is_com_in=1 select @com_in_qty=0 else select @com_in_qty=null select @com1part=round((@saldo100*isnull(@cur_com,0))/@cur_stock_qty,2) ---- D: Счет затрат на приобретение, K: Счет комиссии .OPERATION(@owner_id,@plan_money,@date_b,@com_in_acc_id,@com_acc_id,@com1part,@cur_rur,@date_b,@com_in_qty,null,@comment,N,@oper_id,@id,@action_id,@action_history_id) .UPDATE_SUBC(D,'stock_emis',@cur_stock_id) .UPDATE_SUBC(D,'investors',@investor_id) .UPDATE_SUBC(D,'investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC(D,'doc_sec_in',@partion_id) .UPDATE_SUBC(K,'investors',@investor_id) .UPDATE_SUBC(K,'portfolio',@portfolio_id) .UPDATE_SUBC(K,'investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC(K,'price_position',@price_position_id) .UPDATE_SUBC(K,'contragents',@contragent_id) .UPDATE_SUBC(K,'doc_sec',@deal_id) .SUBC_CHECK if @character_id=2 and @purpose_code not in (93,94) --- Сделка клиентская begin ---- D: Счет фонда ДС клиента, K: Счет фонда ЦБ клиента .OPERATION(@owner_id,@plan_money,@date_b,@acc_fond_cl,@acc_fond_cl_secur,@com1part,@cur_rur,@date_b,null,null,@comment,N,@oper_id,@id,@action_id,@action_history_id) .UPDATE_SUBC(D,'investors',@contract_id) .UPDATE_SUBC(K,'investors',@contract_id) .UPDATE_SUBC(K,'stock_emis',@cur_stock_id) .SUBC_CHECK end end if isnull(@saldo190,0)>0 --- Если есть короткая begin if isnull(@saldo190,0) >= @cur_stock_qty select @com2part=isnull(@cur_com,0) else select @com2part=isnull(@cur_com,0)-isnull(@com1part,0) --- select @com2part=round((@saldo190*isnull(@cur_com,0))/@cur_stock_qty,2) /* По моему это бред !!!!!!!! if @comis100<(@com2part+@com1part) select @com2part=@com2part-abs(@comis100-@com2part-isnull(@com1part,0)) else if @comis100>(@com2part+@com1part) select @com2part=@com2part+abs(@comis100-@com2part-isnull(@com1part,0)) */ if @is_realiz<>1 --- Используем счет реализации begin if @fin_result10=1 ---- Если ведем финансовый результат begin ---- D: Счет реализации или прибыль-убытки, K: Счет комиссии .OPERATION(@owner_id,@plan_money,@date_b,@account_id,@com_acc_id,@com2part,@cur_rur,@date_b,null,null,@comment,N,@oper_id,@id,@action_id,@action_history_id) .UPDATE_SUBC(D,'investors',@investor_id) .UPDATE_SUBC(D,'investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC(D,'doc_sec',@deal_id) .UPDATE_SUBC(D,'portfolio',@portfolio_id) .UPDATE_SUBC(D,'stock_emis',@cur_stock_id) .UPDATE_SUBC(K,'investors',@investor_id) .UPDATE_SUBC(K,'portfolio',@portfolio_id) .UPDATE_SUBC(K,'investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC(K,'price_position',@price_position_id) .UPDATE_SUBC(K,'contragents',@contragent_id) .UPDATE_SUBC(K,'doc_sec',@deal_id) .SUBC_CHECK if @character_id=1 ---- Если характер сделки - дилерская begin ---- D: Фонд компании , K: Счет реализации или прибыль-убытки .OPERATION(@owner_id,@plan_money,@date_b,@acc_fond_own,@account_id,@com2part,@cur_rur,@date_b,null,null,@comment,N,@oper_id,@id,@action_id,@action_history_id) .UPDATE_SUBC(D,'portfolio',@portfolio_id) .UPDATE_SUBC(D,'investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC(D,'investors',@investor_id) .UPDATE_SUBC(K,'investors',@investor_id) .UPDATE_SUBC(K,'doc_sec',@deal_id) .UPDATE_SUBC(K,'portfolio',@portfolio_id) .UPDATE_SUBC(K,'investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC(K,'stock_emis',@cur_stock_id) .SUBC_CHECK end else ---- Если характер сделки - клиентская begin ---- D: Фонд ДС клиента , K: Счет реализации или прибыль-убытки .OPERATION(@owner_id,@plan_money,@date_b,@acc_fond_cl,@account_id,@com2part,@cur_rur,@date_b,null,null,@comment,N,@oper_id,@id,@action_id,@action_history_id) .UPDATE_SUBC(D,'investors',@investor_id) .UPDATE_SUBC(K,'investors',@investor_id) .UPDATE_SUBC(K,'doc_sec',@deal_id) .UPDATE_SUBC(K,'portfolio',@portfolio_id) .UPDATE_SUBC(K,'investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC(K,'stock_emis',@cur_stock_id) .SUBC_CHECK end end else ---- Если не ведем финансовый результат begin ---- D: Фонд ДС клиента , K: Счет комиссии .OPERATION(@owner_id,@plan_money,@date_b,@acc_fond_cl,@com_acc_id,@com2part,@cur_rur,@date_b,null,null,@comment,N,@oper_id,@id,@action_id,@action_history_id) .UPDATE_SUBC(D,'investors',@investor_id) .UPDATE_SUBC(K,'investors',@investor_id) .UPDATE_SUBC(K,'portfolio',@portfolio_id) .UPDATE_SUBC(K,'investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC(K,'price_position',@price_position_id) .UPDATE_SUBC(K,'contragents',@contragent_id) .UPDATE_SUBC(K,'doc_sec',@deal_id) .SUBC_CHECK end end else --- Не используем счет реализации begin ---- D: Счет прибыли-убытка , K: Счет комиссии .OPERATION(@owner_id,@plan_money,@date_b,@account_id,@com_acc_id,@com2part,@cur_rur,@date_b,null,null,@comment,N,@oper_id,@id,@action_id,@action_history_id) .UPDATE_SUBC(D,'investors',@investor_id) .UPDATE_SUBC(D,'investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC(D,'doc_sec',@deal_id) .UPDATE_SUBC(D,'portfolio',@portfolio_id) .UPDATE_SUBC(D,'stock_emis',@cur_stock_id) .UPDATE_SUBC(K,'investors',@investor_id) .UPDATE_SUBC(K,'portfolio',@portfolio_id) .UPDATE_SUBC(K,'investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC(K,'price_position',@price_position_id) .UPDATE_SUBC(K,'contragents',@contragent_id) .UPDATE_SUBC(K,'doc_sec',@deal_id) .SUBC_CHECK end end fetch cur1 into @cur_doc_id,@cur_stock_qty,@cur_stock_id,@cur_com end close cur1 .DEALLOCATE cur1 end else /*=================Продажа====================*/ begin open cur1 fetch cur1 into @cur_doc_id,@cur_stock_qty,@cur_stock_id,@cur_com while .CURSOR_STATE=0 begin if @method_id<>3 select @partion_id=@deal_id select @saldo100=(select sum(isnull(t_oper_list.qty_sum,0)) from t_operations,t_oper_list where t_operations.item_id=@cur_doc_id and t_oper_list.head_id=t_operations.id and t_oper_list.acc_id=@acc_long_id and t_operations.partner2plan_id=((select t_plans2partner.id from t_plans2partner,t_items,t_states, t_plans,t_partners where t_plans2partner.plan_id=t_plans.id and t_plans.id=@plan_money and t_plans2partner.partner_id=t_partners.id and t_partners.id=@owner_id and t_plans2partner.id=t_items.id and t_items.state_id=t_states.id and t_states.class_id=0))) select @saldo190=(select sum(isnull(t_oper_list.qty_sum,0)) from t_operations,t_oper_list where t_operations.item_id=@cur_doc_id and t_oper_list.head_id=t_operations.id and t_oper_list.acc_id=@acc_short_id and t_operations.partner2plan_id=((select t_plans2partner.id from t_plans2partner,t_items,t_states, t_plans,t_partners where t_plans2partner.plan_id=t_plans.id and t_plans.id=@plan_money and t_plans2partner.partner_id=t_partners.id and t_partners.id=@owner_id and t_plans2partner.id=t_items.id and t_items.state_id=t_states.id and t_states.class_id=0))) if isnull(@saldo190,0)>0 --- Короткая begin if @is_com_in=1 select @com_in_qty=0 else select @com_in_qty=null select @com1part=isnull(round((@saldo190*isnull(@cur_com,0))/@cur_stock_qty,2),0) ---- D: Счет затрат на приобретение , K: Счет комиссии .OPERATION(@owner_id,@plan_money,@date_b,@com_in_acc_id,@com_acc_id,@com1part,@cur_rur,@date_b,@com_in_qty,0,@comment,N,@oper_id,@id,@action_id,@action_history_id) .UPDATE_SUBC(D,'investors',@investor_id) .UPDATE_SUBC(D,'doc_sec_in',@partion_id) .UPDATE_SUBC(D,'stock_emis',@cur_stock_id) .UPDATE_SUBC(D,'investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC(K,'investors',@investor_id) .UPDATE_SUBC(K,'portfolio',@portfolio_id) .UPDATE_SUBC(K,'investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC(K,'price_position',@price_position_id) .UPDATE_SUBC(K,'contragents',@contragent_id) .UPDATE_SUBC(K,'doc_sec',@deal_id) .SUBC_CHECK if @character_id=2 -- Сделка клиентская begin ---- D: Фонд ЦБ клиента , K: Фонд ДС клиента .OPERATION(@owner_id,@plan_money,@date_b,@acc_fond_cl,@acc_fond_cl_secur,@com1part,@cur_rur,@date_b,null,null,@comment,N,@oper_id,@id,@action_id,@action_history_id) .UPDATE_SUBC(D,'investors',@contract_id) .UPDATE_SUBC(K,'investors',@contract_id) .UPDATE_SUBC(K,'stock_emis',@cur_stock_id) .SUBC_CHECK end end if isnull(@saldo100,0)>0 -- Есть остаток по длинной begin if isnull(@saldo100,0) >= @cur_stock_qty select @com2part=isnull(@cur_com,0) else select @com2part=isnull(@cur_com,0)-isnull(@com1part,0) --- select @com2part=round((@saldo100*isnull(@comis100,0))/@stock_qty,2) /* ---- По моему это бред !!!! if @comis100<(isnull(@com2part,0)+isnull(@com1part,0)) select @com2part=isnull(@com2part,0)-abs(@comis100-isnull(@com2part,0)-isnull(@com1part,0)) else if @comis100>(isnull(@com2part,0)+isnull(@com1part,0)) select @com2part=isnull(@com2part,0)+abs(@comis100-isnull(@com2part,0)-isnull(@com1part,0)) ------------------------*/ if @is_realiz<>1 --- Используем счет реализации begin if @fin_result10=1 --- Ведем финансовый результат begin ---- D: Счет реализации или прибыли-убытка , K: Счет комиссии .OPERATION(@owner_id,@plan_money,@date_b,@account_id,@com_acc_id,@com2part,@cur_rur,@date_b,null,null,@comment,N,@oper_id,@id,@action_id,@action_history_id) .UPDATE_SUBC(D,'investors',@investor_id) .UPDATE_SUBC(D,'investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC(D,'doc_sec',@deal_id) .UPDATE_SUBC(D,'portfolio',@portfolio_id) .UPDATE_SUBC(D,'stock_emis',@cur_stock_id) .UPDATE_SUBC(K,'investors',@investor_id) .UPDATE_SUBC(K,'portfolio',@portfolio_id) .UPDATE_SUBC(K,'investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC(K,'price_position',@price_position_id) .UPDATE_SUBC(K,'contragents',@contragent_id) .UPDATE_SUBC(K,'doc_sec',@deal_id) .SUBC_CHECK if @character_id=1 --- Сделка дилерская begin ---- D: Фонд компании , K: Счет реализации или прибыли-убытка .OPERATION(@owner_id,@plan_money,@date_b,@acc_fond_own,@account_id,@com2part,@cur_rur,@date_b,null,null,@comment,N,@oper_id,@id,@action_id,@action_history_id) .UPDATE_SUBC(K,'portfolio',@portfolio_id) .UPDATE_SUBC(K,'investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC(K,'investors',@investor_id) .UPDATE_SUBC(K,'doc_sec',@deal_id) .UPDATE_SUBC(K,'stock_emis',@cur_stock_id) .UPDATE_SUBC(D,'investors',@investor_id) .UPDATE_SUBC(D,'portfolio',@portfolio_id) .UPDATE_SUBC(D,'investor2portfolio',@portfolio_sub_id) .SUBC_CHECK end else --- Сделка клиентская begin ---- D: Фонд ДС клиента , K: Счет реализации или прибыли-убытка .OPERATION(@owner_id,@plan_money,@date_b,@acc_fond_cl,@account_id,@com2part,@cur_rur,@date_b,null,null,@comment ,N,@oper_id,@id,@action_id,@action_history_id) .UPDATE_SUBC(D,'investors',@contract_id) .UPDATE_SUBC(K,'portfolio',@portfolio_id) .UPDATE_SUBC(K,'investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC(K,'investors',@investor_id) .UPDATE_SUBC(K,'doc_sec',@deal_id) .UPDATE_SUBC(K,'stock_emis',@cur_stock_id) .SUBC_CHECK end end else --- Не ведем финансовый результат if @fin_result10=0 --- Не ведем финансовый результат (это второй раз проверяется не понятно зачем !!!!) -- может ведь и нуллом оказаться begin ---- D: Фонд ДС клиента , K: Счет затрат *******8 .OPERATION(@owner_id,@plan_money,@date_b,@acc_fond_cl,@com_acc_id,@com2part,@cur_rur,@date_b,null,null,@comment ,N,@oper_id,@id,@action_id,@action_history_id) .UPDATE_SUBC(D,'investors',@contract_id) .UPDATE_SUBC(K,'investors',@investor_id) .UPDATE_SUBC(K,'portfolio',@portfolio_id) .UPDATE_SUBC(K,'investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC(K,'price_position',@price_position_id) .UPDATE_SUBC(K,'contragents',@contragent_id) .UPDATE_SUBC(K,'doc_sec',@deal_id) .SUBC_CHECK end end else --- Не используем счет реализации begin ---- D: Счет прибыли-убытка , K: Счет комиссии .OPERATION(@owner_id,@plan_money,@date_b,@account_id,@com_acc_id,@com2part,@cur_rur,@date_b,null,null,@comment,N,@oper_id,@id,@action_id,@action_history_id) .UPDATE_SUBC(D,'investors',@investor_id) .UPDATE_SUBC(D,'investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC(D,'doc_sec',@deal_id) .UPDATE_SUBC(D,'portfolio',@portfolio_id) .UPDATE_SUBC(D,'stock_emis',@cur_stock_id) .UPDATE_SUBC(K,'investors',@investor_id) .UPDATE_SUBC(K,'portfolio',@portfolio_id) .UPDATE_SUBC(K,'investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC(K,'price_position',@price_position_id) .UPDATE_SUBC(K,'contragents',@contragent_id) .UPDATE_SUBC(K,'doc_sec',@deal_id) .SUBC_CHECK end end fetch cur1 into @cur_doc_id,@cur_stock_qty,@cur_stock_id,@cur_com end close cur1 .DEALLOCATE cur1 end ---end if object_id('tempdb..#oper_doc') is not null drop table #oper_doc .TRANSACTION_RESTORE ----.BACK_SETUP_PROFIT_OR_LOSS(@deal_id,@date_b,@owner_id) ------------- По ПИФ #ifdef ALD_FUND /* -- kashuba_av 23.12.05 Убрал, так как создавалась лишняя комиссия по ПИФ if .TEST_PIF_CLIENT(@contract_id) begin exec ap_pif_comis_exec @id, @action_id, @action_history_id, @contract_id, @deal_id, @stock_id, @comis100, @date_b, @contragent_id, @partion_id end */ #endif end ---commit tran end