create procedure dbo.%PROC% @sid varchar(30) = null as .BEGIN('N') 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, @home_subc_str varchar(255), @exec_sum money, @exec_qty2oper money, @acc_exec_sum money, @oper_sum money, @acc_oper_sum money, @mess_res_close varchar(255), @oblig_acc_id numeric, @oblig_acc_cl_id numeric, @plan_cur_close_id numeric, @d_acc_id numeric, @c_acc_id numeric, @plan2partner_money numeric, @subc_str_money varchar(255), @subc_str_stock varchar(255), @profit_acc_close_id numeric, @fin_result int -- letsko_av -- 21.06.2005 -- Дата - максимальная из всех платежей и всех деп.операций SELECT @fact_pay_date = MAX(td_depo_docs.in_date) FROM td_depo_docs WHERE td_depo_docs.foundation_id = @id AND ( .ITEMS_EXISTS_BY_TYPE_STATE_NO(td_depo_docs.id, 'REAL_PAYMENT_IN', 'DEL') OR .ITEMS_EXISTS_BY_TYPE_STATE_NO(td_depo_docs.id, 'REAL_PAYMENT_OUT', 'DEL') OR .ITEMS_EXISTS_BY_TYPE_STATE_NO(td_depo_docs.id, 'D_STOCK_IN_OTHER_DEPO', 'DEL') OR .ITEMS_EXISTS_BY_TYPE_STATE_NO(td_depo_docs.id, 'D_STOCK_OUT_OTHER_DEPO', 'DEL') ); DECLARE @max_fact_pay_date DATETIME; SELECT @max_fact_pay_date = MAX(t_paydocs.complete_date) FROM t_paydocs WHERE t_paydocs.foundation_id = @id AND ( .ITEMS_EXISTS_BY_TYPE_STATE_NO(t_paydocs.id, 'REAL_PAYMENT_IN', 'DEL') OR .ITEMS_EXISTS_BY_TYPE_STATE_NO(t_paydocs.id, 'REAL_PAYMENT_OUT', 'DEL') OR .ITEMS_EXISTS_BY_TYPE_STATE_NO(t_paydocs.id, 'D_STOCK_IN_OTHER_DEPO', 'DEL') OR .ITEMS_EXISTS_BY_TYPE_STATE_NO(t_paydocs.id, 'D_STOCK_OUT_OTHER_DEPO', 'DEL') ); IF ISNULL(@max_fact_pay_date, 0) > ISNULL(@fact_pay_date, 0) SELECT @fact_pay_date = @max_fact_pay_date; -- letsko_av (end) select @in_date=dateadd(yy,1,@in_date) .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) select @plan_cur_close_id=.CUR2PLAN(@plan_money_id) select @plan2partner_money=.PLAN2PARTNER_ID(@owner_id,@plan_money_id) select @home_subc_str='' .SUBC_STR_ADD(@home_subc_str,'DOC_SEC',@id,N) .SUBC_STR_ADD(@home_subc_str,'INVESTOR2PORTFOLIO',@portfolio_sub_id,N) .SUBC_STR_ADD(@home_subc_str,'PORTFOLIO',@portfolio_id,N) .SUBC_STR_ADD(@home_subc_str,'CONTRAGENTS',@contragent_id,N) if @character_id=2 begin .SUBC_STR_ADD(@home_subc_str,'INVESTORS',@client_contract_id,N) end else begin select @broker_id=.ORG_FROM_PARTNER(@owner_id) .SUBC_STR_ADD(@home_subc_str,'INVESTORS',@broker_id,N) end select @subc_str_money=@home_subc_str select @subc_str_stock=@home_subc_str .SUBC_STR_ADD(@subc_str_stock,'STOCK_EMIS',@stock_id,N) .ACCID_FROM_CONST2PLAN(@oblig_acc_id,'BACK_ACC_MONEY_VBR_DOG',@plan_money_id,2,1,'Счет обязательств по ДС (договор)',@mess_res_close) if @character_id = 1 begin .ACCID_FROM_CONST2PLAN(@oblig_acc_cl_id,'BACK_ACC_FUND_MONEY',@plan_money_id,1,2,'Счет фонда компании',@mess_res_close) select @fin_result=1 end else begin .ACCID_FROM_CONST2PLAN(@oblig_acc_cl_id,'BACK_ACC_CL_OBLIG_VBR',@plan_money_id,1,1,'Счет обязательств по ДС клиента',@mess_res_close) select @fin_result=fin_result from tb_contracts where id=@client_contract_id if @fin_result is null select @fin_result=0 end .ACCID_FROM_CONST2PLAN(@profit_acc_close_id,'BACK_ACC_PROFIT_BAYSALE_MAIN',@plan_money_id,1,1,'Счет прибыли или убытки по сделке (основной)',@mess_res_close) .SALDO_NOW_SBC(@plan2partner_money,@oblig_acc_id,@home_subc_str,(1),@exec_sum,@exec_qty2oper,@acc_exec_sum) select @mess_res_close='Закрытие обязательств по оплате' .SUBC_STR_ADD(@home_subc_str,'STOCK_EMIS',@stock_id,N) if @fin_result=0 begin IF ((ISNULL(@exec_sum,0)) <= 0) or ((ISNULL(@acc_exec_sum,0)) <= 0) BEGIN select @d_acc_id=@oblig_acc_id select @c_acc_id=@oblig_acc_cl_id select @oper_sum=@exec_sum*(-1.0) select @acc_oper_sum=@acc_exec_sum*(-1.0) END ELSE IF ((ISNULL(@exec_sum,0)) > 0) or ((ISNULL(@acc_exec_sum,0)) > 0) BEGIN select @oper_sum=@exec_sum select @acc_oper_sum=@acc_exec_sum select @d_acc_id=@oblig_acc_cl_id select @c_acc_id=@oblig_acc_id END .OPERATION_SBC(@owner_id,@plan_money_id,@fact_pay_date,@d_acc_id,@c_acc_id,@oper_sum,@plan_cur_close_id,@in_date,0,0,@mess_res_close,Y, @operation_id,@id,@action_id,@action_history_id,@acc_exec_sum,@acc_oper_sum,@home_subc_str,@home_subc_str,@cur_id,@cur_id) end else if @fin_result=1 begin IF ((ISNULL(@exec_sum,0)) <= 0) or ((ISNULL(@acc_exec_sum,0)) <= 0) BEGIN select @mess_res_close='Закрытие обязательств по оплате.Прибыль' select @oper_sum=@exec_sum*(-1.0) select @acc_oper_sum=@acc_exec_sum*(-1.0) select @d_acc_id=@oblig_acc_id select @c_acc_id=@profit_acc_close_id END ELSE IF ((ISNULL(@exec_sum,0)) > 0) or ((ISNULL(@acc_exec_sum,0)) > 0) BEGIN select @mess_res_close='Закрытие обязательств по оплате.Убыток' select @oper_sum=@exec_sum select @acc_oper_sum=@acc_exec_sum select @d_acc_id=@profit_acc_close_id select @c_acc_id=@oblig_acc_id END .OPERATION_SBC(@owner_id,@plan_money_id,@fact_pay_date,@d_acc_id,@c_acc_id,@oper_sum,@plan_cur_close_id,@in_date,0,0,@mess_res_close,Y, @operation_id,@id,@action_id,@action_history_id,@acc_oper_sum,@acc_oper_sum,@home_subc_str,@home_subc_str,@cur_id,@cur_id) IF ((ISNULL(@exec_sum,0)) <= 0) or ((ISNULL(@acc_exec_sum,0)) <= 0) BEGIN select @d_acc_id=@profit_acc_close_id select @c_acc_id=@oblig_acc_cl_id END ELSE IF ((ISNULL(@exec_sum,0)) > 0) or ((ISNULL(@acc_exec_sum,0)) > 0) BEGIN select @d_acc_id=@oblig_acc_cl_id select @c_acc_id=@profit_acc_close_id END .OPERATION_SBC(@owner_id,@plan_money_id,@fact_pay_date,@d_acc_id,@c_acc_id,@oper_sum,@plan_cur_close_id,@in_date,0,0,@mess_res_close,Y, @operation_id,@id,@action_id,@action_history_id,@acc_oper_sum,@acc_oper_sum,@home_subc_str,@home_subc_str,@cur_id,@cur_id) end .BACK_EXEC_OBLIGATION(@id,2,@subc_str_money,@subc_str_stock,@in_date,@owner_id,1) #ifdef ALD_UKPIF if .TEST_PIF_CLIENT(@client_contract_id) begin execute ap_close_ds_vbr2pif @id, @action_id, @action_history_id, @client_contract_id, @fact_pay_date, @exec_sum if @@error <> 0 begin if @@trancount<>0 rollback tran return end end #endif /*-------Проводки ----------*/ commit tran .END