create procedure dbo.%PROC% @id numeric, @action_id numeric, @action_history_id numeric, @perpose_id numeric, @stock_id numeric, @stock_new_id numeric, @bank_acc_id numeric, @oper_date datetime, @stock_qty money, @stock_new_qty money, @one_sum money, @type_redemption NUMERIC = 1, @rate_face_value DECIMAL(18, 8) = 100, @coupon_sum_one MONEY = 0 as begin tran SELECT @type_redemption = ISNULL(@type_redemption, 1) DECLARE @all_sum_my MONEY, @op_sum_lf_my MONEY, @op_sum_lf_my2 MONEY, @op_sum_lf_my3 MONEY, @op_sum_lf_my4 MONEY, @diff_my MONEY, @coupon_bal_sum_lf_my MONEY, @op_in_sum_my MONEY, @coupon_bal_sum_total_my MONEY, @bo1_comis_qty_sum MONEY, @bo1_comis_acc_sum MONEY, @op_sum_lf_my_total MONEY, @plan2partner NUMERIC, @op_sum_lf_my3_total MONEY, @op_sum_lf_my4_total MONEY .ID_VAR(@pif_comiss_acc_id) .ID_VAR(@pif_pereoc_acc_id) .NAME_VAR(@xxx_subc_str) SELECT @op_sum_lf_my_total = 0 SELECT @op_sum_lf_my3_total = 0 SELECT @op_sum_lf_my4_total = 0 -- Начисление ПНКД (погашение купона) (46,52) - 6010 -- Погашение ЦБ (45,63) - 6012 -- Конвертация (48) - 6015 -- Начисление дивидендов (47) - 6011 .ID_VAR(@stock_acc_id) .ID_VAR(@coupon_acc_id) .ID_VAR(@pol_coupon_acc_id) .ID_VAR(@contr_account_id) .ID_VAR(@contr_account_id_2) .ID_VAR(@acc902_id) .ID_VAR(@acc901_id) .ID_VAR(@add_account_id) .ID_VAR(@div_account_id) .ID_VAR(@div_add_account_id) .ID_VAR(@obl_add_account_id) .ID_VAR(@money_account_id) .ID_VAR(@fund_id) .ID_VAR(@fund_plan_id) .ID_VAR(@out_method_id) .ID_VAR(@out_method_id_my) .ID_VAR(@emi_contragent_id) .ID_VAR(@cur_id) .ID_VAR(@back_owner_id) .INT_VAR(@purpose_code) .NAME_VAR(@doc_name) .MONEY_VAR(@all_sum) .MONEY_VAR(@all_stock_qty) .MONEY_VAR(@diff) .MONEY_VAR(@coupon_bal_sum_lf) .MONEY_VAR(@coupon_qty_sum_lf) .MONEY_VAR(@coupon_bal_sum_total) .MONEY_VAR(@coupon_saldo_qty) .MONEY_VAR(@op_in_sum) .MONEY_VAR(@op_in_qty) .NAME_VAR(@my_doc_name) DECLARE @res_mes VARCHAR(255) .ID_VAR(@op_in_stock_id) .ID_VAR(@part_id) --priimak po prosbe Katorgina-------- .ID_VAR(@broker_id) .ID_VAR(@asset_place_id) .ID_VAR(@dir_id) .ID_VAR(@object_id) DECLARE @my_stock_nominal MONEY, @my_first_nominal MONEY SELECT @my_stock_nominal = stock_nominal, @my_first_nominal = first_nominal FROM td_stock_emis WHERE id = @stock_id -- letsko_av -- 30.05.2005 -- Достаем счет из местонахождения SELECT @broker_id = tb_contracts.client_id, @asset_place_id = ts_sd_stock_moves.asset_place_id FROM ts_sd_stock_moves INNER JOIN tb_broker2exchange ON tb_broker2exchange.id = ts_sd_stock_moves.asset_place_id INNER JOIN tb_contracts ON tb_contracts.id = tb_broker2exchange.ext_broker_deal WHERE ts_sd_stock_moves.id = @id .BACK_PLASE_CLASS_FROM_OBJ(@asset_place_id, @broker_id, @dir_id) -- letsko_av (end) ------------------------------------- select @emi_contragent_id = td_emitent_info.partner_id from td_stock_emis, td_emitent_info where td_stock_emis.id=@stock_id and td_stock_emis.emmitent_id=td_emitent_info.id select @cur_id=.CUR('RUR') select @doc_name = .ITEM_NAME(@perpose_id) select @purpose_code=.PURPOSE_CODE(@perpose_id) select @fund_plan_id = .ARG_PLAN('PIF_ACCOUNT') .ACCID_FROM_CONST2PLAN(@acc901_id, 'BACK_ACC_REALIZ', @fund_plan_id, 1, 1, 'Счет реализации', @res_mes) -- 90.1 .ACCID_FROM_CONST2PLAN(@contr_account_id, 'BACK_ACC_PIF_PROCH_RASH', @fund_plan_id, 1, 1, 'Прочие расчеты по ЦБ', @res_mes) -- 76.5.3 select @stock_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'58.1') select @coupon_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'76.6') select @pol_coupon_acc_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'76.7') select @add_account_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'96.3.1') select @obl_add_account_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'96.3.5') select @div_add_account_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'96.3.3') select @div_account_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'76.9') -- letsko_av -- 30.05.2005 -- Изменился номер счета с 51 на 76.5.9 --select @money_account_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id,'51') --SELECT @money_account_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id, '76.5.4') -- letsko_av (end) -- Добавил Лецко А.В. для Козлова IF .GET_CONST('CAPITAL_EXCLUSIVE') = 'CAPITAL_EXCLUSIVE' BEGIN SELECT @acc902_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id, '90.1') END ELSE BEGIN SELECT @acc902_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id, '90.2') END -- 01.12.2005 IF @purpose_code IN (45, 46, 52, 63) BEGIN .ID_VAR(@contr_account_new_id) SELECT @contr_account_new_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id, '76.16') END select @back_owner_id = .ORGANIZATION declare funds cursor for select td_pay_fond.id from td_pay_fond where .ITEMS_EXISTS_BY_TYPE(td_pay_fond.id,'PIF_FUND') and exists(select 1 from tb_contracts c, td_depo_docs d where c.id=d.id and c.client_id=td_pay_fond.id and d.owner_id=@back_owner_id and c.dog_type_id=(select max(ct.id) from tb_contract_types ct where code='1' and .ITEMS_EXISTS_BY_TYPE(ct.id,'TYPE_CLIENT_CONTRACTS')) and .ITEMS_EXISTS_BY_TYPE(c.id,'CLIENT_CONTRACTS')) for read only open funds fetch funds into @fund_id while ( .CURSOR_STATE = 0 ) begin select @out_method_id = out_method_id from td_pay_fond where id = @fund_id if @fund_plan_id is null .EXIT_MESSAGE('Не задан шаблон плана бухгалтерии ПИФ') -------------------------------------- -- количество бумаг и сумма начисления -------------------------------------- select @all_stock_qty=0 .SALDO_FAST(@fund_id,@fund_plan_id,@oper_date,@stock_acc_id,D,Y,'stock_emis',@stock_id,N,N,N,@all_stock_qty) if isnull(@all_stock_qty,0) > 0 -- обработка ЦБ begin SELECT @all_sum = @all_stock_qty * ISNULL(@one_sum, 0) ---------------------------- -- Начисление деб.задолженности - погашение ЦБ (45,63) ---------------------------- IF @purpose_code IN (45, 63) BEGIN -- 76.5.3 - 90.1 SELECT @my_doc_name = @doc_name + ' - Перечисление ДС на реализацию' IF @type_redemption IN (3, 4) BEGIN -- SELECT @all_sum_my = ROUND(((@all_sum * @rate_face_value) / 100), 2) -- kashuba_av 19.01.06 begin Для частичного погашения сумма считается просто - количество ЦБ * сумму на 1 цб -- SELECT @all_sum_my = ROUND(((@all_sum * @rate_face_value * @my_first_nominal) / (100 * @my_stock_nominal)), 2) --kashuba_av 19.01.06 end --SELECT 'letsko_av_debug', 'ap_pif_group_opers', @all_sum_my AS all_sum_my, @all_sum AS all_sum, -- @rate_face_value AS rate_face_value, @my_first_nominal AS my_first_nominal, @my_stock_nominal AS my_stock_nominal, -- @all_stock_qty AS all_stock_qty SELECT @all_sum_my = ROUND(((@rate_face_value * @my_first_nominal * @all_stock_qty) / 100), 2) .OPERATION(@fund_id, @fund_plan_id, @oper_date, @contr_account_id, @acc901_id, @all_sum_my, 'RUR', @oper_date, 0, 0, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @all_sum_my, @all_sum_my) END ELSE BEGIN .OPERATION(@fund_id, @fund_plan_id, @oper_date, @contr_account_id, @acc901_id, @all_sum, 'RUR', @oper_date, NULL, NULL, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @all_sum, @all_sum) END .UPDATE_SUBC(D, 'partners', @emi_contragent_id) .SUBC_CHECK END ---------------------------- -- Приход ДС - погашение ЦБ и купона в ТС (46,63) ---------------------------- -- letsko_av -- 30.05.2005 -- Изменился номер счета с 51 на 76.5.9 IF @purpose_code IN (46, 63) BEGIN IF @bank_acc_id IS NULL BEGIN -- если не указан банковский счет - нужно перекрыть счет по дебету SELECT @money_account_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id, '76.5.4') END ELSE BEGIN -- .ACCID_FROM_OBJ2PLAN(@money_account_id, @dir_id, @fund_plan_id, 1, 3, 'Место нахождения', @res_mes) SELECT @money_account_id = .SD_ACCID_FROM_EFFNO(@fund_plan_id, '51') END SELECT @my_doc_name = @doc_name + ' - Получение ДС' IF @type_redemption IN (3, 4) BEGIN -- SELECT @all_sum_my = @all_sum -- SELECT @all_sum_my = ROUND(((@all_sum * @rate_face_value) / 100), 2) -- SELECT @all_sum_my = ROUND(((@all_sum * @rate_face_value * @my_first_nominal) / (100 * @my_stock_nominal)), 2) -- не трогаем сумму ;) .OPERATION(@fund_id, @fund_plan_id, @oper_date, @money_account_id, @contr_account_id, @all_sum_my, 'RUR', @oper_date, 0, 0, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @all_sum_my, @all_sum_my) END ELSE BEGIN if @purpose_code=46 --FAN 76.16 in credit begin .OPERATION(@fund_id, @fund_plan_id, @oper_date, @money_account_id, @contr_account_new_id, @all_sum, 'RUR', @oper_date, NULL, NULL, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @all_sum, @all_sum) end else begin --FAN - 76.5.3 in credit .OPERATION(@fund_id, @fund_plan_id, @oper_date, @money_account_id, @contr_account_id, @all_sum, 'RUR', @oper_date, NULL, NULL, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @all_sum, @all_sum) end END .UPDATE_SUBC(C, 'partners', @emi_contragent_id) IF @bank_acc_id IS NULL BEGIN .UPDATE_SUBC(D, 'partners', @broker_id) END ELSE BEGIN .UPDATE_SUBC(D, 'bank_account', @bank_acc_id) END .SUBC_CHECK END -- letsko_av (end) ---------------------------- -- Начисление дивидендов (47) ---------------------------- --letsko_av_debug if @purpose_code = 47 begin --kashuba_av 26.02.06 begin Для Просперити проводка по дивидендам идет при подтверждении платежа -- PIF:76.9-91.1 SELECT @my_doc_name = @doc_name if rtrim(ltrim(.GET_CONST('CLIENT_CODE'))) not in ( 'PROSPERITY') begin .OPERATION(@fund_id, @fund_plan_id, @oper_date, @div_account_id, @div_add_account_id, @all_sum, 'RUR', @oper_date, NULL, NULL, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @all_sum,@all_sum) .UPDATE_SUBC(D,'partners',@emi_contragent_id) .SUBC_CHECK end --kashuba_av 26.02.06 end end else ------------------------------------------------ -- Начисление ПНКД (46,52), Погашение ЦБ (45,63), Конвертация (48) ------------------------------------------------ begin ------ расчет партий для списания .TRANSACTION_SAVE if @purpose_code in (45, 63, 48) -- по балансу begin .TOTALS_QUERY_SUB(@fund_id,@fund_plan_id,@oper_date,@oper_date,@stock_acc_id,'stock_emis',@stock_id,'doc_sec_in',N,N,N,L,N,Y,N,Y) delete #tmp_oss where q_saldo_de<=0 or saldo_de<0 if isnull((select count(*) from #tmp_oss),0) = 0 begin .TRANSACTION_RESTORE .EXIT_MESSAGE('Не выдана разбивка по документам') end end -- по УНКД .TOTALS_QUERY_SUB(@fund_id,@fund_plan_id,@oper_date,@oper_date,@coupon_acc_id,'stock_emis',@stock_id,'doc_sec_in',N,N,N,L,N,Y,N,Y,#tmp_coupon) -- letsko_av -- 28.09.2005 -- тут не надо удалять по количеству, т.к. оно может быть неверным --delete #tmp_coupon where q_saldo_de<=0 or saldo_de<0 DELETE FROM #tmp_coupon WHERE saldo_de < 0 -- letsko_av (end) -- ПРОВОДКИ begin tran ------------------------------ -- Начисление купонного дохода ------------------------------ if @purpose_code in (45, 46, 52, 63) begin ----- зачисление ожидаемой суммы -- PIF:76.16-76.7 IF @type_redemption IN (1, 3) BEGIN SELECT @my_doc_name = @doc_name + ' - Получение ПНКД' -- kashuba_av 10.03.06 begin В случае погашения купона берем сумму купона из поля "сумма на 1 цб" if @purpose_code in (46, 52) SELECT @all_sum_my=@all_sum else SELECT @all_sum_my = ROUND(@coupon_sum_one * @all_stock_qty, 2) -- kashuba_av 10.03.06 end IF @type_redemption IN (1, 3) BEGIN .OPERATION(@fund_id, @fund_plan_id, @oper_date, @contr_account_new_id, @pol_coupon_acc_id, @all_sum_my, 'RUR', @oper_date, 0, 0, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @all_sum_my, @all_sum_my) .UPDATE_SUBC(K,'stock_emis',@stock_id) .UPDATE_SUBC(D,'partners',@emi_contragent_id) .SUBC_CHECK END END -- Партионное списание ПКНД 76.7-76.6 if isnull((select count(*) from #tmp_coupon),0) != 0 begin .PIF_LIFO_FIFO_BEGIN(#tmp_coupon, @out_method_id, @all_stock_qty, @id) SELECT @my_doc_name = @doc_name + ' - Списание УНКД' IF @type_redemption IN (1, 3) BEGIN .OPERATION(@fund_id, @fund_plan_id, @oper_date, @pol_coupon_acc_id, @coupon_acc_id, @op_sum_lf, 'RUR', @oper_date, 0, @op_qty_lf, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @op_sum_lf, @op_sum_lf) .UPDATE_SUBC(D,'stock_emis',@stock_id) .UPDATE_SUBC(K,'stock_emis',@stock_id) .UPDATE_SUBC(K,'doc_sec_in',@subc2_id_lf) .SUBC_CHECK END .PIF_LIFO_FIFO_END IF @type_redemption IN (3, 4) select @diff = @all_sum_my - @op_sum_lf ELSE select @diff = @all_sum_my - @bal_sum_total_lf end else select @diff = @all_sum_my -- Отнесение на прибыли или убытки -- PIF:76.7<>96.3.5 IF @diff > 0 BEGIN -- Прибыль SELECT @my_doc_name = @doc_name + ' - Прибыль от КД' SELECT @diff = ROUND(@diff, 2) IF @type_redemption IN (1, 3) BEGIN -- уже диф подсчитан выше ;) не надо конвертить ... .OPERATION(@fund_id, @fund_plan_id, @oper_date, @pol_coupon_acc_id, @obl_add_account_id, @diff, 'RUR', @oper_date, 0, 0, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @diff, @diff) .UPDATE_SUBC(D, 'STOCK_EMIS', @stock_id) .SUBC_CHECK END END END IF @diff < 0 BEGIN -- Убыток SELECT @diff = @diff * (-1) SELECT @my_doc_name = @doc_name + ' - Убыток от КД' IF @type_redemption = 3 BEGIN SELECT @diff_my = ROUND(((@diff * @rate_face_value) / 100), 2) .OPERATION(@fund_id, @fund_plan_id, @oper_date, @obl_add_account_id, @pol_coupon_acc_id, @diff_my, 'RUR', @oper_date, 0, 0, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @diff_my, @diff_my) END ELSE IF @type_redemption = 1 BEGIN .OPERATION(@fund_id, @fund_plan_id, @oper_date, @obl_add_account_id, @pol_coupon_acc_id, @diff, 'RUR', @oper_date, NULL, NULL, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @diff, @diff) END .UPDATE_SUBC(K,'stock_emis',@stock_id) .SUBC_CHECK END --end -------------------------------------------- -- Погашение ЦБ (45,63), Конвертация (48) -------------------------------------------- IF @purpose_code IN (45, 63, 48) BEGIN IF @purpose_code IN (45, 63) SELECT @contr_account_id_2 = @acc902_id ELSE SELECT @contr_account_id_2 = @contr_account_id SELECT @coupon_bal_sum_total = 0 --------- Партионное списание .PIF_LIFO_FIFO_BEGIN(#tmp_oss, @out_method_id, @all_stock_qty, @id) SELECT @my_doc_name = @doc_name + ' - Списание ЦБ (балансовая стоимость)' /* IF @purpose_code IN (45) BEGIN IF @type_redemption IN (3, 4) BEGIN SELECT @op_sum_lf_my = ROUND(((@op_sum_lf * @rate_face_value * @my_first_nominal) / (100 * @my_stock_nominal)), 2) .OPERATION(@fund_id, @fund_plan_id, @oper_date, @contr_account_id_2, @stock_acc_id, @op_sum_lf_my, 'RUR', @oper_date, 0, 0, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @op_sum_lf_my, @op_sum_lf_my) END ELSE BEGIN .OPERATION(@fund_id, @fund_plan_id, @oper_date, @contr_account_id_2, @stock_acc_id, @op_sum_lf, 'RUR', @oper_date, NULL, @op_qty_lf, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @op_sum_lf, @op_sum_lf) END .UPDATE_SUBC(K, 'STOCK_EMIS', @stock_id) .UPDATE_SUBC(К, 'DOC_SEC_IN', @subc2_id_lf) .UPDATE_SUBC(D, 'PARTNERS', @emi_contragent_id) .SUBC_CHECK END ELSE */ BEGIN SELECT @plan2partner = .PLAN2PARTNER_ID(@fund_id, @fund_plan_id) SELECT @xxx_subc_str = '' .SUBC_STR_ADD(@xxx_subc_str, 'STOCK_EMIS', @stock_id) .SUBC_STR_ADD(@xxx_subc_str, 'DOC_SEC_IN', @subc2_id_lf) -- разобраться с циклом IF @subc2_id_lf = ( SELECT td_depo_docs.id FROM td_depo_docs WHERE in_no = 'COMMON_ASSET_INPUT' AND .ITEMS_EXISTS_BY_TYPE(td_depo_docs.id, 'LETTER_IN')) SELECT @out_method_id_my = 3 ELSE SELECT @out_method_id_my = 1 .SALDO_NOW_SUM(@plan2partner, @stock_acc_id, @xxx_subc_str, 1, @op_sum_lf_my2, @bo1_comis_qty_sum, @bo1_comis_acc_sum, NULL, NULL, NULL) SELECT @my_doc_name = @doc_name + ' - Списание балансовой стоимости' IF @type_redemption IN (3, 4) BEGIN SELECT @op_sum_lf_my2 = ROUND(((@op_sum_lf_my2 * @rate_face_value * @my_first_nominal) / (100 * @my_stock_nominal)), 2) .OPERATION(@fund_id, @fund_plan_id, @oper_date, @contr_account_id_2, @stock_acc_id, @op_sum_lf_my2, 'RUR', @oper_date, 0, 0, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @op_sum_lf_my2, @op_sum_lf_my2) END ELSE BEGIN .OPERATION(@fund_id, @fund_plan_id, @oper_date, @contr_account_id_2, @stock_acc_id, @op_sum_lf_my2, 'RUR', @oper_date, 0, @bo1_comis_qty_sum, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @op_sum_lf_my2, @op_sum_lf_my2) END .UPDATE_SUBC(D, 'PARTNERS', @emi_contragent_id) .UPDATE_SUBC(K, 'STOCK_EMIS', @stock_id) .UPDATE_SUBC(К, 'DOC_SEC_IN', @subc2_id_lf) .SUBC_CHECK SELECT @op_sum_lf_my_total = @op_sum_lf_my_total + @op_sum_lf_my2 SELECT @my_doc_name = @doc_name + ' - Все коммиссии' .ACCID_FROM_CONST2PLAN(@pif_comiss_acc_id, 'BACK_ACC_SECUR_MP_LONG_COMIS', @fund_plan_id, 1, 1, 'Счет ЦБ (длинная позиция) комиссия', @res_mes) .SALDO_NOW_SUM(@plan2partner, @pif_comiss_acc_id, @xxx_subc_str, 1, @op_sum_lf_my3, @bo1_comis_qty_sum, @bo1_comis_acc_sum, NULL, NULL, NULL) SELECT @op_sum_lf_my3_total = @op_sum_lf_my3_total + ISNULL(@op_sum_lf_my3, 0) IF @type_redemption IN (3, 4) BEGIN SELECT @op_sum_lf_my3 = ROUND(((@op_sum_lf_my3 * @rate_face_value * @my_first_nominal) / (100 * @my_stock_nominal)), 2) .OPERATION(@fund_id, @fund_plan_id, @oper_date, @contr_account_id_2, @pif_comiss_acc_id, @op_sum_lf_my3, 'RUR', @oper_date, 0, 0, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @op_sum_lf_my3, @op_sum_lf_my3) END ELSE BEGIN .OPERATION(@fund_id, @fund_plan_id, @oper_date, @contr_account_id_2, @pif_comiss_acc_id, @op_sum_lf_my3, 'RUR', @oper_date, 0, 0, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @op_sum_lf_my3, @op_sum_lf_my3) END .UPDATE_SUBC(D, 'PARTNERS', @emi_contragent_id) .UPDATE_SUBC(K, 'STOCK_EMIS', @stock_id) .UPDATE_SUBC(К, 'DOC_SEC_IN', @subc2_id_lf) .SUBC_CHECK SELECT @my_doc_name = @doc_name + ' - Сумма переоценки' .ACCID_FROM_CONST2PLAN(@pif_pereoc_acc_id, 'BACK_ACC_PEREOC_COMIS', @fund_plan_id, 1, 1, 'Счет переоценки по ПИФ', @res_mes) .SALDO_NOW_SUM(@plan2partner, @pif_pereoc_acc_id, @xxx_subc_str, 1, @op_sum_lf_my4, @bo1_comis_qty_sum, @bo1_comis_acc_sum, NULL, NULL, NULL) SELECT @op_sum_lf_my4_total = @op_sum_lf_my4_total + ISNULL(@op_sum_lf_my4, 0) .OPERATION(@fund_id, @fund_plan_id, @oper_date, @contr_account_id_2, @pif_pereoc_acc_id, @op_sum_lf_my4, 'RUR', @oper_date, 0, 0, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @op_sum_lf_my4, @op_sum_lf_my4) .UPDATE_SUBC(D, 'PARTNERS', @emi_contragent_id) .UPDATE_SUBC(K, 'STOCK_EMIS', @stock_id) .UPDATE_SUBC(К, 'DOC_SEC_IN', @subc2_id_lf) .SUBC_CHECK END -- Списание УНКД if exists(select 1 from #tmp_coupon o where o.subc2_id = @subc2_id_lf) begin select @coupon_bal_sum_lf = o.saldo_de, @coupon_saldo_qty = o.q_saldo_de from #tmp_coupon o where o.subc2_id = @subc2_id_lf select @coupon_qty_sum_lf = @q_saldo_lf if @coupon_qty_sum_lf > @op_qty_lf begin select @coupon_bal_sum_lf = .ROUND_MONEY(((convert(double precision,@coupon_bal_sum_lf)/convert(double precision,@coupon_qty_sum_lf)) * @op_qty_lf),2) select @coupon_qty_sum_lf = @op_qty_lf end if @coupon_qty_sum_lf > @coupon_saldo_qty select @coupon_qty_sum_lf = @coupon_saldo_qty -- ! валюта в проводку = валюте плана(RUR) -- IF @purpose_code IN (63, 48) BEGIN IF @purpose_code IN (48) BEGIN SELECT @my_doc_name = @doc_name + ' - 9' IF @type_redemption IN (3, 4) BEGIN -- SELECT @coupon_bal_sum_lf_my = ROUND(((@coupon_bal_sum_lf * @rate_face_value) / 100), 2) SELECT @coupon_bal_sum_lf_my = ROUND(((@coupon_bal_sum_lf * @rate_face_value * @my_first_nominal) / (100 * @my_stock_nominal)), 2) .OPERATION(@fund_id, @fund_plan_id, @oper_date, @contr_account_id, @coupon_acc_id, @coupon_bal_sum_lf_my, 'RUR', @oper_date, 0, 0, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @coupon_bal_sum_lf_my, @coupon_bal_sum_lf_my) END ELSE IF @type_redemption = 1 BEGIN .OPERATION(@fund_id, @fund_plan_id, @oper_date, @contr_account_id, @coupon_acc_id, @coupon_bal_sum_lf, 'RUR', @oper_date, 0, @coupon_qty_sum_lf, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @coupon_bal_sum_lf, @coupon_bal_sum_lf_my) END .UPDATE_SUBC(K,'stock_emis',@stock_id) .UPDATE_SUBC(К,'doc_sec_in',@subc2_id_lf) if @purpose_code not in (45,63) begin .UPDATE_SUBC(D,'partners',@emi_contragent_id) end .SUBC_CHECK END select @coupon_bal_sum_total = @coupon_bal_sum_total + @coupon_bal_sum_lf end .PIF_LIFO_FIFO_END if @purpose_code in (45, 63) -- Погашение select @diff = @all_sum - @bal_sum_total_lf - @coupon_bal_sum_total -- Зачисление обратно -- для Конвертации IF @purpose_code = 48 BEGIN SELECT @op_in_sum = @op_sum_lf_my_total SELECT @op_in_stock_id = @stock_new_id IF @stock_new_qty IS NULL OR ISNULL(@stock_qty, 0) = 0 SELECT @op_in_qty = @all_stock_qty ELSE SELECT @op_in_qty = ROUND((@all_stock_qty * (@stock_new_qty / @stock_qty)), 0) -- Партия IF @out_method_id_my = 3 -- среднее SELECT @part_id = ( SELECT td_depo_docs.id FROM td_depo_docs WHERE in_no = 'COMMON_ASSET_INPUT' AND .ITEMS_EXISTS_BY_TYPE(td_depo_docs.id, 'LETTER_IN') ) ELSE SELECT @part_id = @id -- Зачисление ЦБ SELECT @my_doc_name = @doc_name + ' - Зачисление балансовой стоимости ЦБ' .OPERATION(@fund_id, @fund_plan_id, @oper_date, @stock_acc_id, @contr_account_id, @op_in_sum, 'RUR', @oper_date, @op_in_qty, NULL, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @op_in_sum, @op_in_sum) .UPDATE_SUBC(D, 'STOCK_EMIS', @op_in_stock_id) .UPDATE_SUBC(D, 'DOC_SEC_IN', @part_id) .UPDATE_SUBC(K, 'PARTNERS', @emi_contragent_id) .SUBC_CHECK SELECT @my_doc_name = @doc_name + ' - Все коммиссии' -- .SALDO_NOW_SUM(@plan2partner, @pif_comiss_acc_id, @xxx_subc_str, 1, @op_sum_lf_my3, @bo1_comis_qty_sum, @bo1_comis_acc_sum, NULL, NULL, NULL) .OPERATION(@fund_id, @fund_plan_id, @oper_date, @pif_comiss_acc_id, @contr_account_id_2, @op_sum_lf_my3_total, 'RUR', @oper_date, 0, 0, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @op_sum_lf_my3_total, @op_sum_lf_my3_total) .UPDATE_SUBC(D, 'STOCK_EMIS', @op_in_stock_id) .UPDATE_SUBC(D, 'DOC_SEC_IN', @part_id) .UPDATE_SUBC(K, 'PARTNERS', @emi_contragent_id) .SUBC_CHECK SELECT @my_doc_name = @doc_name + ' - Сумма переоценки' -- .SALDO_NOW_SUM(@plan2partner, @pif_pereoc_acc_id, @xxx_subc_str, 1, @op_sum_lf_my4, @bo1_comis_qty_sum, @bo1_comis_acc_sum, NULL, NULL, NULL) .OPERATION(@fund_id, @fund_plan_id, @oper_date, @pif_pereoc_acc_id, @contr_account_id_2, @op_sum_lf_my4_total, 'RUR', @oper_date, 0, 0, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @op_sum_lf_my4_total, @op_sum_lf_my4_total) .UPDATE_SUBC(D, 'STOCK_EMIS', @op_in_stock_id) .UPDATE_SUBC(D, 'DOC_SEC_IN', @part_id) .UPDATE_SUBC(K, 'PARTNERS', @emi_contragent_id) .SUBC_CHECK -- новый цикл - все очищаем SELECT @op_sum_lf_my_total = 0 SELECT @op_sum_lf_my3_total = 0 SELECT @op_sum_lf_my4_total = 0 -- Зачисление УНКД - обратно if isnull(@coupon_bal_sum_total,0)!=0 begin SELECT @my_doc_name = @doc_name + ' - 11' IF @type_redemption IN (3, 4) BEGIN -- SELECT @coupon_bal_sum_total_my = ROUND(((@coupon_bal_sum_total * @rate_face_value) / 100), 2) SELECT @coupon_bal_sum_total = ROUND(((@coupon_bal_sum_total * @rate_face_value * @my_first_nominal) / (100 * @my_stock_nominal)), 2) .OPERATION(@fund_id, @fund_plan_id, @oper_date, @coupon_acc_id, @contr_account_id, @coupon_bal_sum_total_my, 'RUR', @oper_date, 0, 0, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @coupon_bal_sum_total_my, @coupon_bal_sum_total_my) END ELSE IF @type_redemption = 1 BEGIN .OPERATION(@fund_id, @fund_plan_id, @oper_date, @coupon_acc_id, @contr_account_id, @coupon_bal_sum_total, 'RUR', @oper_date, @op_in_qty, NULL, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @coupon_bal_sum_total, @coupon_bal_sum_total) END .UPDATE_SUBC(D,'stock_emis',@op_in_stock_id) .UPDATE_SUBC(D,'doc_sec_in',@part_id) .UPDATE_SUBC(K,'partners',@emi_contragent_id) .SUBC_CHECK end end --- Отнесение на прибыли или убытки (для погашения) /* -- IF @purpose_code IN (45, 63) AND .GET_CLASS_VALUE_CODE_FOR_ITEM(@fund_id, 'CLOSE90', 'YES') = 'YES' BEGIN IF @purpose_code IN (63) AND .GET_CLASS_VALUE_CODE_FOR_ITEM(@fund_id, 'CLOSE90', 'YES') = 'YES' BEGIN IF @diff > 0 BEGIN -- Прибыль SELECT @my_doc_name = @doc_name + ' - Прибыль от КД' IF @type_redemption = 3 BEGIN -- SELECT @diff_my = ROUND(((@diff * @rate_face_value) / 100), 2) SELECT @diff_my = ROUND(((@diff * @rate_face_value * @my_first_nominal) / (100 * @my_stock_nominal)), 2) .OPERATION(@fund_id, @fund_plan_id, @oper_date, @contr_account_id, @add_account_id, @diff_my, 'RUR', @oper_date, 0, 0, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @diff_my, @diff_my) END ELSE IF @type_redemption = 1 BEGIN .OPERATION(@fund_id, @fund_plan_id, @oper_date, @contr_account_id, @add_account_id, @diff, 'RUR', @oper_date, NULL, NULL, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @diff, @diff) END .SUBC_CHECK END IF @diff < 0 BEGIN -- Убыток SELECT @diff = @diff * (-1) SELECT @my_doc_name = @doc_name + ' - Убыток от КД' IF @type_redemption = 3 BEGIN -- SELECT @diff_my = ROUND(((@diff * @rate_face_value * @my_first_nominal) / (100 * @my_stock_nominal)), 2) SELECT @diff_my = ROUND(((@diff * @rate_face_value) / 100), 2) .OPERATION(@fund_id, @fund_plan_id, @oper_date, @add_account_id, @contr_account_id, @diff_my, 'RUR', @oper_date, 0, 0, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @diff_my, @diff_my) END ELSE IF @type_redemption = 1 BEGIN .OPERATION(@fund_id, @fund_plan_id, @oper_date, @add_account_id, @contr_account_id, @diff, 'RUR', @oper_date, NULL, NULL, @my_doc_name, N, @operation_id, @id, @action_id, @action_history_id, @diff, @diff) END .SUBC_CHECK END END */ END commit tran drop table #tmp_coupon drop table #tmp_coupon_t .TRANSACTION_RESTORE end end -- обработка ЦБ fetch funds into @fund_id end close funds .DEALLOCATE funds commit tran