# Date: 21/03/06 # Version: 105 $PATTERN(.BACK_CLOSE_PROFIT_LOSS_QTY_COMM) name=Закрытие прибыли/убытка на фонды c комментарием и суммой class=2 product=ALD_SECUR pattern_text=$TEXT(12331497) #ifndef #close_profit_or_loss #define #close_profit_or_loss declare @saldo_bal_close money, @saldo_bal_close_k money, @saldo_bal_close_d money, @profit_acc_close_id numeric, @realiz_acc_close_id numeric, @mess_res_close varchar(255), @plan_cur_close_id numeric, @fond_own_close_id numeric, @debet_acc_close_id numeric, @credit_acc_close_id numeric, @oper_sum_close money, @stock2oper_id numeric, @stock2oper_sum money, @stock2oper_cur_id numeric, @close_plan2partner_id numeric, @close_s_qty money, @close_acc_sum money -- letsko_av -- 31.03.2005 -- Проводки ПИФ по переоценке .ID_VAR(@fund_plan_id) .ID_VAR(@imushestvo_account_id) .ID_VAR(@pif_stock_acc_id) .ID_VAR(@fund_id) .ID_VAR(@rubel_id) .ID_VAR(@letsko_ssc_inv_id) .ID_VAR(@letsko_ssc_stock_id) .ID_VAR(@letsko_ssc_portfolio_id) .ID_VAR(@myplan2partner) DECLARE @xxx_subc_str VARCHAR(255) .MONEY_VAR(@mysumma) .MONEY_VAR(@myqty) .MONEY_VAR(@mysumm) DECLARE @type_rate_check_pif INT, @sd42_date_str VARCHAR(255), @cur_rate_date_pif DATETIME, @cur_is_rate_pif INT, @cur_stock_rur_pif NUMERIC, @cur_coupon_rur_pif DECIMAL(18, 8), @cur_stock_sum_pif DECIMAL(18, 8), @cur_coupon_sum_pif DECIMAL(18, 8), @fund_rate_value_pif MONEY -- kashuba_av 16.11.05 (begin) -- Теперь мы будем брать счета из констант SELECT @fund_plan_id = .ARG_PLAN('PIF_ACCOUNT') .ACCID_FROM_CONST2PLAN(@pif_stock_acc_id, 'BACK_ACC_UNKD', @fund_plan_id, 1, 1, 'Счет УНКД', @mess) .ACCID_FROM_CONST2PLAN(@imushestvo_account_id, 'BACK_ACC_PROFITLOSS_UNKD', @fund_plan_id, 1, 1, 'Счет прибыли убытка при начислении КД', @mess) SELECT @rubel_id = .CUR('RUR') -- kashuba_av 16.11.05 (end) -- letsko_av (end) #endif select @saldo_bal_close=0 select @saldo_bal_close_k=0 select @saldo_bal_close_d=0 select @oper_sum_close=0 select @plan_cur_close_id=(select cur_id from t_plans where id=%PLAN_MONEY_ID%) ---- достаем счет реализации .ACCID_FROM_CONST2PLAN(@realiz_acc_close_id,'BACK_ACC_REALIZ', %PLAN_MONEY_ID%,1,1,'Cчет реализации',@mess_res_close) ---- если закрываем какой то конкретный счет,который передается в шаблон, то переприсваиваем счет ---- в противном случае закрываем счет реализации if convert(numeric,%ACC_ID%) is not null select @realiz_acc_close_id=%ACC_ID% ---- в зависимости от типа закрытия, достаем счет прибыли/убытка, на который будем закрывать if %TYPE_CLOSE%=1 begin .ACCID_FROM_CONST2PLAN(@profit_acc_close_id,'BACK_ACC_PROFIT_BAYSALE_MAIN',%PLAN_MONEY_ID%,1,1,'Счет прибыли или убытки по сделке (основной)',@mess_res_close) end else if %TYPE_CLOSE%=2 begin .ACCID_FROM_CONST2PLAN(@profit_acc_close_id,'BACK_ACC_PROFIT_BAYSALE_COMIS',%PLAN_MONEY_ID%,1,1,'Счет прибыли или убытки по сделке (по комиссиям)',@mess_res_close) end else if %TYPE_CLOSE%=3 begin .ACCID_FROM_CONST2PLAN(@profit_acc_close_id,'BACK_ACC_PROFIT_BAYSALE_FUTUR',%PLAN_MONEY_ID%,1,1,'Счет прибыли или убытки по сделке (буд. периодов)',@mess_res_close) end else if %TYPE_CLOSE%=4 begin .ACCID_FROM_CONST2PLAN(@profit_acc_close_id,'BACK_ACC_PROFIT_DIVIDEND',%PLAN_MONEY_ID%,1,1,'Счет прибыли для дивидендов',@mess_res_close) end else if %TYPE_CLOSE%=5 begin .ACCID_FROM_CONST2PLAN(@profit_acc_close_id,'BACK_ACC_PROFIT_OTHER',%PLAN_MONEY_ID%,1,1,'Счет прочей прибыли убытка',@mess_res_close) end ---.SALDO(%OWNER_ID%,%PLAN_MONEY_ID%,%OP_DATE%,@realiz_acc_close_id,%REALIZ_SUBC%,N,K,@saldo_bal_close_k) ---.SALDO(%OWNER_ID%,%PLAN_MONEY_ID%,%OP_DATE%,@realiz_acc_close_id,%REALIZ_SUBC%,N,D,@saldo_bal_close_d) ---- вычисляется остаток по счету, который будем закрывать в 0 select @close_plan2partner_id=.PLAN2PARTNER_ID(%OWNER_ID%,%PLAN_MONEY_ID%) -- letsko_av -- 19.05.2005 -- Считать по новому шаблону --.SALDO_NOW_SBC(@close_plan2partner_id,@realiz_acc_close_id,%REALIZ_SUBC%,(-1),@saldo_bal_close_k,@close_s_qty,@close_acc_sum) .SALDO_NOW_MIGHT(@close_plan2partner_id,@realiz_acc_close_id,%REALIZ_SUBC%,(-1),@saldo_bal_close_k,@close_s_qty,@close_acc_sum) --.SALDO_NOW_SBC(@close_plan2partner_id,@realiz_acc_close_id,%REALIZ_SUBC%,1,@saldo_bal_close_d,@close_s_qty,@close_acc_sum) .SALDO_NOW_MIGHT(@close_plan2partner_id,@realiz_acc_close_id,%REALIZ_SUBC%,1,@saldo_bal_close_d,@close_s_qty,@close_acc_sum) -- letsko_av (end) ---- если указана конкретная сумма, то закрываем на эту сумму if isnull(%SUM%,0)<>0 select @saldo_bal_close=%SUM%*(-1.0) else --- или закрываем на остаток по счету begin if @saldo_bal_close_d<>0 select @saldo_bal_close=@saldo_bal_close_d else if @saldo_bal_close_k<>0 select @saldo_bal_close=@saldo_bal_close_k*(-1.0) end ----- вычисляем счет фонда инвестора, на который будут закрываться прибыли-убытки 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 %IS_CALC_PROFIT% is null select %IS_CALC_PROFIT%=0 /*Присвоение счетов и сумм проводки, в зависимости от знака остатка и возможности \ вести фин результат*/ if %IS_CALC_PROFIT%=1 --- если ведем фин. результат begin if @saldo_bal_close>0 --- Убыток begin select @oper_sum_close=@saldo_bal_close --select @mess_res_close='Убыток' select @mess_res_close=%COMMENT%+' - списание убытка' select @debet_acc_close_id=@profit_acc_close_id select @credit_acc_close_id=@realiz_acc_close_id end else if @saldo_bal_close<0 --- Прибыль begin select @mess_res_close=%COMMENT%+' - зачисление прибыли' select @oper_sum_close=@saldo_bal_close*(-1.0) select @debet_acc_close_id=@realiz_acc_close_id select @credit_acc_close_id=@profit_acc_close_id end --- проводка по закрытию счета IF((ISNULL(@saldo_bal_close,0)) <> 0) BEGIN .OPERATION_SBC(%OWNER_ID%,%PLAN_MONEY_ID%,%OP_DATE%,@debet_acc_close_id,@credit_acc_close_id,@oper_sum_close,@plan_cur_close_id,%OP_DATE%,%QTY%,%QTY%,@mess_res_close,Y,@operation_id,@id,@action_id,@action_history_id,null,null,%REALIZ_SUBC%,%REALIZ_SUBC%) -- letsko_av -- 31.03.2005 -- Проводки ПИФ по переоценке #ifdef ALD_UKPIF .GET_ITEM_FROM_TYPE_SUBC_STR(%REALIZ_SUBC%, 'INVESTORS', @letsko_ssc_inv_id) IF .TEST_PIF_CLIENT(@letsko_ssc_inv_id) BEGIN SELECT @fund_id = client_id FROM tb_contracts WHERE id = @letsko_ssc_inv_id; -- SELECT @mysumma = @oper_sum_close; .GET_ITEM_FROM_TYPE_SUBC_STR(%REALIZ_SUBC%, 'STOCK_EMIS', @letsko_ssc_stock_id) .GET_ITEM_FROM_TYPE_SUBC_STR(%REALIZ_SUBC%, 'DOC_SEC_IN', @letsko_ssc_portfolio_id) SELECT @myplan2partner = .PLAN2PARTNER_ID(@fund_id, @fund_plan_id) SELECT @xxx_subc_str = '' .SUBC_STR_ADD(@xxx_subc_str, 'STOCK_EMIS', @letsko_ssc_stock_id) .SUBC_STR_ADD(@xxx_subc_str, 'DOC_SEC_IN', @letsko_ssc_portfolio_id) /****/ --.SALDO(@fund_id, @fund_plan_id, %OP_DATE%, @pif_stock_acc_id, @xxx_subc_str, N, 1, @mysumma, @myqty, @mysumm) select @op_partner2plan_id =(select t_plans2partner.id from t_plans2partner,t_items,t_states where t_plans2partner.plan_id=(@fund_plan_id) and t_plans2partner.partner_id= (@fund_id) and t_plans2partner.id=t_items.id and t_items.state_id=t_states.id and t_states.class_id !=2) select @mysumma=0 select @myqty=0 select @mysumm=0 select @op_acc_type_id = ( select t_accounts.acc_type_id from t_accounts where t_accounts.id = @pif_stock_acc_id ) if @op_acc_type_id is null select @op_acc_type_id = 1 select @tmp_period_date=max(p.period_date) from t_periods p,t_items,t_states where p.partner2plan_id=@op_partner2plan_id and p.period_date < dateadd(ms,-10,dateadd(day,1,convert(datetime,convert(varchar(30),@in_date,3),3))) and p.id=t_items.id and t_items.state_id=t_states.id and t_states.class_id !=2 if @tmp_period_date is not null begin select @tmp_period=( select p.id from t_periods p,t_items,t_states where p.partner2plan_id=@op_partner2plan_id and p.period_date=@tmp_period_date and p.id=t_items.id and t_items.state_id=t_states.id and t_states.class_id !=2) select @mysumma=isnull(sum(h.saldo * h.deb_or_cred ),0), @myqty=isnull(sum(h.saldo_qty * h.deb_or_cred),0) , @mysumm=isnull(sum(h.saldo_accur * h.deb_or_cred ),0) from t_account_history h,t_accounts,t_items,t_states where h.period_id=@tmp_period and h.acc_id=t_accounts.id and rtrim(ltrim(UPPER(t_accounts.acc_num_eff_rep))) LIKE '.'+isnull(rtrim(ltrim(UPPER((select t_accounts.acc_num_eff from t_accounts where t_accounts.id=@pif_stock_acc_id) ))),'%')+'.%' and t_accounts.id=t_items.id and t_items.state_id=t_states.id and t_states.class_id =0 and h.subc_eff_num LIKE isnull('%'+@xxx_subc_str+'%','%') and (((@op_acc_type_id = 3) and (h.deb_or_cred=1)) or ((@op_acc_type_id = 1) or (@op_acc_type_id = 2) or (@op_acc_type_id = 4))) end else begin select @tmp_period_date = convert(datetime,'1/1/1800',103)end select @mysumma=isnull(@mysumma,0)+isnull(sum(o.sum_bal * o.deb_or_cred),0) , @myqty=isnull(@myqty,0)+isnull(sum(o.qty_sum * o.deb_or_cred),0) , @mysumm= isnull(@mysumm,0)+isnull(sum(o.sum_accur * o.deb_or_cred),0) from t_oper_list o with (index(t_oper_list_plan_date)),t_accounts,t_items,t_states where o.partner2plan_id=@op_partner2plan_id and o.op_date >= @tmp_period_date and o.op_date <= dateadd(ms,-10,dateadd(day,1,convert(datetime,convert(varchar(30),@in_date,3),3))) and (((@op_acc_type_id = 3) and (o.deb_or_cred=1)) or ((@op_acc_type_id = 1) or (@op_acc_type_id = 2) or (@op_acc_type_id = 4))) and o.acc_id = t_accounts.id and rtrim(ltrim(UPPER(t_accounts.acc_num_eff_rep))) LIKE '.'+isnull(rtrim(ltrim(UPPER((select t_accounts.acc_num_eff from t_accounts where t_accounts.id=@pif_stock_acc_id) ))),'%')+'.%' and t_accounts.id=t_items.id and t_items.state_id=t_states.id and t_states.class_id =0 and o.subc_eff_num LIKE isnull('%'+@xxx_subc_str+'%','%') if @op_acc_type_id = 4 and @mysumma < 0 select @mysumma = 0 if @op_acc_type_id = 4 and @myqty < 0 select @myqty = 0 if @op_acc_type_id = 4 and @mysumm < 0 select @mysumm = 0 /****/ -- .SALDO_NOW_MIGHT(@myplan2partner, @pif_stock_acc_id, @xxx_subc_str, 1, @mysumma, @myqty, @mysumm) /* if @letsko_ssc_stock_id=21535000000770131 begin .EXIT_MESSAGE_PARM ('qweq', @myqty) end */ -- @rate_place_id - из вышестоящих методов которые вызывают этот шаблон .PIF_CALC_STOCK_PRICE(@letsko_ssc_stock_id, @fund_id, @rate_place_id, %OP_DATE%, @myqty, @cur_rate_date_pif, @cur_is_rate_pif, @fund_rate_value_pif, @cur_coupon_rur_pif, @cur_stock_sum_pif, @cur_coupon_sum_pif) /* if @letsko_ssc_stock_id=21535000000770131 begin .EXIT_MESSAGE_PARM ('qweq', @cur_coupon_rur_pif) end */ IF (ISNULL(@cur_coupon_rur_pif, 0) = 0) OR (@cur_is_rate_pif = 0) SELECT @mysumma = @oper_sum_close ELSE SELECT @mysumma = @cur_coupon_rur_pif * @myqty - @mysumma IF @mysumma > 0 BEGIN -- letsko_av -- 05.04.2005 -- Саша Федотов сказал что в проводках по ПИФ-у нет количества -- .OPERATION(@fund_id, @fund_plan_id, %OP_DATE%, @pif_stock_acc_id, @imushestvo_account_id, @mysumma, @rubel_id, %OP_DATE%, %QTY%, %QTY%, @mess_res_close, N, @operation_id, @id, @action_id, @action_history_id, 0, 0) .OPERATION(@fund_id, @fund_plan_id, %OP_DATE%, @pif_stock_acc_id, @imushestvo_account_id, @mysumma, @rubel_id, %OP_DATE%, 0, 0, @mess_res_close, N, @operation_id, @id, @action_id, @action_history_id, 0, 0) -- letsko_av (end) .UPDATE_SUBC(D, 'stock_emis', @letsko_ssc_stock_id) .UPDATE_SUBC(D, 'doc_sec_in', @letsko_ssc_portfolio_id) .SUBC_CHECK END ELSE IF @mysumma < 0 BEGIN SELECT @mysumma = -@mysumma; -- letsko_av -- 05.04.2005 -- Саша Федотов сказал что в проводках по ПИФ-у нет количества -- .OPERATION(@fund_id, @fund_plan_id, @in_date, @imushestvo_account_id, @pif_stock_acc_id, @mysumma, @rubel_id, @in_date, @ssc_saldo_qty, @ssc_saldo_qty, @comment, N, @operation_id, @id, @action_id, @action_history_id, 0, 0) .OPERATION(@fund_id, @fund_plan_id, %OP_DATE%, @imushestvo_account_id, @pif_stock_acc_id, @mysumma, @rubel_id, %OP_DATE%, 0, 0, @mess_res_close, N, @operation_id, @id, @action_id, @action_history_id, 0, 0) -- letsko_av (end) .UPDATE_SUBC(C, 'stock_emis', @letsko_ssc_stock_id) .UPDATE_SUBC(C, 'doc_sec_in', @letsko_ssc_portfolio_id) .SUBC_CHECK END; END; #endif -- letsko_av (end) END if @saldo_bal_close>0 --- Убыток begin --select @mess_res_close='Списание убытка на фонды' select @mess_res_close=%COMMENT%+' - списание убытка на фонды' select @debet_acc_close_id=@fond_own_close_id select @credit_acc_close_id=@profit_acc_close_id end else if @saldo_bal_close<0 --- Прибыль begin select @mess_res_close=%COMMENT%+' - зачисление прибыли на фонды' select @debet_acc_close_id=@profit_acc_close_id select @credit_acc_close_id=@fond_own_close_id end ---- проводка по соотнесению прибыли-убытка на фонды IF((ISNULL(@saldo_bal_close,0)) <> 0) BEGIN .OPERATION_SBC(%OWNER_ID%,%PLAN_MONEY_ID%,%OP_DATE%,@debet_acc_close_id,@credit_acc_close_id,@oper_sum_close,@plan_cur_close_id,%OP_DATE%,%QTY%,%QTY%,@mess_res_close,Y,@operation_id,@id,@action_id,@action_history_id,null,null,%REALIZ_SUBC%,%REALIZ_SUBC%) END end else --- если фин. результат не ведем begin if @saldo_bal_close>0 --- Убыток begin select @mess_res_close=%COMMENT% select @debet_acc_close_id=@fond_own_close_id select @credit_acc_close_id=@realiz_acc_close_id end else if @saldo_bal_close<0 --- Прибыль begin select @mess_res_close=%COMMENT% select @debet_acc_close_id=@realiz_acc_close_id select @credit_acc_close_id=@fond_own_close_id end if @saldo_bal_close>0 select @oper_sum_close=@saldo_bal_close else if @saldo_bal_close<0 select @oper_sum_close=@saldo_bal_close*(-1.0) IF((ISNULL(@oper_sum_close,0)) <> 0) ----- проводка по закрытию счета сразу на фонды BEGIN .OPERATION_SBC(%OWNER_ID%,%PLAN_MONEY_ID%,%OP_DATE%,@debet_acc_close_id,@credit_acc_close_id,@oper_sum_close,@plan_cur_close_id,%OP_DATE%,0,0,@mess_res_close,Y,@operation_id,@id,@action_id,@action_history_id,null,null,%REALIZ_SUBC%,%REALIZ_SUBC%) END end /*конец присвоений и проводок*/ $ENDTEXT(12331497) $PATTERNARG(%OWNER_ID%) name=Владелец плана order=1 comment=Владелец плана mandatory=1 default=null choose_type=null choose_action=null choose_field=null $ENDPATTERNARG $PATTERNARG(%PLAN_MONEY_ID%) name=План ДС order=2 comment=План ДС mandatory=1 default=null choose_type=null choose_action=null choose_field=null $ENDPATTERNARG $PATTERNARG(%OP_DATE%) name=Дата проводки order=3 comment=null mandatory=1 default=null choose_type=null choose_action=null choose_field=null $ENDPATTERNARG $PATTERNARG(%IS_CALC_PROFIT%) name=Считаем прибыль order=4 comment=1 - считаем, 0 - не считаем, 2 - списание (принятие) - по балансовой(оценочной) стоимости mandatory=1 default=null choose_type=null choose_action=null choose_field=null $ENDPATTERNARG $PATTERNARG(%CHARACTER_ID%) name=Характер сделки order=5 comment=Характер сделки mandatory=1 default=null choose_type=null choose_action=null choose_field=null $ENDPATTERNARG $PATTERNARG(%REALIZ_SUBC%) name=Субконто счета с которого списываем прибыль/убыток реализации order=6 comment=Субконто счета с которого списываем прибыль/убыток(реализации) mandatory=1 default=null choose_type=null choose_action=null choose_field=null $ENDPATTERNARG $PATTERNARG(%TYPE_CLOSE%) name=Тип закрытия order=7 comment=(1-осн. по сделке, 2-комиссии по сделке, 3 - будущих периодов, 4 - для дивидендов mandatory=1 default=null choose_type=null choose_action=null choose_field=null $ENDPATTERNARG $PATTERNARG(%ACC_ID%) name=Счет с которого списывается прибыль(убыток) order=8 comment=Счет с которого списывается прибыль(убыток).Если не задан то счет реализации mandatory=1 default=null choose_type=null choose_action=null choose_field=null $ENDPATTERNARG $PATTERNARG(%SUM%) name=Сумма прибыли/убытка в валюте плана order=9 comment=$TEXT(12331499) Сумма прибыли/убытка. Если не задана, то берется остаток по реализации (если сумма с - то убыток, если с + - то прибыль) $ENDTEXT(12331499) mandatory=1 default=null choose_type=null choose_action=null choose_field=null $ENDPATTERNARG $PATTERNARG(%COMMENT%) name=Комментарий order=10 comment=Комментарий mandatory=1 default=null choose_type=null choose_action=null choose_field=null $ENDPATTERNARG $PATTERNARG(%QTY%) name=Количество order=11 comment=Количество mandatory=1 default=null choose_type=null choose_action=null choose_field=null $ENDPATTERNARG $ENDPATTERN