create procedure dbo.%PROC% @sid varchar(30) = null, @isdebug integer = null as .BEGIN('N') begin tran .INT_VAR(@dealing_type_i) declare @direct_stock_qty numeric, @direct_covered_stock_qty numeric, @count_deal int, @count_deal_podtv int, @oper_sum_rps money, @summ_doc_total_rur money, @rate_value_cc money, @rate_date_cc datetime declare @total_sum money .CHECK_USER .CHECK_UPDATE /*------ Вычисление целевого назначения сделки -------*/ -- 53 - обычная -- 76 - РПС с отсроченным исполнением .GET_PROPS -- Богаковский 24/10/2005 добавил запрет на подтверждение сделки без номера if isnull(@in_no,'')='' .EXIT_MESSAGE('Невозможно подтвердить сделку без номера. Введите номер сделки или откройте сделку на изменение и нажмите кнопку "подтвердить" для автоматической генерации номера') select @dealing_type_i= (select p.code from tb_repo_params r, t_purposes p where r.id=@id and r.repo_type_id = p.id) .TYPE_GET('tb_repo_params',@id,9) if @dealing_type_i is null .ASSIGN(@dealing_type_i,53) declare @oper_date_r datetime if @dealing_type_i in (56,57) select @oper_date_r=oper_date from td_depo_docs where id=@id else select @oper_date_r=@in_date if @oper_date_r is null select @oper_date_r=@in_date if @dealing_type_i=76 and @days_for_exec9=0 and @regime_deal9=1 begin select @dealing_type_i=53 --- select @oper_date_r=dateadd(day,1,@in_date) end if @dealing_type_i=76 select @new_state_id = .STATE_ID_FROM_CODE(@type_id,'WAIT_EXEC') .UPDATE_STATE .ACTION_HISTORY .UPDATE_ITEMS -- Восстанавливаем старый статус - если будет откат и транзакции все сохранены if @new_state_id != @state_id update t_items set state_id = @state_id where id=@id ---------------------------------------------------------------------------------- ---------------------------------------------------------------------------------- ----exec ap_calculate_comis @sid /*-------Проверки и проводки ----------*/ /*------- Декларация ----------*/ .NAME_VAR(@investor_subc_str) .NAME_VAR(@ext_subc_str) .NAME_VAR(@home_subc_str) .NAME_VAR(@stock_ext_subc_str) .NAME_VAR(@stock_home_subc_str) .NAME_VAR(@client_subc_str) .NAME_VAR(@p2l_subc_str) select @p2l_subc_str='' .ID_VAR(@home_place_class_id) .ID_VAR(@home_object_id) .ID_VAR(@home_depo_acc_id) .ID_VAR(@home_depo_subacc_id) .ID_VAR(@home_depo_acc_class_id) .ID_VAR(@ext_object_id) .ID_VAR(@investor_id) .ID_VAR(@organisation_id) .ID_VAR(@purpose_id) .ID_VAR(@partion_id) -- letsko_av -- 18.04.2005 -- Наведение порядка с несовпадающими суммами --.ID_VAR(@usd) -- letsko_av (end) .ID_VAR(@plan_money_id) .ID_VAR(@plan_securs_id) .ID_VAR(@money_plan_cur_id) .INT_VAR(@purpose) .INT_VAR(@is_margin) .INT_VAR(@is_allow_short4client_money) .INT_VAR(@proc_state) .MONEY_VAR(@nkd_sum_op) .MONEY_VAR(@out_sum) .INT_VAR(@out_method_id) .DATE_VAR(@method_date) declare @rate_date datetime, @rate_value decimal(18,8) ------------------ Предварительные вычисления -------------------- /*Выдача параметров организации учета*/ .INT_VAR(@is_org_realiz) .INT_VAR(@is_p2l_comis) .INT_VAR(@is_com_in) .INT_VAR(@is_allow_short4stocks) .INT_VAR(@is_allow_short4money) .ID_VAR(@asset4pereoc_type_id) .INT_VAR(@is_realiz) .BACK_GET_ORG_PARMS(@owner_id,@organisation_id,@plan_money_id,@plan_securs_id,@out_method_id,@is_org_realiz,@is_p2l_comis,@is_com_in,@is_allow_short4stocks,@is_allow_short4money,@asset4pereoc_type_id) /*Валюта плана ДС*/ select @money_plan_cur_id=(select cur_id from t_plans where id = @plan_money_id) ----------------------------- Инвестор ------------------------------------------- if @character_id=2 ------------- Клиентская сделка --------------------------- begin .ASSIGN(@investor_id,@client_contract_id) end else begin .ASSIGN(@investor_id,@organisation_id) end if @dealing_type_i <> 76 --- Все кроме РПС begin select @out_method_id=.GET_METHOD_OUT(@portfolio_sub_id) select @method_date=.GET_METHOD_DATE(@portfolio_sub_id) if @investor_id is null .EXIT_MESSAGE('Инвестор не найден.') if @out_method_id is null .EXIT_MESSAGE('Метод списания не задан.') ------------------------ Контроль изменения метода списания if @oper_date_r < @method_date .EXIT_MESSAGE('Невозможно провести, поскольку изменился метод списания') end ---------------------------------- Целевое назначение ------------------------------------- if @dealing_look=1 ------------- Торговая система ---------------- ---.ASSIGN(@purpose_id,28) --------- 28: Зачисление по сделке в ТС. select @purpose_id=t_purposes.id from t_purposes,t_partners_types_list,t_items where t_purposes.id=t_partners_types_list.item_id and t_items.id=@owner_id and t_purposes.code=28 and t_partners_types_list.partner_type_id = t_items.type_id and .ITEMS_EXISTS(t_purposes.id) and .ITEMS_EXISTS(t_partners_types_list.id) else ------------2--------------- Внешний брокер ----------- ---.ASSIGN(@purpose_id,43) --------- 43: Зачисление по сделке в ТС через внешнего брокера. select @purpose_id=t_purposes.id from t_purposes,t_partners_types_list,t_items where t_purposes.id=t_partners_types_list.item_id and t_items.id=@owner_id and t_purposes.code=43 and t_partners_types_list.partner_type_id = t_items.type_id and .ITEMS_EXISTS(t_purposes.id) and .ITEMS_EXISTS(t_partners_types_list.id) ---select @purpose_id = .GET_PURPOSE_ID(@owner_id,@purpose,@type_id) if @purpose_id is null .EXIT_MESSAGE('Целевое назначение для данного документа не найдено.') ---------------------------------Объекты ------------------------------------- .BACK_GET_OBJ2BROK2TS(@asset_place_id,@owner_id,@home_place_class_id,@home_object_id) ---------------------- Расчетный счет и раздел счета ДЕПО в ТС ------------------------------ ---------------------Выдача счета ДЕПО по разделу---------------------- .ASSIGN(@home_depo_acc_id,(.DEPO_ACC_FROM_SUBACC(@depo_subacc_id))) -------------Выдача класса(направления) по счету депо для вычисления счетов места нахождения(P.A.1,...)----- select @home_depo_acc_class_id = (select move_direction_id from tb_move_dir2depoacc where id = @home_depo_acc_id) if @home_depo_acc_class_id is null .EXIT_MESSAGE('Не задана привязка места хранения в плане ЦБ к счету ДЕПО') ----------------------------Строки аналитики ---------------------------- .ASSIGN(@investor_subc_str,'') .SUBC_STR_ADD(@investor_subc_str,'investors',@investor_id) .SUBC_STR_ADD(@investor_subc_str,'investor2portfolio',@portfolio_sub_id) .SUBC_STR_ADD(@investor_subc_str,'portfolio',@portfolio_id) -----================== Переменные проводок -------------------------- .BACK_OPERS_BEGIN(@owner_id, (1) ,@purpose_id,@home_place_class_id,@home_object_id,@client_contract_id,@investor_subc_str,@portfolio_sub_id) ---========================= Работа с поручением клиента ============================== -- Клиентская сделка IF @character_id = 2 BEGIN .TYPE_GET('client_contracts', @client_contract_id, 2) .TYPE_GET('type_client_contracts', @dog_type_id2, 20) --select 'letsko_av_debug', @instruction_on2off AS instruction_on2off, @direction_id AS direction_id, @dealing_type_i AS dealing_type_i IF @instruction_on2off = 1 -- птичка создавать поручение автоматом AND NOT .ITEMS_EXISTS_BY_TYPE(@direction_id, 'INSTRUCTION') -- и ид-щник не екзист AND @dealing_type_i NOT IN (56, 57) BEGIN -- и это не вторая часть РЕПО -- Создаем поручение автоматически .NAME_VAR(@in_no1) .ID_VAR(@direct_id) .TYPE_INIT('instruction',5) .TYPE_ASSIGN(sale_place_id,@sale_place_id,5) .TYPE_ASSIGN(type_price,2,5) .TYPE_ASSIGN(type_poruch_id,1,5) .TYPE_ASSIGN(pay_cur_id,@cur_id,5) .TYPE_ASSIGN(covered_stock_averprice,@stock_price,5) .TYPE_ASSIGN(covered_stock_qty,@stock_qty,5) .TYPE_GET('td_stock_emis',@stock_id) .TYPE_ASSIGN(emitent_id,@emmitent_id1,5) .TYPE_ASSIGN(stock_type_id,@stock_type_id1,5) .TYPE_ASSIGN(stock_nominal,@stock_nominal1,5) .TYPE_ASSIGN(stock_emiss_no,@stock_emiss_no1,5) .TYPE_ASSIGN(nominal_cur_id,@stock_curr_id1,5) .BACK_GEN_NO(@in_no1,1,@oper_date_r) .TYPE_ASSIGN(in_no,@in_no1,5) .TYPE_ASSIGN(depo_doc_type,1,5) .TYPE_ASSIGN(in_date,@oper_date_r,5) .TYPE_ASSIGN(out_no,@direct_no,5) .TYPE_ASSIGN(out_date,@oper_date_r,5) .TYPE_ASSIGN(folder_id,@folder_id,5) .TYPE_ASSIGN(client_id,@client_id,5) .TYPE_ASSIGN(depo_subacc_id,@depo_subacc_id,5) .TYPE_ASSIGN(bank_account_id,@bank_account_id,5) .TYPE_ASSIGN(price_cur_id,@cur_id,5) .TYPE_ASSIGN(owner_id,@owner_id,5) .TYPE_ASSIGN(stock_qty,@stock_qty,5) .TYPE_ASSIGN(stock_qty_input,@stock_qty_input,5) .TYPE_ASSIGN(poruch_units,@deal_units,5) .TYPE_ASSIGN(complit,1,5) .TYPE_ASSIGN(exec_end_date,@oper_date_r,5) .TYPE_ASSIGN(exec_begin_date,@oper_date_r,5) .TYPE_ASSIGN(receive_datetime,@oper_date_r,5) .TYPE_ASSIGN(client_contract_id,@client_contract_id,5) .TYPE_ASSIGN(stock_id,@stock_id,5) .TYPE_ASSIGN(portfolio_id,@portfolio_id,5) .TYPE_ASSIGN(investor2portfolio_id,@portfolio_sub_id,5) .TYPE_INSERT('instruction','ZAKL',5) select @direct_id=.TYPE_FIELD(id,5) select @direction_id=@direct_id update tb_baysale_docitems set direction_id=@direct_id where id=@id end --else if (@instruction_on2off = 0) or (isnull(@direction_id, 0) <> 0) begin --------- Исполняем поручение else if (@instruction_on2off = 0) or .ITEMS_EXISTS_BY_TYPE(@direction_id, 'INSTRUCTION') begin --------- Исполняем поручение ----if @dealing_type_i <> 76 --- Все кроме РПС ----begin -- if @code20!='1' begin declare @stock_qty_sdel money /* select @stock_qty_sdel=(select tb_baysale_docitems.stock_qty from tb_baysale_docitems where tb_baysale_docitems.id=@id) UPDATE tb_directions set tb_directions.covered_stock_qty=isnull(tb_directions.covered_stock_qty,0)+@stock_qty_sdel where tb_directions.id=@direction_id and .ITEMS_EXISTS_BY_TYPE_STATE(tb_directions.id,'INSTRUCTION','ISP') */ select @direct_stock_qty=tb_directions.stock_qty, @direct_covered_stock_qty=isnull(tb_directions.covered_stock_qty,0) from tb_directions,t_states,t_items,t_types where upper(t_types.type_code)=upper('instruction') and tb_directions.id=@direction_id and t_states.type_id=t_types.id and t_states.state_code='ISP' and t_items.state_id=t_states.id and tb_directions.id=t_items.id select @count_deal=(select count(*) from tb_baysale_docitems,.ACTUAL_TABLES,t_types where tb_baysale_docitems.direction_id=@direction_id and t_types.type_code .GROUP_EXISTS_ITEM('dealings') and t_items.type_id=t_types.id .ACTUAL_WHERE(tb_baysale_docitems.id)) select @count_deal_podtv=(select count(*) from tb_baysale_docitems,.ACTUAL_TABLES,t_types where tb_baysale_docitems.direction_id=@direction_id and tb_baysale_docitems.id<>@id and t_states.state_code<>'EDIT' and t_types.type_code .GROUP_EXISTS_ITEM('dealings') and t_items.type_id=t_types.id .ACTUAL_WHERE(tb_baysale_docitems.id)) if ((@direct_stock_qty=@direct_covered_stock_qty) and (@count_deal=@count_deal_podtv+1)) begin if @dealing_type_i not in (56, 57) begin .ITEM_MOVE_STATE(@direction_id,'ZAKL') end end /* Проверка, существует ли поручение */ if NOT .ITEMS_EXISTS_BY_TYPE(@direction_id, 'INSTRUCTION') .EXIT_MESSAGE('Отсутствует клиентское поручение на совершение сделки') .TYPE_GET('instruction', @direction_id, 3) IF (@instruction_on2off = 0) BEGIN ---- Проводки------- .NAME_VAR(@stock_subc_mon) .NAME_VAR(@money_subc) .NAME_VAR(@stock_subc_sec) .NAME_VAR(@keep_subc) .SUBC_STR_ADD(@stock_subc_mon,'investors',@client_contract_id) .SUBC_STR_ADD(@stock_subc_mon,'portfolio',@portfolio_id3) .SUBC_STR_ADD(@stock_subc_mon,'investor2portfolio',@investor2portfolio_id3) .SUBC_STR_ADD(@stock_subc_mon,'instruction',@direction_id) .ASSIGN(@money_subc,@stock_subc_mon) .SUBC_STR_ADD(@stock_subc_mon,'stock_emis',@stock_id3) .ASSIGN(@stock_subc_sec,@stock_subc_mon) .SUBC_STR_ADD(@keep_subc,'stock_emis',@stock_id3) -- Проводки: Снятие резерва по поручению на покупку ЦБ (по ДС и ЦБ) .BACK_INSTR_RESERVES(1,0,@stock_qty3,@stock_qty,@doc_sum_lim3,@price_cur_id3,@oper_date_r,@in_date3,@stock_subc_mon,@money_subc,@stock_subc_sec,@keep_subc) END -- end ----end --- if @dealing_type_i <> 76 --- Все кроме РПС end end /********************************************************/ ------------- Проводки РПС (начало)----------------------- if @dealing_type_i = 76 --- Все РПС begin if @contragent_id is null .EXIT_MESSAGE('Контрагент не задан') -- .TEST_RATE2CUR2DATE(@in_date,@cur_id) select @payment_sum=@summ_doc_total if @is_entry_cd is null .EXIT_MESSAGE('Не задано вхождение КД в сумму') declare @code_name_then varchar(255), @side_id numeric declare @inv_id numeric, @mess_res varchar(255), @kinstr_ds_acc_id numeric, @kinstr_cb_acc_id numeric, @dinstr_ds_acc_id numeric, @dinstr_cb_acc_id numeric, @dvbr_ds_acc_id numeric, @kvbr_ds_acc_id numeric, @dvbr_cb_acc_id numeric, @kvbr_cb_acc_id numeric, @org_id numeric select @inv_id = @investor_id /*Вычисление счетов по клиентским поручениям*/ ---------- /*.ACCID_FROM_CONST2PLAN(@kinstr_ds_acc_id,'BACK_ACC_STOCK_MOVE_INSTR',@plan_money_id,2,1,'Счет ожидаемого прихода ЦБ по клиентскому поручению по плану ДС',@mess_res) .ACCID_FROM_CONST2PLAN(@kinstr_cb_acc_id,'BACK_ACC_STOCK_MOVE_INSTR',@plan_securs_id,2,1,'Счет ожидаемого прихода ЦБ по клиентскому поручению по плану ЦБ',@mess_res) .ACCID_FROM_CONST2PLAN(@dinstr_ds_acc_id,'BACK_ACC_MONEY_MOVE_INSTR',@plan_money_id,3,1,'Счет ожидаемого расхода ДС по клиентскому поручению по плану ДС',@mess_res) .ACCID_FROM_CONST2PLAN(@dinstr_cb_acc_id,'BACK_ACC_MOVE_SECUR_KEEP',@plan_securs_id,2,1,'Счет ожидаемого прихода ЦБ по месту получения по плану ЦБ',@mess_res) */ ---------- /*Вычисление счетов по обязательствам ВБР*/ ---------- .ACCID_FROM_CONST2PLAN(@dvbr_ds_acc_id,'BACK_ACC_SECUR_VBR_DOG',@plan_money_id,2,1,'Счет обязательств по ЦБ',@mess_res) .ACCID_FROM_CONST2PLAN(@kvbr_ds_acc_id,'BACK_ACC_MONEY_VBR_DOG',@plan_money_id,3,1,'Счет обязательств по ДС ',@mess_res) .ACCID_FROM_CONST2PLAN(@dvbr_cb_acc_id,'BACK_ACC_SECUR_VBR_DOG',@plan_securs_id,2,1,'Счет к получению ЦБ по ВБР',@mess_res) .ACCID_FROM_CONST2PLAN(@kvbr_cb_acc_id,'BACK_ACC_SECUR_KEEP_VBR_DOG',@plan_securs_id,2,1,'Счет места нахождения ЦБ',@mess_res) --------- /* IF @character_id = 2 BEGIN IF (@instruction_on2off = 0) OR .ITEMS_EXISTS_BY_TYPE(@direction_id, 'INSTRUCTION') begin if @code20!='1' begin select @direct_stock_qty=tb_directions.stock_qty, @direct_covered_stock_qty=isnull(tb_directions.covered_stock_qty,0) from tb_directions,t_states,t_items,t_types where upper(t_types.type_code)=upper('instruction') and tb_directions.id=@direction_id and t_states.type_id=t_types.id and t_states.state_code='ISP' and t_items.state_id=t_states.id and tb_directions.id=t_items.id select @count_deal=(select count(*) from tb_baysale_docitems,.ACTUAL_TABLES,t_types where tb_baysale_docitems.direction_id=@direction_id and t_types.type_code .GROUP_EXISTS_ITEM('dealings') and t_items.type_id=t_types.id .ACTUAL_WHERE(tb_baysale_docitems.id)) select @count_deal_podtv=(select count(*) from tb_baysale_docitems,.ACTUAL_TABLES,t_types where tb_baysale_docitems.direction_id=@direction_id and tb_baysale_docitems.id<>@id and t_states.state_code<>'EDIT' and t_types.type_code .GROUP_EXISTS_ITEM('dealings') and t_items.type_id=t_types.id .ACTUAL_WHERE(tb_baysale_docitems.id)) if ((@direct_stock_qty=@direct_covered_stock_qty) and (@count_deal=@count_deal_podtv+1)) begin if @dealing_type_i not in (56, 57) begin .ITEM_MOVE_STATE(@direction_id,'ZAKL') end end declare @comment varchar(255), @comment2 varchar(255), @summ_doc_total_instr money -- Проверка, существует ли поручение if NOT .ITEMS_EXISTS_BY_TYPE(@direction_id, 'INSTRUCTION') .EXIT_MESSAGE('Отсутствует клиентское поручение на совершение сделки') .TYPE_GET('instruction', @direction_id, 3) select @comment='Снятие задолженности по ожидаемым расчетам' select @summ_doc_total_instr=convert(money,round(((@doc_sum_lim3*@stock_qty)/@stock_qty3),2)) .TEST_RATE2CUR2DATE(@in_date3,@price_cur_id3) .OPERATION(@owner_id,@plan_money_id,@oper_date_r,@dinstr_ds_acc_id,@kinstr_ds_acc_id,@summ_doc_total_instr,@price_cur_id3,@in_date3,0,0,@comment,N) .UPDATE_SUBC('K','investors',@client_contract_id) .UPDATE_SUBC('K','portfolio',@portfolio_id3) .UPDATE_SUBC('K','investor2portfolio',@investor2portfolio_id3) .UPDATE_SUBC('K','stock_emis',@stock_id) .UPDATE_SUBC('K','instruction',@direction_id) .UPDATE_SUBC('D','investors',@client_contract_id) .UPDATE_SUBC('D','portfolio',@portfolio_id3) .UPDATE_SUBC('D','investor2portfolio',@investor2portfolio_id3) .UPDATE_SUBC('D','instruction',@direction_id) .SUBC_CHECK select @comment2='Снятие резерва ЦБ(по сделке)' .OPERATION(@owner_id,@plan_securs_id,@oper_date_r,@dinstr_cb_acc_id,@kinstr_cb_acc_id,@stock_qty,null,@in_date3,null,null,@comment2,N) .UPDATE_SUBC('K','investors',@client_contract_id) .UPDATE_SUBC('K','portfolio',@portfolio_id3) .UPDATE_SUBC('K','investor2portfolio',@investor2portfolio_id3) .UPDATE_SUBC('K','stock_emis',@stock_id) .UPDATE_SUBC('K','instruction',@direction_id) .UPDATE_SUBC('D','stock_emis',@stock_id) .SUBC_CHECK end end end */ ---------------------------------------------------------------------------------- .NAME_VAR(@oper_comment) /*----------------- Покупка -------------------*/ declare @oper_date datetime, @oper_cur numeric, @cred_acc_sum money, @deb_acc_summ money, @rur numeric, @deb2cred_sum money -- letsko_av -- 18.04.2005 -- Наведение порядка с несовпадающими суммами --select @usd=.CUR('USD') -- letsko_av (end) select @rur=.CUR2PLAN(@plan_money_id) ----------- Стандартный курс -------------------- select @oper_date=@oper_date_r .TEST_RATE2CUR2DATE(@oper_date_r,@cur_id) -- letsko_av -- 18.04.2005 -- Наведение порядка с несовпадающими суммами --.CONVERT_SUM(@cur_id,@usd,@oper_date_r,0,@summ_doc_total,@deb_acc_summ,@rate_value_cc,@rate_date_cc) --select @deb2cred_sum=round(@deb_acc_summ,2) select @deb2cred_sum = round(@summ_doc_total, 2) -- letsko_av (end) if isnull(@coupon_account_sum,0)<>0 begin -- letsko_av -- 18.04.2005 -- Наведение порядка с несовпадающими суммами --.CONVERT_SUM(@rur,@usd,@oper_date_r,0,@coupon_account_sum,@deb_acc_summ,@rate_value_cc,@rate_date_cc) .CONVERT_SUM(@rur, @cur_id, @oper_date_r, 0, @coupon_account_sum, @deb_acc_summ, @rate_value_cc, @rate_date_cc) -- letsko_av (end) select @deb2cred_sum=@deb2cred_sum+round(@deb_acc_summ,2) end select @deb_acc_summ=@deb2cred_sum .CONVERT_SUM(@cur_id,@rur,@oper_date_r,0,@summ_doc_total,@summ_doc_total_rur,@rate_value_cc,@rate_date_cc) --select @oper_sum_rps=round((@summ_doc_total_rur+isnull(@coupon_account_sum,0)),2) select @oper_sum_rps = round((@summ_doc_total + isnull(@coupon_account_sum, 0)), 2) -------- Конец стандартного курса --------------------- select @cred_acc_sum=@deb_acc_summ select @oper_comment = 'Заключена сделка покупки в ТС РПС с отсрочкой исполнения' -- letsko_av -- 18.04.2005 -- Наведение порядка с несовпадающими суммами --.OPERATION(@owner_id,@plan_money_id,@oper_date_r,@dvbr_ds_acc_id,@kvbr_ds_acc_id,@oper_sum_rps,@rur,@oper_date,@stock_qty,null,@oper_comment,N,@operation_id,@id,@action_id,@action_history_id,@deb_acc_summ,@cred_acc_sum) .OPERATION(@owner_id, @plan_money_id, @oper_date_r, @dvbr_ds_acc_id, @kvbr_ds_acc_id, @oper_sum_rps, @cur_id, @oper_date, @stock_qty, NULL, @oper_comment, N, @operation_id, @id, @action_id, @action_history_id, @deb_acc_summ, @cred_acc_sum) -- letsko_av (end) .UPDATE_SUBC('D','stock_emis',@stock_id) .UPDATE_SUBC('D','contragents',@contragent_id) .UPDATE_SUBC('D','investors',@investor_id) .UPDATE_SUBC('D','investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC('D','portfolio',@portfolio_id) .UPDATE_SUBC('D','doc_sec',@id) .UPDATE_SUBC('K','contragents',@contragent_id) .UPDATE_SUBC('K','investors',@investor_id) .UPDATE_SUBC('K','investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC('K','portfolio',@portfolio_id) .UPDATE_SUBC('K','doc_sec',@id) .SUBC_CHECK -- letsko_av -- 18.04.2005 -- Наведение порядка с несовпадающими суммами --.OPERATION(@owner_id,@plan_securs_id,@oper_date_r,@dvbr_cb_acc_id,@kvbr_cb_acc_id,@stock_qty,null,@oper_date_r,null,null,@oper_comment,N) .OPERATION(@owner_id, @plan_securs_id, @oper_date_r, @dvbr_cb_acc_id, @kvbr_cb_acc_id, @stock_qty, NULL, @oper_date_r, NULL, NULL, @oper_comment, N) -- letsko_av (end) .UPDATE_SUBC('D','stock_emis',@stock_id) .UPDATE_SUBC('D','contragents',@contragent_id) .UPDATE_SUBC('D','investor2portfolio',@portfolio_sub_id) .UPDATE_SUBC('D','portfolio',@portfolio_id) .UPDATE_SUBC('D','investors',@investor_id) .UPDATE_SUBC('D','doc_sec',@id) .UPDATE_SUBC('K','stock_emis',@stock_id) .UPDATE_SUBC('K','contragents',@contragent_id) .SUBC_CHECK /*exec ap_oper2comis_bay @sid,@in_date .EXEC_ACTION(@sid,'dog_dealings_bay_vbr','END',N) */ ---------------------------------------------------------------------------------- end ------------- Конец проводок РПС ----------------------- /******************************************************/ if @dealing_type_i <> 76 --- Все кроме РПС begin --===================================== Основные проводки -------------- Строки аналитики по ЦБ -------------------- .ASSIGN(@stock_home_subc_str,@investor_subc_str) .SUBC_STR_ADD(@stock_home_subc_str,'stock_emis',@stock_id) .SUBC_STR_ADD(@stock_home_subc_str,'ASSET_PLACES',@home_object_id) .SUBC_STR_ADD(@stock_home_subc_str,'depo_subacc',@depo_subacc_id) .ASSIGN(@stock_ext_subc_str,'') .SUBC_STR_ADD(@stock_ext_subc_str,'stock_emis',@stock_id) .SUBC_STR_ADD(@stock_ext_subc_str,'depo_subacc',@depo_subacc_id) -------------- Строки аналитики по ДС .ASSIGN(@home_subc_str,@investor_subc_str) .SUBC_STR_ADD(@home_subc_str,'STOCK_EMIS',@stock_id) .GET_IN_PARTION(@partion_id,@out_method_id,@id) .SUBC_STR_ADD(@home_subc_str,'DOC_SEC_IN',@partion_id) .ASSIGN(@ext_subc_str,@investor_subc_str) .SUBC_STR_ADD(@ext_subc_str,'DOC_SEC',@id) .SUBC_STR_ADD(@ext_subc_str,'ASSET_PLACES',@home_object_id) .SUBC_STR_ADD(@ext_subc_str,'BANK_ACCOUNT',@bank_account_id) .ASSIGN(@p2l_subc_str,@investor_subc_str) .SUBC_STR_ADD(@p2l_subc_str,'STOCK_EMIS',@stock_id) .SUBC_STR_ADD(@p2l_subc_str,'DOC_SEC',@id) ---------------- Суммы --------------- ----------Конвертация НКД и Суммы приема в валюту плана ДС(р)----------- .TEST_RATE2CUR2DATE(@oper_date_r,@cur_id) .CONVERT_SUM(@cur_id,@money_plan_cur_id,@oper_date_r,0,@summ_doc_total,@out_sum,@rate_value,@rate_date) if isnull(@coupon_account_sum,0) != 0 begin .TEST_RATE2CUR2DATE(@oper_date_r,@coupon_cur_id) .CONVERT_SUM(@coupon_cur_id,@money_plan_cur_id,@oper_date_r,0,@coupon_account_sum,@nkd_sum_op,@rate_value,@rate_date) end else begin .ASSIGN(@nkd_sum_op,0) end .TYPE_GET('client_contracts',@client_contract_id,10) ---.TYPE_GET('type_client_contracts',@dog_type_id10,10) .ASSIGN(@is_margin,@is_margin10) .ASSIGN(@is_allow_short4client_money,@is_allow_short4money10) .ASSIGN(@is_margin,@is_allow_short4client_money) if @is_margin=0 select @is_margin=1 else select @is_margin=0 if @character_id=1 begin select @fin_result10=1 -- .ASSIGN(@is_margin,1) end -- ======================= Проводки================== .MONEY_VAR(@sum_out_total) .MONEY_VAR(@qty_out_total) .MONEY_VAR(@sum_unkd_out_total) .MONEY_VAR(@sum_com_in_total) ---select @home_subc_str ---select @ext_subc_str ---*** ----- партионное списание .BACK_SECURS_INOUT_MON(@stock_qty,@out_sum,@nkd_sum_op,@oper_date_r,@oper_date_r,null,@home_subc_str,@ext_subc_str,@p2l_subc_str,null,1,@is_allow_short4money,@is_margin, @sum_out_total,@qty_out_total,@sum_unkd_out_total,@fin_result10,@character_id,@p2l_subc_str,@is_org_realiz,@is_p2l_comis,@is_com_in,@sum_com_in_total) -- списание(зачислени) По плану ЦБ .BACK_SECURS_INOUT_SEC(@stock_qty,@oper_date_r,@stock_home_subc_str,@stock_ext_subc_str,@home_depo_acc_class_id,@bo1_short_qty) -- По плану ДС ---------- Финансовый результат в сделке /* ----- Механизм контроля партий ----- */ .ID_VAR(@plan2partner_id) .ASSIGN(@plan2partner_id,(.PLAN2PARTNER_ID(@owner_id,@plan_money_id))) if @dealing_type_i <> 76 --- Все кроме РПС begin .CONTROL_PARTIONS(1,null,@owner_id,@plan2partner_id,@plan_money_id,@oper_date_r,@in_no,@investor_id,@portfolio_sub_id,@stock_id,'Данная операция нарушит последовательность операций по аналогичным партиям.') end /* ----- Механизм контроля партий ----- */ .ID_VAR(@contr_id) declare @subc_str varchar(255) --------- Комиссии declare @oper_id numeric, @subc_str_4_1 varchar(255) select @subc_str=@investor_subc_str .SUBC_STR_ADD(@subc_str,'stock_emis',@stock_id) .SUBC_STR_ADD(@subc_str,'doc_sec',@id) .BACK_CURSOR_FOR_COMIS(@id,@oper_date_r,@id,@oper_id,@action_id,@action_history_id,@owner_id,3,@plan_money_id,@fin_result10,@character_id,@subc_str,@is_org_realiz,@is_p2l_comis) select @subc_str_4_1=@investor_subc_str .SUBC_STR_ADD(@subc_str_4_1,'DOC_SEC',@id) ---- корректирующая проводка по комиссии внешнего брокера, в случае если сделка клиентская .BACK_CORRECT_OPERATION_OUTBROK(@id,@oper_date_r,@id,@oper_id,@action_id,@action_history_id,@owner_id,@subc_str_4_1,@character_id,@plan_money_id,@money_plan_cur_id) .BACK_SETUP_PROFIT_OR_LOSS(@id,@oper_date_r,@owner_id) .BACK_SETUP_BAL_SUM(@id,@oper_date_r,@owner_id,@bo1_unkd_long_sum,@bo1_pereoc_sum) ------РЕПО---------------- declare @purpose_xx_id numeric, @repo_corresp_deal_sum money select @subc_str='' .SUBC_STR_ADD(@subc_str,'investors',@investor_id) .SUBC_STR_ADD(@subc_str,'investor2portfolio',@portfolio_sub_id) .SUBC_STR_ADD(@subc_str,'portfolio',@portfolio_id) .SUBC_STR_ADD(@subc_str,'doc_sec',@id) .SUBC_STR_ADD(@subc_str,'stock_emis',@stock_id) select @purpose_xx_id=repo_type_id, @repo_corresp_deal_sum=repo_corresp_deal_sum from tb_repo_params where id=@id .TEST_RATE2CUR2DATE(@oper_date_r,@cur_id) if .PURPOSE_CODE(@purpose_xx_id) in (54,55) begin .CONVERT_SUM(@cur_id,@money_plan_cur_id,@oper_date_r,0,@repo_corresp_deal_sum,@summ_doc_total_rur,@rate_value_cc,@rate_date_cc) end else begin .CONVERT_SUM(@cur_id,@money_plan_cur_id,@oper_date_r,0,@summ_doc_total2unkd,@summ_doc_total_rur,@rate_value_cc,@rate_date_cc) end select @summ_doc_total_rur=round(@summ_doc_total_rur,2) .BACK_REPO_OPERATION(@owner_id,@plan_money_id,@oper_date_r,@purpose_xx_id,@subc_str,@stock_qty,@summ_doc_total_rur,@money_plan_cur_id,@id,0,0) ---------КОНЕЦ РЕПО--------- end ------ if @dealing_type_i <> 76 --- Все кроме РПС --- Проставляется печатная форма ----- declare @report_form_id numeric, @temp_id numeric .ID_VAR(@report_action_id) select @report_action_id = id from t_actions where type_id=@type_id and upper(action_code)='EXPORT' select @report_form_id = id from t_report_form where to_type_id=@type_id and to_action_id=@report_action_id if @report_form_id is not null begin select @temp_id = id from t_report_item where id = @id if (isnull(@temp_id, -1)) = -1 begin insert into t_report_item(id, form_id, action_id) values (@id, @report_form_id, @report_action_id) end end /* #ifdef ALD_NPF .EXEC_PROC((ap_deal_bay_ts_aliases @sid, @organisation_id),'Сделка в ТС: формирование алиасов сделки') .GENERATE_OPERATIONS(@owner_id, 12,@id,@type_id,@action_id,@action_history_id,1, 0,'Сделка в ТС') .EXEC_PROC((ap_generate_comissions @owner_id, 12, @id, @id, @type_id, @action_id, 8, 0,'Сделка в ТС', @action_history_id),'Сделка в ТС: формирование комиссий сделки') #endif */ .ID_VAR(@res_char_id) #ifdef ALD_BANK_SECS --------- Синтетический учет --------- .ID_VAR(@stock_oper_id) .ID_VAR(@money_oper_id) .ID_VAR(@oblig_type_id) .ID_VAR(@type_oper_id) --- Тип учета .ID_VAR(@account_type_id) --- END .NAME_VAR(@condition) .INT_VAR(@cond_res) /* Богаковски 24/10/2005 закомментарил по рекомендации М.Ю. Круглова, поскольку процедура ap_deal_bay_ts_aliases не генерится IF (.TEST_SINT_ACCOUNTING(@organisation_id)) or (.TEST_CLIENT_ACCOUNTING(@client_contract_id)) BEGIN .INV_CHARACTER_CALC(@investor_id,@res_char_id) .EXEC_PROC((ap_deal_bay_ts_aliases @sid, @organisation_id),'Сделка в ТС: формирование алиасов сделки') END */ IF (.TEST_SINT_ACCOUNTING(@organisation_id)) BEGIN --- Определяем тип учета select @account_type_id = (select sint_account_type_id from tb_broker_change where id = @organisation_id) if @account_type_id is null select @account_type_id = 1 -- По умолчанию - банковский --- END -- .GENERATE_TYPED_OPERATIONS(@owner_id,@id,@type_id,@action_id,1,@res_char_id,'Сделка в ТС',@action_history_id,null,'Сделка в ТС',@account_type_id) .GENERATE_OPERATIONS(@owner_id,@account_type_id,@id,@type_id,@action_id,@action_history_id,1,@res_char_id,'Сделка в ТС') .EXEC_PROC((ap_generate_comissions @owner_id, @account_type_id, @id, @id, @type_id, @action_id, 8, @res_char_id,'Сделка в ТС', @action_history_id),'Сделка в ТС: формирование комиссий сделки') IF(@dealing_type_i = 76) BEGIN SELECT @stock_oper_id = .ID_STORED_ALIAS('STOCK_OPER_ID',@id) SELECT @money_oper_id = .ID_STORED_ALIAS('MONEY_OPER_ID',@id) SELECT @condition = '(PAYDAYS_COUNT > 0 AND PAYDAYS_COUNT <= 2) AND MOVEDAYS_COUNT > 0' .EXEC_PROC((ap_multi_condition_calc @type_id, @id, @condition, 'Сделка покупки ЦБ в ТС: расчет условия', @cond_res out),'Сделка покупки ЦБ в ТС: расчет условия') IF(@cond_res = 1) BEGIN SELECT @oblig_type_id = 1 END ELSE BEGIN SELECT @oblig_type_id = 2 END IF((ISNULL(@stock_oper_id,-1) = -1) AND (ISNULL(@money_oper_id,-1) = -1)) BEGIN IF(@cond_res = 1) BEGIN SELECT @stock_oper_id = 8 SELECT @money_oper_id = 8 END ELSE BEGIN SELECT @stock_oper_id = 0 SELECT @money_oper_id = 0 END END UPDATE tb_baysale_docitems SET tb_baysale_docitems.bank_stock_operation_id = @stock_oper_id, tb_baysale_docitems.bank_money_operation_id = @money_oper_id WHERE tb_baysale_docitems.id = @id INSERT INTO tb_bind_deal2queries(deal_id,stock_operation_id,money_operation_id,order_no,foundation_id,numeric_value) VALUES(@id,@stock_oper_id,@money_oper_id,1,@id,@oblig_type_id) END --- .ITEM_ALIASES_CLEAR(@id) END --------- Синтетический учет --------- #endif #ifdef ALD_NPF ---------- Проводки НПФ if (.TEST_CLIENT_ACCOUNTING(@client_contract_id)) begin select @client_id=client_id from tb_contracts where id=@client_contract_id .GENERATE_OPERATIONS(@client_id,12,@id,@type_id,@action_id,@action_history_id,1,@res_char_id,'Сделка в ТС') .EXEC_PROC((ap_generate_comissions @client_id, 12 , @id, @id, @type_id, @action_id, 8, @res_char_id,'Сделка в ТС', @action_history_id),'Сделка в ТС: формирование комиссий сделки') end ------- Конец Проводки НПФ #endif if @new_state_id <> @state_id update t_items set state_id = @new_state_id where id=@id .BACK_UPDATE_BROK_DATE(@id) #ifdef ALD_UKPIF --------- ПИФ ------- if .TEST_PIF_CLIENT(@client_contract_id) begin if @dealing_look = 1 -- Прямая --- begin select @contr_id = (select min(c.client_id) from tb_contracts c, tb_broker2exchange b where c.dog_type_id in (2,4) and .ITEMS_EXISTS_BY_TYPE(c.id,'ORGANIZATION_CONTRACTS') and c.id = b.ext_broker_deal and b.exchange_id = @sale_place_id) if @contr_id is null ..EXIT_MESSAGE('Не задан контрагент по торговой площадке') end else --- Через брокера ---- begin select @contr_id = client_id from tb_contracts where id = @external_broker_id if @contr_id is null .EXIT_MESSAGE('Не задан конрагент по договору с внешним брокером') end execute ap_pif_stock_inout @sid, @action_history_id, @client_contract_id, 1, -- IN @purpose_id, @stock_id, @stock_qty, @out_sum, @nkd_sum_op, 0, @oper_date_r, @oper_date_r, @contr_id, @partion_id, @id if @@error != 0 begin if @@trancount<>0 rollback tran return end if @dealing_type_i <> 76 begin .BACK_PIF_CLOSE90(@id,@action_id,@action_history_id) end end -- of PIF #endif #ifdef ALD_AUTO .DEL_BLK_AUTO_OPER(@id) #endif ----вызов метода "Перевод ДС в ТС". Демихов Т.Е. 08.09.04 /* --- .EXEC_ACTION(@sid,'DEALINGS_VIA_BROKER', 'TRAN_MONEY2TS') --- Маржиналка--- if @dealing_type_i <> 76 --- Все кроме РПС begin declare @marg_id numeric, @portfolio_sum money, @duty_sum money select @marg_id=margin_deal from tb_repo_params where id=@id if (@marg_id=1) and (@character_id=2) begin .BACK_GET_PORTFOLIO_DUTY_SUM(@id,null,null,@oper_date_r,@portfolio_sum,@duty_sum) .BACK_GET_URM(@portfolio_sum, @duty_sum, @urm_sum) update tb_baysale_docitems set urm_sum=@urm_sum where id=@id if exists(select 1 from tb_urm2investor where investor_id=@client_contract_id) begin update tb_urm2investor set urm_sum=@urm_sum where investor_id=@client_contract_id end else begin .TYPE_INIT('URM2INVESTOR',100) .TYPE_ASSIGN(investor_id,@client_contract_id,100) .TYPE_ASSIGN(owner_id,@owner_id,100) .TYPE_ASSIGN(urm_sum,@urm_sum,100) .TYPE_INSERT('URM2INVESTOR','CRT',100) end end end ---- if @dealing_type_i <> 76 --- Все кроме РПС */ commit tran .END