create procedure dbo.%PROC% @sid varchar(30) = null as declare @action_id numeric, @id numeric, @user_id numeric, @state_id numeric, @new_state_id numeric, @type_id numeric declare @old_state_code varchar(30) begin tran select @action_id = %ACTION_ID% select @id = convert(numeric, @sid) .CHECK_USER .CHECK_UPDATE .GET_PROPS select @pay_perpose=(select code from t_purposes where id=@purpose_id) if @from_partner_acc_id=@to_partner_acc_id .EXIT_MESSAGE('Расчетные счета отправителя и получателя не должны совпадать') select @old_state_code = upper(state_code) from t_items, t_states where t_items.id=@id and t_items.state_id = t_states.id select @complete_date = isnull(@complete_date,@doc_date) .UPDATE .UPDATE_ITEMS .PAYS_COMPLETE_STATE(@id,1) .GET_PROPS declare @doc_name varchar(255) select @doc_name = 'Оплата '+ .ITEM_NAME(@id) + ':' + @perpose_str .NAME_VAR(@fund_type_code) .ID_VAR(@asset_manager_id) .ID_VAR(@percent_deposit_acc_id) .ID_VAR(@bank_id) declare @deb_acc_id numeric declare @cred_acc_id numeric declare @pay_rec_sid varchar(30) declare @mess varchar(255) declare @fund_plan_id numeric select @fund_type_code = .ITEM_TYPE_CODE(@owner_id) -------------------- -- Проводки для ПИФ -------------------- if .STR_FOR_IF(@fund_type_code) = .STR_FOR_IF('pif_fund') begin select @fund_plan_id = .ARG_PLAN('PIF_ACCOUNT') if @old_state_code = upper('UNDEF') /* Из неопознанного */ select @deb_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'76.14') else select @deb_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'51') if @pay_perpose=4002 /* 4002 получение средств от УК на выкуп*/ select @cred_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'76.1') else if @pay_perpose=2003 /* 2003 платеж по договору продажи ЦБ*/ select @cred_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'76.5.1') else if @pay_perpose=2005 /* 2005 поступление дс за купонный доход*/ select @cred_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'76.5.3') else if @pay_perpose=2030 /* 2030 прочие платежи за ЦБ*/ select @cred_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'76.5.3') else if @pay_perpose=2006 /* 2006 поступление дивидендов*/ select @cred_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'76.9') else if @pay_perpose=2007 /*2007 Поступление денежных средств на депозит (57)*/ begin if @old_state_code = upper('UNDEF') /* Из неопознанного */ .EXIT_MESSAGE('Невозможно проведение из статуса неопознанный платеж') select @deb_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'58.2') select @cred_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'57') end else if @pay_perpose=2008 /*2008 Поступление денежных средств с депозита (57)*/ begin if @old_state_code = upper('UNDEF') /* Из неопознанного */ .EXIT_MESSAGE('Невозможно проведение из статуса неопознанный платеж') select @deb_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'51') select @cred_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'57') end else if @pay_perpose=2027 /*2027 Поступление денежных средств с депозита (напрямую)*/ begin if .GET_CTRL_COMP_ID(@owner_id) != @from_partner_id .EXIT_MESSAGE('Выберите счет отправителя - счет фонда') if @old_state_code = upper('UNDEF') /* Из неопознанного */ .EXIT_MESSAGE('Невозможно проведение из статуса неопознанный платеж') select @deb_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'51') select @cred_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'58.2') end else if @pay_perpose = 2009 /*2009.Поступление денежных средств за недвижимость */ select @cred_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'76.13') else if @pay_perpose = 2010 /*2010.Поступление денежных средств за прочие активы */ select @cred_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'76.13') else if @pay_perpose=2021 /* 2021 Поступление процентов по банковскому депозиту */ begin select @bank_id = (select bank_id from t_bank_accounts where id = @to_partner_acc_id) if @bank_id is null .EXIT_MESSAGE('Не задан банк счета назначения') if (select acc_type_id from t_bank_accounts where id = @to_partner_acc_id) = 30 /* Если тип расчетного счета -депозитный */ begin if @old_state_code = upper('UNDEF') /* Из неопознанного */ .EXIT_MESSAGE('Невозможно проведение из статуса неопознанный платеж') select @deb_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'58.2') end select @cred_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'76.10') end else if @pay_perpose=2023 /* 2023 поступление денежных средств по взаимозачету*/ select @cred_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'76.5.5') else if @pay_perpose=2024 /* 2024 Платеж с биржи*/ select @cred_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'76.5.4') else if @pay_perpose=103 /* 103 Расчеты с банком*/ select @cred_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'76.8') else if @pay_perpose=2026 /* 2026 Начисление процентов на остаток по расчетному счету*/ select @cred_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'96.3.7') else if @pay_perpose=4011 /* 4011 Оплата паев */ begin if @pif_pay_id is null -- Не указана заявка select @new_state_id=.STATE_ID_FROM_CODE(@type_id,'WAIT_QUERY') if (@pif_pay_id is not null) and (upper(.ITEM_STATE_CODE(@pif_pay_id)) != 'PROV') .EXIT_MESSAGE('Заявка должна быть на исполнении') if (@pif_pay_id is not null) and ((select owner_id from td_depo_docs where id=@pif_pay_id) != @owner_id) .EXIT_MESSAGE('Выберите заявку для указанного фонда') if (@pif_pay_id is not null) and ((select pay_owner_id from tp_pif_queries where id=@pif_pay_id) != @from_partner_id) begin -- .EXIT_MESSAGE('Отправитель платежа не является пайщиком в заявке') select @from_partner_id=(select pay_owner_id from tp_pif_queries where id=@pif_pay_id) select @from_partner_name=(select partner_name from t_partners where id=@from_partner_id) update t_paydocs set from_partner_id=@from_partner_id, from_partner_name=@from_partner_name where id=@id end update t_paydocs set covered_sum=@doc_sum where id=@id select @cred_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'76.4.1') end else if @pay_perpose=4013 /* 4013 Возврат платежа по выкупу */ begin if @pif_pay_id is null .EXIT_MESSAGE('Не указана заявка') if upper(.ITEM_STATE_CODE(@pif_pay_id)) not in ('CRT','CRT_NEXT') .EXIT_MESSAGE('Заявка должна быть исполнена') if (@pif_pay_id is not null) and ((select owner_id from td_depo_docs where id=@pif_pay_id) != @owner_id) .EXIT_MESSAGE('Выберите заявку для указанного фонда') if (select pay_owner_id from tp_pif_queries where id=@pif_pay_id) != @from_partner_id .EXIT_MESSAGE('Отправитель платежа не является пайщиком в заявке') if (select pay_type_id from tp_pif_queries where id=@pif_pay_id)=2 -- нач.задолженность if (select isnull(payment_sum,0) from tp_pif_queries where id=@pif_pay_id) != @doc_sum .EXIT_MESSAGE('Сумма платежа не равна задолженности по заявке') if (select isnull(pay_type_id,1) from tp_pif_queries where id=@pif_pay_id)=1 if (select isnull(sum_for_transfer,0) from tp_extract2claim where claim_id=@pif_pay_id) != @doc_sum .EXIT_MESSAGE('Сумма платежа не равна сумме заявки в отчете регистратора') if (select count(*) from t_paydocs, td_depo_docs, t_items, t_types, t_states where t_paydocs.pif_pay_id = @pif_pay_id and t_paydocs.id = td_depo_docs.id and td_depo_docs.owner_id = @owner_id and t_paydocs.id = t_items.id and t_paydocs.complete_date > @complete_date and t_items.type_id = t_types.id and upper(t_types.type_code) in ('SD_PAYBANK_IN', 'SD_PAYBANK_OUT') and t_items.state_id = t_states.id and upper(t_states.state_code) in ('PERF')) >0 .EXIT_MESSAGE('По заявке есть платежи с датой больше текущей') select @cred_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'76.4.2') .ITEM_MOVE_STATE(@pif_pay_id,'CRT_RET') update t_paydocs set covered_sum=@doc_sum where id=@id end else /* Неуказанное целевое назначение */ begin if @old_state_code = upper('UNDEF') /* Из неопознанного */ .EXIT_MESSAGE('Укажите целевое назначение') else begin select @cred_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'76.14') select @new_state_id = .STATE_ID(@type_id, 'UNDEF') end end /* OPERATION */ .UPDATE_STATE .ACTION_HISTORY .OPERATION(@owner_id,@fund_plan_id,@complete_date,@deb_acc_id,@cred_acc_id,@doc_sum,'RUR',@complete_date,0,0,@doc_name,N) /* END OPERATION */ /* SUBC DEB */ if @pay_perpose in ( 2007 /*2007 Поступление денежных средств на депозит (57)*/, 2008 /*2008 Поступление денежных средств с депозита (57)*/, 2027 /*2027 Поступление денежных средств с депозита (напрямую)*/ ) begin .UPDATE_SUBC(D,'bank_account',@to_partner_acc_id) end else if @old_state_code = upper('UNDEF') /* Из неопознанного */ begin .UPDATE_SUBC(D,'partners',@from_partner_id) end else begin .UPDATE_SUBC(D,'bank_account',@to_partner_acc_id) end /* SUBC CRED */ if @pay_perpose in ( 4002 /* 4002 получение средств от УК на выкуп*/, 2003 /* 2003 платеж по договору продажи ЦБ*/, 2005 /* 2005 Поступление денежных средств за купонный доход*/, 2030 /* 2030 Прочие платежи за ЦБ*/, 2006 /* 2006 Поступление дивидендов */, 2009 /* 2009 Поступление денежных средств за недвижимость */, 2010 /* 2010 Поступление денежных средств за прочие активы */, 2023 /* 2023 поступление денежных средств по взаимозачету*/, 2024 /* 2024 Платеж с биржи*/, 103 /* 103 Расчеты с банком*/ ) begin .UPDATE_SUBC(K,'partners',@from_partner_id) end else if @pay_perpose in ( 4011 /* 4011 - оплата паев */ ) begin .UPDATE_SUBC(K,'partners',@from_partner_id) .UPDATE_SUBC(K,'paydocs',@id) end else if @pay_perpose in ( 4013 /* 4013 - Возврат по выкупу*/ ) begin .UPDATE_SUBC(K,'partners',@from_partner_id) .UPDATE_SUBC(K,'pifdocs',@pif_pay_id) end else if @pay_perpose in ( 2007 /* 2007 Поступление денежных средств на депозит (57)*/, 2008 /* 2008 Поступление денежных средств с депозита (57)*/ ) begin .UPDATE_SUBC(K,'bank_account',@to_partner_acc_id) end else if @pay_perpose in ( 2027 /* 2027 Поступление денежных средств с депозита (напрямую)*/ ) begin .UPDATE_SUBC(K,'bank_account',@from_partner_acc_id) end else if @pay_perpose in ( 2021 /* 2021 Поступление процентов по банковскому депозиту */ ) begin .UPDATE_SUBC(K,'partners',@bank_id) end else if @pay_perpose in ( 2026 /* 2026 проценты по остаткам на РС */ ) begin .UPDATE_SUBC(K,'bank_account',@to_partner_acc_id) end else /* Неуказанное целевое назначение */ begin .UPDATE_SUBC(K,'partners',@from_partner_id) end .SUBC_CHECK /* ADD */ if @pay_perpose = 2021 /* 2021 Поступление процентов по банковскому депозиту */ begin declare @deb2021_id numeric declare @cred2021_id numeric select @deb2021_id=.SD_ACCID_FROM_EFFNO(@fund_plan_id,'76.10') select @cred2021_id=.SD_ACCID_FROM_EFFNO(@fund_plan_id,'96.3.2') select @doc_name = 'Отнесение процентов по банковскому депозиту на прирост стоимости имущества Фонда ' +@doc_name .OPERATION(@owner_id,@fund_plan_id,@complete_date,@deb2021_id,@cred2021_id,@doc_sum,'RUR',@complete_date,0,0,@doc_name,N) .UPDATE_SUBC(D,'partners',@bank_id) .SUBC_CHECK end /* END ADD */ end -------------------- -- Проводки для BACK -------------------- .ID_VAR(@back_owner_id) .ID_VAR(@plan_money_id) .ID_VAR(@plan_securs_id) .INT_VAR(@out_method_id) .ID_VAR(@organisation_id) .ID_VAR(@home_place_class_id) .ID_VAR(@home_object_id) .ID_VAR(@home_bank_acc_id) .ID_VAR(@client_contract_id) .ID_VAR(@portfolio_id) .ID_VAR(@value_id) .ID_VAR(@portfolio_sub_id) .NAME_VAR(@investor_subc_str) .NAME_VAR(@ext_subc_str) .NAME_VAR(@home_subc_str) .MONEY_VAR(@cred_acc_sum) .MONEY_VAR(@deb_acc_sum) select @back_owner_id=.ORGANIZATION declare @is_realiz int, @is_p2l_comis int, @is_com_in int, @is_allow_short4stocks int, @is_allow_short4money int, @asset4pereoc_type_id numeric .BACK_GET_ORG_PARMS(@back_owner_id,@organisation_id,@plan_money_id,@plan_securs_id,@out_method_id,@is_realiz,@is_p2l_comis,@is_com_in,@is_allow_short4stocks,@is_allow_short4money,@asset4pereoc_type_id) .BACK_GET_PIF_CONTRACT(@owner_id,@back_owner_id,@client_contract_id) /**/ select @home_object_id=min(b.id) from tb_broker2exchange b,tb_contracts c, td_depo_docs d , t_move_directions m where upper(m.code)=.GET_CONST('WHOAREME') and b.object_class_id = m.id and b.ext_broker_deal = c.id and c.client_id = @back_owner_id and c.id = d.id and d.owner_id = @back_owner_id and .ITEMS_EXISTS_BY_TYPE(b.id,'BROKER2EXCHANGE') and .ITEMS_EXISTS_BY_TYPE(c.id,'ORGANIZATION_CONTRACTS') select @mess = 'Не задано место нахождения ДС с кодом ->' + .GET_CONST('WHOAREME') + '<- из константы WHOAREME' --select @mess = 'Не задано место нахождения ДС с кодом OWN' if @home_object_id is null .EXIT_MESSAGE(@mess) /**/ --select @home_object_id=@organisation_id .BACK_PLASE_CLASS_FROM_OBJ(@home_object_id,@organisation_id,@home_place_class_id) --select @home_place_class_id = @home_object_id select @mess = 'Не задан класс места нахождения ДС с кодом ->' + .GET_CONST('WHOAREME') + '<- из константы WHOAREME' --select @mess = 'Не задан класс места нахождения ДС с кодом OWN' if @home_place_class_id is null .EXIT_MESSAGE(@mess) .BACK_GET_PIF_SECTION(@client_contract_id,@portfolio_sub_id) .BACK_GET_PIF_PORTFOLIO(@client_contract_id,@portfolio_id) select @home_bank_acc_id=@to_partner_acc_id if @home_bank_acc_id is null .EXIT_MESSAGE('Не задан расчетный счет') select @cred_acc_sum=@doc_sum select @deb_acc_sum=@doc_sum .SUBC_STR_ADD(@ext_subc_str,'INVESTORS',@client_contract_id) .SUBC_STR_ADD(@investor_subc_str,'investors',@client_contract_id) .SUBC_STR_ADD(@investor_subc_str,'investor2portfolio',@portfolio_sub_id) .SUBC_STR_ADD(@investor_subc_str,'portfolio',@portfolio_id) .ASSIGN(@home_subc_str,@investor_subc_str) .SUBC_STR_ADD(@home_subc_str,'ASSET_PLACES',@home_object_id) .SUBC_STR_ADD(@home_subc_str,'BANK_ACCOUNT',@home_bank_acc_id) .BACK_OPERS_BEGIN(@back_owner_id,1,@purpose_id,@home_place_class_id,@home_object_id,@client_contract_id,@investor_subc_str,@portfolio_sub_id) .BACK_MONEY_INOUT(@doc_sum,@complete_date,@complete_date,@cur_id,@home_subc_str,@ext_subc_str,@deb_acc_sum,@cred_acc_sum,@cur_id,@cur_id) -- 3.6.0 - 2.11 if @pay_perpose = 4013 /* 4013 Возврат платежа по выкупу */ begin .ID_VAR(@acc211_id) .ID_VAR(@acc360_id) .NAME_VAR(@opmess) .NAME_VAR(@subc211_str) .NAME_VAR(@subc360_str) .ACCID_FROM_CONST2PLAN(@acc211_id,'BACK_ACC_FUND_MONEY_OUT',@plan_money_id,3,1,'ожид.расход ДС',@opmess) .ACCID_FROM_CONST2PLAN(@acc360_id,'BACK_ACC_FUND_MONEY_CHNG',@plan_money_id,3,1,'ожид.списание из фонда',@opmess) .SUBC_STR_ADD(@subc360_str,'investors',@client_contract_id) .SUBC_STR_ADD(@subc211_str,'investors',@client_contract_id) .SUBC_STR_ADD(@subc211_str,'investor2portfolio',@portfolio_sub_id) .SUBC_STR_ADD(@subc211_str,'portfolio',@portfolio_id) .SUBC_STR_ADD(@subc211_str,'docs4out_fund',@pif_pay_id) select @opmess='Возврат резервирования ДС по заявке' .OPERATION_SBC(@back_owner_id,@plan_money_id,@complete_date,@acc360_id,@acc211_id,@doc_sum,@cur_id,@complete_date,null,null,@opmess,Y, @operation_id,null,null,@action_history_id,@doc_sum,@doc_sum,@subc360_str,@subc211_str) end commit tran