create procedure dbo.%PROC% @sid varchar(30) = null, @pay_doc_id numeric, @action_id numeric, @action_history_id numeric as declare @id numeric begin select @id=convert(numeric,@sid) begin tran ----.ACTION_HISTORY .GET_PROPS declare @broker_id numeric, @plan_secur_id numeric, @plan_money_id numeric, @out_met_id int, @is_realiz int, @is_p2l_com int, @is_com_in int, @is_allow_short4stocks int, @is_allow_short4money int, @asset4pereoc_type_id int, @oblig_acc_id numeric, @mes varchar(255), @home_subc_str varchar(255), @cur_investor_id numeric, @exec_sum money, @acc_exec_sum money, @cur_portfolio_id numeric, @cur_portfolio_sub_id numeric, @cur_contr_id numeric, @cur_stock_id numeric, @character_id numeric, @fin_result int, @mess_res_close varchar(255), @profit_acc_close_id numeric, @fond_own_close_id numeric .INT_VAR(@pay_perpose) .ASSIGN(@pay_perpose,((select code from t_purposes where id=@perpose_id))) declare @plan_cur_close_id numeric, @debet_acc_close_id numeric, @credit_acc_close_id numeric, @oper_sum_close money, @saldo_bal_close money, @stock2oper_sum money, @stock2oper_cur_id numeric declare @to_acc_type_id numeric if @pay_doc_id is not null begin .TYPE_GET('REAL_PAYMENT_IN',@pay_doc_id) end select @to_acc_type_id=acc_purpose_id from t_bank_accounts where id = @to_partner_acc_id1 /********************/ -- Богаковский 16/12/2004 закомментировал прибавление года к дате проводки, -- поскольку проводки должны проходить датой платежа, добавил вычисление даты платежа -- select @in_date=dateadd(yy,1,@in_date) select @in_date=(select in_date from td_depo_docs where id=@pay_doc_id) /********************/ .BACK_GET_ORG_PARMS(@owner_id,@broker_id,@plan_money_id,@plan_secur_id,@out_met_id,@is_realiz,@is_p2l_com,@is_com_in,@is_allow_short4stocks,@is_allow_short4money,@asset4pereoc_type_id) .ACCID_FROM_OBJ2PLAN(@oblig_acc_id,@perpose_id,@plan_money_id,1,1,'К расходу',@mes) select @plan_cur_close_id=.CUR2PLAN(@plan_money_id) select @home_subc_str='' .SUBC_STR_ADD(@home_subc_str,'DOC_SEC',@id,Y) .SUBC_STR_ADD(@home_subc_str,'INVESTOR2PORTFOLIO',null,Y) .SUBC_STR_ADD(@home_subc_str,'PORTFOLIO',null,Y) .SUBC_STR_ADD(@home_subc_str,'CONTRAGENTS',null,Y) .SUBC_STR_ADD(@home_subc_str,'INVESTORS',null,Y) .SUBC_STR_ADD(@home_subc_str,'STOCK_EMIS',null,Y) .TOTALS_QUERY(@owner_id,@plan_money_id,@in_date,@in_date,@oblig_acc_id,@home_subc_str,L,N,Y,D,P,Y,S,N,N,N,L,N,Y) if @pay_doc_id is not null begin -- на наш брокерский счет if @to_partner_id1=@owner_id and @to_acc_type_id=4 begin delete #tmp_osv where #tmp_osv.s2_id=@broker_id or #tmp_osv.s2_id in (select c.id from tb_contracts c, td_depo_docs d,tb_contract_types ct where c.id=d.id and d.owner_id=@owner_id and c.dog_type_id=ct.id and ct.contract_class_id=1 and .ITEMS_EXISTS_BY_TYPE(c.id,'CLIENT_CONTRACTS')) end -- на наш счет ДУ (или счет для ПИФ) if @to_partner_id1=@owner_id and @to_acc_type_id in (2,3) begin delete #tmp_osv where #tmp_osv.s2_id not in (select c.id from tb_contracts c, td_depo_docs d, t_bank_accounts b where c.id=d.id and d.owner_id=@owner_id and b.id = @to_partner_acc_id1 and c.client_id=b.fund_id and .ITEMS_EXISTS_BY_TYPE(c.id,'CLIENT_CONTRACTS')) end -- ДЛЯ НАС if @to_partner_id1=@owner_id and @to_acc_type_id in (1) begin delete #tmp_osv where #tmp_osv.s2_id in (select c.id from tb_contracts c, td_depo_docs d where c.id=d.id and d.owner_id=@owner_id and .ITEMS_EXISTS_BY_TYPE(c.id,'CLIENT_CONTRACTS')) end -- не для нас if @to_partner_id1<>@owner_id begin delete #tmp_osv where #tmp_osv.s2_id not in (select c.id from tb_contracts c, td_depo_docs d where c.id=d.id and d.owner_id=@owner_id and c.client_id=@to_partner_id1 and .ITEMS_EXISTS_BY_TYPE(c.id,'CLIENT_CONTRACTS')) end end declare deb_rests2close cursor for select #tmp_osv.saldo_de,#tmp_osv.ac_saldo_de, #tmp_osv.s1_id, #tmp_osv.s2_id, #tmp_osv.s3_id, #tmp_osv.s4_id,#tmp_osv.s5_id from #tmp_osv where #tmp_osv.saldo_de <> 0 or #tmp_osv.ac_saldo_de <> 0 for read only open deb_rests2close fetch deb_rests2close into @exec_sum,@acc_exec_sum,@cur_stock_id, @cur_investor_id, @cur_portfolio_id, @cur_portfolio_sub_id,@cur_contr_id WHILE (.CURSOR_STATE = 0) BEGIN -- SELECT 'letsko_av_debug', 'ap_stock_redemption_closeN', @exec_sum AS exec_sum, @acc_exec_sum AS acc_exec_sum, -- @cur_stock_id AS cur_stock_id, @cur_investor_id AS cur_investor_id, @cur_portfolio_id AS cur_portfolio_id, -- @cur_portfolio_sub_id AS cur_portfolio_sub_id, @cur_contr_id AS cur_contr_id .SUBC_STR_ADD(@home_subc_str,'DOC_SEC',@id) .SUBC_STR_ADD(@home_subc_str,'INVESTOR2PORTFOLIO',@cur_portfolio_sub_id) .SUBC_STR_ADD(@home_subc_str,'PORTFOLIO',@cur_portfolio_id) .SUBC_STR_ADD(@home_subc_str,'CONTRAGENTS',@cur_contr_id) .SUBC_STR_ADD(@home_subc_str,'INVESTORS',@cur_investor_id) .SUBC_STR_ADD(@home_subc_str,'STOCK_EMIS',@cur_stock_id) select @stock2oper_cur_id=.CUR_FROM_STOCK(@cur_stock_id) if exists(select 1 from tb_contracts where id=@cur_investor_id) begin select @fin_result=(select fin_result from tb_contracts where id=@cur_investor_id) select @character_id=2 end else begin select @fin_result=1 select @character_id=1 end select @saldo_bal_close=0 select @oper_sum_close=0 if @pay_perpose=47 begin .ACCID_FROM_CONST2PLAN(@profit_acc_close_id,'BACK_ACC_PROFIT_DIVIDEND',@plan_money_id,1,1,'Счет прибыли для дивидендов',@mess_res_close) end else begin .ACCID_FROM_CONST2PLAN(@profit_acc_close_id,'BACK_ACC_PROFIT_OTHER',@plan_money_id,1,1,'Счет прочие доходы и расходы',@mess_res_close) end /* if isnull(@exec_sum,0)>0 select @saldo_bal_close=@exec_sum*(-1.0) if isnull(@acc_exec_sum,0)>0 select @saldo_bal_close_acc=@acc_exec_sum*(-1.0) */ if @character_id = 1 begin .ACCID_FROM_CONST2PLAN(@fond_own_close_id,'BACK_ACC_FUND_MONEY',@plan_money_id,1,2,'Счет фонда компании',@mess_res_close) end else begin .ACCID_FROM_CONST2PLAN(@fond_own_close_id,'BACK_ACC_FUND_MONEY',@plan_money_id,1,3,'Счет фонда ДС клиента',@mess_res_close) end if @fin_result is null select @fin_result=0 if @fin_result=1 begin if @exec_sum>0 --- Убыток begin select @oper_sum_close=@exec_sum select @stock2oper_sum=@acc_exec_sum select @mess_res_close='Убыток' ---select @mess_res_close='Расходы при продаже' select @debet_acc_close_id=@profit_acc_close_id select @credit_acc_close_id=@oblig_acc_id end else if @exec_sum<0 --- Прибыль begin select @mess_res_close='Прибыль' select @stock2oper_sum=@acc_exec_sum*(-1.0) select @oper_sum_close=@exec_sum*(-1.0) select @debet_acc_close_id=@oblig_acc_id select @credit_acc_close_id=@profit_acc_close_id end ---.EXIT_MESSAGE_PARM('',%IS_CALC_PROFIT%) IF ((ISNULL(@oper_sum_close,0)) <> 0) or ((ISNULL(@stock2oper_sum,0)) <> 0) BEGIN .OPERATION_SBC(@owner_id,@plan_money_id,@in_date,@debet_acc_close_id,@credit_acc_close_id,@oper_sum_close,@plan_cur_close_id,@in_date,0,0,@mess_res_close,Y, @operation_id,@id,@action_id,@action_history_id,@stock2oper_sum,@stock2oper_sum,@home_subc_str,@home_subc_str,@stock2oper_cur_id,@stock2oper_cur_id) END if @exec_sum>0 --- Убыток begin --select @mess_res_close='Списание убытка на фонды' select @mess_res_close='Списание расходов при продаже на фонды' select @debet_acc_close_id=@fond_own_close_id select @credit_acc_close_id=@profit_acc_close_id end else if @exec_sum<0 --- Прибыль begin select @mess_res_close='Списание прибыли на фонды' select @debet_acc_close_id=@profit_acc_close_id select @credit_acc_close_id=@fond_own_close_id end IF ((ISNULL(@oper_sum_close,0)) <> 0) or ((ISNULL(@stock2oper_sum,0)) <> 0) BEGIN .OPERATION_SBC(@owner_id,@plan_money_id,@in_date,@debet_acc_close_id,@credit_acc_close_id,@oper_sum_close,@plan_cur_close_id,@in_date,0,0,@mess_res_close,Y, @operation_id,@id,@action_id,@action_history_id,@stock2oper_sum,@stock2oper_sum,@home_subc_str,@home_subc_str,@stock2oper_cur_id,@stock2oper_cur_id) END end else begin if @exec_sum>0 --- Убыток begin select @mess_res_close='Списание убытка на фонды' select @debet_acc_close_id=@fond_own_close_id select @credit_acc_close_id=@oblig_acc_id end else if @exec_sum<0 --- Прибыль begin select @mess_res_close='Списание прибыли на фонды' select @debet_acc_close_id=@oblig_acc_id select @credit_acc_close_id=@fond_own_close_id end if @exec_sum>0 select @oper_sum_close=@exec_sum, @stock2oper_sum=@acc_exec_sum else if @exec_sum<0 select @oper_sum_close=@exec_sum*(-1.0), @stock2oper_sum=@acc_exec_sum*(-1.0) IF ((ISNULL(@oper_sum_close,0)) <> 0) or ((ISNULL(@stock2oper_sum,0)) <> 0) BEGIN .OPERATION_SBC(@owner_id,@plan_money_id,@in_date,@debet_acc_close_id,@credit_acc_close_id,@oper_sum_close,@plan_cur_close_id,@in_date,0,0,@mess_res_close,Y, @operation_id,@id,@action_id,@action_history_id,@stock2oper_sum,@stock2oper_sum,@home_subc_str,@home_subc_str,@stock2oper_cur_id,@stock2oper_cur_id) END end IF (.TEST_PIF_CLIENT(@cur_investor_id)) AND (@pay_perpose <> 47) BEGIN EXEC ap_close_ds_redemp2pif @id, @action_id, @action_history_id, @cur_investor_id, @cur_contr_id, @in_date, @exec_sum IF @@error != 0 BEGIN IF @@trancount <> 0 ROLLBACK TRAN RETURN END END fetch deb_rests2close into @exec_sum,@acc_exec_sum,@cur_stock_id, @cur_investor_id, @cur_portfolio_id, @cur_portfolio_sub_id,@cur_contr_id end close deb_rests2close .DEALLOCATE deb_rests2close ----.UPDATE_STATE /*-------Проводки ----------*/ --- Пифы Приймак /* #ifdef ALD_FUND if ((.GET_CONST('CLIENT_CODE') = 'PROSPERITY') and (@pay_perpose = 47)) BEGIN -- Приймак для Мельникова вкрутка проводки по Пифу 5,04,06 DECLARE @ddd numeric SELECT @ddd=ISNULL((SELECT id FROM t_paydocs WHERE foundation_id=@id and is_last_pay=1 and .ITEMS_EXISTS_BY_TYPE(t_paydocs.id,'REAL_PAYMENT_IN')),@id) Declare @bank_account_id numeric select @in_date=(select in_date from td_depo_docs where id=@id) --Походу @bank_account_id = null нормал для этой операции EXEC ap_pif_group_opers @ddd, @action_id, @action_history_id, @perpose_id, @stock_id, @stock_new_id, @bank_account_id, @in_date, @stock_qty, @stock_new_qty, @total_sum; IF @@ERROR != 0 BEGIN IF @@TRANCOUNT <> 0 ROLLBACK TRAN; RETURN; END; END #endif */ commit tran end