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, @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 BEGIN -- 2007 Поступление денежных средств на депозит (57) 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 BEGIN -- 2008 Поступление денежных средств с депозита (57) 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 BEGIN -- 2027 Поступление денежных средств с депозита (напрямую) 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 BEGIN -- 2021 Поступление процентов по банковскому депозиту 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 IN (4011, 4021) BEGIN -- 4011 Оплата паев 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 --kashuba_av 28/02/06 begin Этот кусок написан специально для алгоритма квитовки WEBINVEST IF RTRIM(LTRIM(.GET_CONST('CLIENT_CODE'))) NOT IN ('WEBINVEST') BEGIN .EXIT_MESSAGE('Отправитель платежа не является пайщиком в заявке') END ELSE BEGIN SELECT @from_partner_id = (SELECT pay_owner_id FROM tp_pif_queries WHERE id=@pif_pay_id) --kashuba_av 26/12/05 Проверка сделана на случай если pay_owner_id будет изменением физ или юр лица DECLARE @from_partner_id_temp NUMERIC SELECT @from_partner_id_temp = @from_partner_id IF NOT EXISTS( SELECT 1 FROM t_items, t_types WHERE t_items.id = @from_partner_id_temp AND t_items.type_id = t_types.id AND t_types.type_code IN ('PARTNERS_FIS', 'PARTNERS_JUR') ) SELECT @from_partner_id = t_partners.id FROM t_partners, td_depo_docs WHERE td_depo_docs.id = @from_partner_id_temp AND td_depo_docs.changed_item_id = t_partners.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 END --kashuba_av 28/02/06 begin 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 BEGIN -- 4013 Возврат платежа по выкупу 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 IF @pay_perpose = 9003 BEGIN -- Входящий платеж по банку для фонда .ACCID_FROM_OBJ2PLAN(@cred_acc_id, @purpose_id, @fund_plan_id, 1, 1, 'Pacчeты пo пpoчим pacxoдaм', @mess) 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 .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) -- 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 Платеж с биржи*/, 9003 /* 9003 Входящий платеж по банку для фонда */, 103 /* 103 Расчеты с банком*/ ) BEGIN .UPDATE_SUBC(K, 'PARTNERS', @from_partner_id) END ELSE IF @pay_perpose IN ( 4011, 4021 /* 4011 - оплата паев */ ) BEGIN .UPDATE_SUBC(K, 'PARTNERS', @from_partner_id) .UPDATE_SUBC(K, 'PAYDOCS', @id) END ELSE IF @pay_perpose = 4013 BEGIN -- 4013 - Возврат по выкупу .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 = 2027 BEGIN -- 2027 Поступление денежных средств с депозита (напрямую) .UPDATE_SUBC(K, 'BANK_ACCOUNT', @from_partner_acc_id) END ELSE IF @pay_perpose = 2021 BEGIN -- 2021 Поступление процентов по банковскому депозиту .UPDATE_SUBC(K, 'PARTNERS', @bank_id) END ELSE IF @pay_perpose = 2026 BEGIN -- 2026 проценты по остаткам на РС .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 */ /* -- доп.проводка Д 76.8 - К 96.2 на увеличение проч.резерва IF @pay_perpose = 9003 BEGIN -- "Входящий платеж по банку для фонда" DECLARE @d4019_id NUMERIC DECLARE @c4019_id NUMERIC SELECT @c4019_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id, '89.2') SELECT @d4019_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id, '76.8') .OPERATION(@owner_id, @fund_plan_id, @complete_date, @d4019_id, @c4019_id, @doc_sum, 'RUR', @complete_date, 0, 0, @doc_name, N) .UPDATE_SUBC(D, 'PARTNERS', @to_partner_id) .SUBC_CHECK END */ end -------------------- -- Проводки для BACK -------------------- .ID_VAR(@back_owner_id) .ID_VAR(@plan_money_id) .ID_VAR(@plan_securs_id) .ID_VAR(@client_contract_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(@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) IF @pay_perpose = 9003 /* 9003 Входящий платеж по банку для фонда */ BEGIN .SUBC_STR_ADD(@ext_subc_str, 'INVESTOR2PORTFOLIO', @portfolio_sub_id) .SUBC_STR_ADD(@ext_subc_str, 'PORTFOLIO', @portfolio_id) .SUBC_STR_ADD(@ext_subc_str, 'CONTRAGENTS', @to_partner_id) END .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 /* .ID_VAR(@j_asset_id) select @j_asset_id=@from_partner_acc_id .SD_ASSET_OPER_ADD(@id,@j_asset_id,@doc_sum,null,@owner_id,@purpose_id,2) */ commit tran