Professional Documents
Culture Documents
Função Z_BARWERT_ANALYSE
Texto fonte:
FUNCTION ZGCTP_BARWERT_USEREXIT_ANALYSE.
*"----------------------------------------------------------------------
*"*"Interface local:
*" IMPORTING
*"----------------------------------------------------------------------
vg_cenario = i_expar-scenario.
FIELD-SYMBOLS:
DATA:
vl_ridxrt TYPE jbrdbbeweg-ridxrt, " No. interno da transação genérica
if <beweg>-objnr IS ASSIGNED.
l_nrobj = <beweg>-objnr.
else.
clear l_nrobj.
endif.
Select SINGLE
bukrs
rfha
RFHAZUL
INTO (l_bukrs,
l_rfha,
l_rfhazul)
FROM VTBFHA
IF sy-subrc IS INITIAL.
SELECT SINGLE
sformref
rkondgr
rkond
dguel_kp
ppayment
szsref "VSI03+
INTO (l_sformref,
l_rkondgr,
l_rkond,
l_dguel_kp,
l_pkond,
l_wyref) "VSI03+
FROM vtbfinko
( sbktyp = '15' OR
SELECT SINGLE
pkond
INTO l_pkond
FROM vtbafinko
svarname = 'V3'.
* IF sy-subrc IS INITIAL.
ENDIF.
ENDIF.
* wyref "VSI03-
* endif. "VSI03-
* ENDIF. "VSI03-
* ENDIF. "VSI03-
* ENDIF. "VSI03-
<beweg>-szsref = l_wyref.
<beweg>-soffset = l_pkond.
ENDLOOP.
CLEAR e_cr.
CLEAR e_yc.
IF i_beweg-snwhr NE i_expar-currency.
e_cr-fcurr = i_beweg-snwhr.
e_cr-tcurr = i_expar-currency.
APPEND e_cr.
ENDIF.
e_yc-waers = i_beweg-scwhr.
e_yc-szkart = i_mseg-bcurve.
APPEND e_yc.
ENDLOOP.
SORT e_cr.
DELETE ADJACENT DUPLICATES FROM e_cr.
SORT e_yc.
**
** CLEAR e_cr.
**
** e_cr-fcurr = i_beweg-snwhr.
** e_cr-tcurr = i_expar-currency.
**
** APPEND e_cr.
**
** ENDLOOP.
**
** SORT e_cr.
**
**
** CLEAR e_yc.
**
** e_yc-waers = i_beweg-scwhr.
** e_yc-szkart = i_mseg-bcurve.
**
** APPEND e_yc.
ENDFUNCTION.
Função Z_BARWERT_BEWERTUNG
Texto Fonte:
FUNCTION zfctp_barwert_userexit_bewert.
*"--------------------------------------------------------------------
--
*"*"Interface local:
*" IMPORTING
*" TABLES
*"--------------------------------------------------------------------
--
tg_curr[] = i_curr[].
IF i_expar-currency IS INITIAL.
i_expar-currency = 'BRL'.
ENDIF.
* Inicializa variáveis.
CLEAR:
vg_nok,
vg_meth,
vg_log_flg,
vg_vf,
tg_curr,
vg_vp_aux,
tg_curr[],
tg_beweg[],
vg_cabec_log_flg,
tg_detail,
tg_detail[].
accrual TYPE f,
n TYPE f,
cf TYPE f,
cdi TYPE f,
cdi_% TYPE f,
cf_% TYPE f,
fv TYPE f,
pv TYPE f,
END OF e_eval.
v_clean_price TYPE f,
vl_tabix TYPE i,
v_trans(32) TYPE c,
break ct005992.
break ct006045.
r_line-sign = 'I'.
r_line-option = 'EQ'.
r_line-low = '001'.
r_line-high = '000'.
i_koet-gform = '001' ).
* Inícia as varáveis
FREE: t_meth,
t_sfgdt.
CLEAR: v_flag_standard_calc,
v_flag_swap_initial,
v_new,
v_objnr.
EXPORTING
i_analysis_type = '01'
* i_eval = '1010'
i_curr = i_expar-currency
i_hori = i_expar-horizon
i_date = i_expar-horizon
IMPORTING
e_spara_w = spara.
EXPORTING
i_spara = spara
EXCEPTIONS
init_error = 1
OTHERS = 2.
EXPORTING
date = spara-datum
hori = spara-horizont
eval = spara-auswertung
szen = spara-szenari
curr = spara-waers
EXCEPTIONS
OTHERS = 1.
CLEAR t_meth.
t_meth-methode = i_expar-methode.
t_meth-horizont = i_expar-horizon.
APPEND t_meth.
t_meth-methode = '300'.
APPEND t_meth.
EXPORTING
level = 1
EXCEPTIONS
OTHERS = 1.
* CLEAR t_meth.
* wa_meth-methode = i_expar-methode.
* wa_meth-horizont = i_expar-horizon.
* dfaell GE i_expar-evaldate )
* OR ddispo GE i_expar-evaldate ) .
* wa_jbrfob-objnr = wa_beweg-objnr.
* vl_objnr = wa_beweg-objnr.
* IF wa_beweg-dzfest GE i_expar-evaldate.
* DELETE e_t_beweg.
* ELSE.
* miss_fix = con_1.
* ENDIF.
* ENDLOOP.
* SORT t_jbrfob.
* BREAK-POINT.
* EXPORTING
* i_date = i_expar-evaldate
* i_anwtyp = '1'
* i_sicht = vl_sicht
* IMPORTING
* e_sfgdt = t_sfgdt
* TABLES
* i_jbrfob = t_jbrfob
* CHANGING
* c_done = vl_done.
* EXPORTING
* spara = spara
* TABLES
* i_meth = t_meth
* CHANGING
* m_sfgdt = t_sfgdt.
* t_fgdt = wa_sfgdt-fgdt.
* t_fget_t = t_fgdt-fget_t.
* t_gid = wa_fget_t-gid.
* vl_ngidnr = wa_gid.
* t_beweg_aux = wa_fget_t-beweg_t.
* t_mseg = wa_fget_t-mseg.
* t_best = wa_fget_t-best.
* IF wa_beweg_aux-cashflow-dzfest LT i_expar-evaldate.
* ENDIF.
* ENDLOOP.
* EXPORTING
* i_akt_datum = i_expar-evaldate
* i_ausw_datum = i_expar-evaldate
* i_res_curr = i_expar-currency
* i_bssign = '-'
* i_mseg = t_mseg
* vari_i_fgcf = t_beweg_aux
* i_best = t_best
* IMPORTING
* vari_e_fgcf = t_beweg_imp.
* ENDLOOP.
* cashflow-bcwhr ASCENDING
* cashflow-dfaell ASCENDING.
* wa_beweg-objnr = vl_objnr.
* ENDLOOP.
IMPORTING
e_datastr = v_datastr
e_segm_char_type = v_anwtyp_c
e_internal_view = v_internal_view.
EXPORTING
tmekey = '1001'
name = 'SELECTION'.
DATA: f1(12),
f2.
v_anwtyp_n = v_anwtyp_c.
CLEAR t_fob.
t_fob-objnr = i_koet-objnr.
APPEND t_fob.
EXPORTING
i_date = i_expar-evaldate
i_anwtyp = v_anwtyp_n
i_sicht = v_internal_view
IMPORTING
e_sfgdt = t_sfgdt
TABLES
i_jbrfob = t_fob
CHANGING
c_bpid = f1
c_done = f2.
*-- Zeitmesspunkt Anreicherung Ende
EXPORTING
tmekey = '1001'.
EXPORTING
tmekey = '1002'
name = 'ENRICHMENT'.
EXPORTING
spara = spara
TABLES
i_meth = t_meth
CHANGING
m_sfgdt = t_sfgdt.
t_fgdt = wa_sfgdt-fgdt.
t_fget_t = t_fgdt-fget_t.
t_gid = wa_fget_t-gid.
vl_ngidnr = wa_gid.
t_beweg_aux = wa_fget_t-beweg_t.
t_mseg = wa_fget_t-mseg.
t_best = wa_fget_t-best.
IF wa_beweg_aux-cashflow-dzfest LT i_expar-evaldate.
ENDIF.
ENDLOOP.
ENDLOOP.
break ct006399.
t_beweg_nxt[] = i_beweg[].
v_index = sy-tabix + 1.
DO.
exit.
ELSE.
v_index = v_index + 1.
ENDIF.
ENDDO.
IF sy-subrc = 0 AND
i_beweg-rkondgr = wa_beweg_nxt-rkondgr.
if i_beweg-bcwhr = 0.
IF i_beweg-bnwhr <> 0.
ELSE.
v_coef = 1.
ENDIF.
MODIFY i_beweg.
ENDIF.
ELSE.
if i_beweg-bcwhr = 0 AND
i_beweg-cfknz = 1.
MODIFY i_beweg.
endif.
ENDIF.
ENDLOOP.
* wa_beweg-objnr = vl_objnr.
* ENDLOOP.
EXPORTING
tmekey = '1002'.
CLEAR v_glpar.
t_fgdt = wa_sfgdt-fgdt.
REFRESH t_root.
APPEND 1 TO t_root.
EXPORTING
tmekey = '1003'
name = 'VALUATION'.
REFRESH t_meo.
EXPORTING
datum = sy-datum
df_zins = '20080114'
cr_kurst_g = 'BRL'
cr_kurst_b = 'BRL'.
EXPORTING
glpar = v_glpar
meth = t_meth[]
fgets = t_fgdt-fget_t
root = t_root
IMPORTING
meo = t_meo[]
status = v_status.
* standard
IF i_koet-gform = '001' OR
i_koet-gform = '041' OR
i_koet-gform = '051'.
* Se não tiver curva para o dia da valorização buscar do dia anterior
wa_beweg[] = i_beweg[].
LOOP AT i_beweg.
APPEND tg_beweg.
CLEAR tg_beweg.
ENDLOOP.
DATA:
**********************************************************************
**
* ********************************************************************
*
* * I N Í C I O D O C Á L C U L O D E E N P V *
*
* ********************************************************************
*
**********************************************************************
**
**********************************************************************
**
* LOOP AT I_BEWEG...
*
**********************************************************************
**
CONTINUE.
* CONTINUE.
ENDIF.
vl_tabix = sy-tabix.
wa_beweg-szsrefvz TO v_szsrefvz.
IF e_eval-cdi_% IS INITIAL.
e_eval-cdi_% = 1.
ELSE.
ENDIF.
IF i_koet-snomwhr IS INITIAL.
e_messages-text = text-m01.
APPEND e_messages.
EXIT.
ENDIF.
bcurveb
FROM atrmo
CLEAR v_text.
i_koet
USING v_bcurve
v_bcurveb
* i_koet-snomwhr "VSI03-
i_beweg-snwhr "VSI03+
i_expar-evaldate
i_beweg-dfaell
i_koet-objnr
i_koet-gform "VSI03+
CHANGING v_rc
v_text.
* IF v_rc <> 0.
e_messages-text = v_text.
APPEND e_messages.
EXIT.
ELSE.
ENDIF.
using i_beweg
i_koet-gform "VSI03+
CHANGING enpv.
ncfnr = i_beweg-ncfnr.
IF sy-subrc = 0.
tg_beweg-bcwhr = vg_vf.
tg_beweg-bnwhr = vg_enpv.
tg_beweg-fatded = for_capfac-capfact.
tg_beweg-nok = vg_nok.
ENDIF.
CLEAR eg_beweg.
eg_beweg = i_beweg.
eg_beweg-bcwhr = vg_vf.
* Constrói o log
USING
v_bcurve
v_bcurveb
i_mseg-kurstg
i_expar-methode
i_expar-evaldate
vl_tabix
enpv
i_expar-currency
i_curr-rate
i_koet-snomwhr "VSI02+
i_koet-gform "VSI03+
i_mseg-kurstb. "VSI03+
* i_expar-currency "VSI-
27/10/11
* i_expar-scenario "VSI-
27/10/11
i_expar-currency "VSI-
27/10/11
i_expar-scenario "VSI-
27/10/11
ENDIF. "VSI-
27/10/11
*** ENDLOOP.
"VSI02-
*** ELSE.
"VSI02-
*** i_expar-currency
"VSI02-
*** ENDLOOP.
"VSI02-
*** ENDIF.
"VSI02-
*** ENDIF.
"VSI02-
vl_objnr_aux = i_beweg-objnr.
ENDLOOP.
* i_expar-currency "VSI02+
EXPORTING "VSI03+
IMPORTING "VSI03+
IF SY-SUBRC <> 0.
* message error
ENDIF.
ENDLOOP. "VSI02+
EXPORTING "VSI03+
IMPORTING "VSI03+
IF SY-SUBRC = 0.
enpv = v_calc.
ENDIF.
ENDIF. "VSI02+
i_koet-gform = '001'.
FROM i73gpa1
INTO (ST_BUKRS_DEAL-COMPANY_CODE,
ST_BUKRS_DEAL-DEAL_NUMBER)
EXPORTING
* IM_FLG_SECURITIES =
* IM_FLG_LOANS =
* IM_FLG_OPTION_FUTURE =
IM_FLG_DEALS = 'X'
* IM_RNGCOMPANYCODES =
IM_RNGVALAREAS = r_rngvalareas
* IM_RNGPRODUCTTYPES =
* IM_RNGVALCLASSES =
* IM_RNG_FUND =
* IM_RNG_GRANT_NBR =
* IM_RNGSECURITYIDS =
* IM_RNGSECURITYACCOUNTS =
* IM_RNGACCOUNTGROUPS =
* IM_RNGPORTFOLIOS =
* IM_RNGTRADERS =
* IM_RNGLOANCONTRACTS =
* IM_RNGSECURITYPIDS =
* IM_RNGPOSITIONACCOUNTS =
IM_TAB_BUKRS_DEALNUMBER = T_BUKRS_DEAL
* IM_RNG_PRODUCT_CATS =
* IM_RNG_POSITION_CURR =
* IM_RNG_ACCOUNT_REF =
* IM_RNG_CHANGENAME =
* IM_RNG_CHANGEDATE =
* IM_RNG_TRANSACTION_CURR =
* IM_RNG_EXT_REF =
IM_KEY_DATE = i_expar-evaldate
IMPORTING
* EX_TAB_POSITION_GUID =
EX_TAB_DIF_POS_IDENT = T_DIF_POS_IDENT.
append v_trans to
id_transacoes.
endloop.
v_data2 = c_000.
*** EXPORTING
**** IM_TCODE =
*** IMPORTING
**** EX_FLG_ACCRUED =
**** EX_PROT_TAB_ITEM =
**** EX_TAB_PH_MESSAGE =
**** EX_TAB_ACCP =
**** EX_TAB_ACCR =
***
*** ENDLOOP.
EXPORTING
im_keydat = i_expar-evaldate
im_includ = 'X'
im_ultimo = space
im_test = 'X'
im_tab_flowt = v_tab_flowt
im_tab_positions_guid = id_transacoes
IMPORTING
ex_tab_income = t_income
EXCEPTIONS
erro = 1
OTHERS = 2.
v_key_date = w_income-key_date.
v_position_curr = w_income-position_curr.
endif.
ENDLOOP.
EXPORTING
* CLIENT = SY-MANDT
DATE = V_KEY_DATE
FOREIGN_CURRENCY = i_expar-currency
LOCAL_AMOUNT = v_sum
LOCAL_CURRENCY = V_POSITION_CURR
* RATE = 0
TYPE_OF_RATE = i_mseg-kurstb
* READ_TCURR = 'X'
IMPORTING
* EXCHANGE_RATE =
FOREIGN_AMOUNT = v_foreign_amount.
* FOREIGN_FACTOR =
* LOCAL_FACTOR =
* EXCHANGE_RATEX =
* DERIVED_RATE_TYPE =
* FIXED_RATE =
* EXCEPTIONS
* NO_RATE_FOUND = 1
* OVERFLOW = 2
* NO_FACTORS_FOUND = 3
* NO_SPREAD_FOUND = 4
* DERIVED_2_TIMES = 5
* OTHERS = 6
IF SY-SUBRC = 0.
ENDIF.
endif.
ENDIF.
**********************************************************************
**
* ********************************************************************
*
* * F I M D O C Á L C U L O D E E N P V *
*
* ********************************************************************
*
**********************************************************************
**
ENDIF.
CLEAR:
e_detail,
e_detail[].
e_detail[] = tg_detail[].
ENDFUNCTION.
*&--------------------------------------------------------------------
-*
*&--------------------------------------------------------------------
-*
* text
*---------------------------------------------------------------------
-*
* <->I_KOET text
* <->I_MSEG text
* <->I_BEWEG text
* -->EVALDATE text
* -->OBJNR text
* <--ACCRUAL text
* <--%_CDI text
*---------------------------------------------------------------------
-*
FORM f_get_in_param TABLES i_koet STRUCTURE jbikoet08
USING evaldate
objnr
CHANGING accrual
%_cdi TYPE f.
accrual = i_beweg-bnwhr.
FROM vtbfinko
INTO %_cdi
AND rfhazu EQ 2
IF %_cdi IS INITIAL.
%_cdi = 1.
ELSE.
ENDIF.
*&--------------------------------------------------------------------
-*
* text
*---------------------------------------------------------------------
-*
* <--FOR_RATES text
* -->SIGN text
* -->CURVETYPE text
* -->CURVETYPE_B text
* -->CURRENCY text
* -->VALUEDATE text
* -->GRIDDATE text
* <--RC text
*---------------------------------------------------------------------
-*
USING bcurve
bcurveb
currency
valuedate
griddate
objnr
vgform "VSI03+
CHANGING rc
CLEAR for_capfac.
REFRESH for_capfac. "ALT
for_capfac-griddate = griddate.
for_capfac-objnr = objnr.
APPEND for_capfac.
EXPORTING
valuedate = valuedate
IMPORTING
valuetext = text
e_nok = vg_nok
e_meth = vg_meth
TABLES
request = for_capfac
i_koet = for_koet
EXCEPTIONS
error_found = 1
OTHERS = 2.
EXIT.
ENDIF.
rc = sy-subrc.
DATA: v_cf TYPE zvtvmdvin-capfact,
v_cf = for_capfac-capfact.
CLEAR for_capfac.
for_capfac-griddate = griddate.
for_capfac-objnr = objnr.
APPEND for_capfac.
EXPORTING
valuedate = valuedate
IMPORTING
valuetext = text
e_nok = vg_nok
e_meth = vg_meth
TABLES
request = for_capfac
EXCEPTIONS
error_found = 1
OTHERS = 2.
EXIT.
ENDIF.
rc = sy-subrc.
v_cf2 = for_capfac-capfact.
FROM i73gpa1
INTO v_forma
ELSE.
v_cf = ( v_cf * v_cf2 ).
ENDIF.
ENDIF.
*&--------------------------------------------------------------------
-*
*&--------------------------------------------------------------------
-*
* text
*---------------------------------------------------------------------
-*
* -->FOR_CAPFAC text
* <--ENPV text
* <--EV text
*---------------------------------------------------------------------
-*
FORM f_calc_npv
vgform
"VSI03+
CHANGING
enpv.
n LIKE for_capfac-griddays,
pc LIKE vtbfinko-ppayment.
accrual TYPE f,
n TYPE f,
cf TYPE f,
cdi TYPE f,
cdi_% TYPE f,
cf_% TYPE f,
fv TYPE f,
pv TYPE f,
END OF ev.
ev-n = for_capfac-griddays.
ev-cf = for_capfac-capfact.
ev-mtm_date = for_capfac-valuedate.
FIELD-SYMBOLS:
**********************************************************************
**
**********************************************************************
**
** Lógica 1
* vg_vf =
* ( ( ( ( ( for_capfac-capfact ** ( 1 / vg_nok ) ) - 1 ) *
* * <beweg>-bcwhr.
*
* PERFORM f_update_beweg USING <beweg>.
* vg_enpv = enpv.
* enpv = vg_vp_aux.
* EXIT.
* ENDIF.
* ENDIF.
** Lógica 2
* IF <beweg>-pkond <> 0.
* FROM i73gpa1
* INTO vl_WYFCJ
* vg_vf =
* ( ( ( ( <beweg>-pkond / 100 ) + 1 ) **
* * <beweg>-bcwhr.
* vg_enpv = enpv.
* enpv = vg_vp_aux.
* EXIT.
* ELSE.
* vg_vf =
* ( for_capfac-capfact ) ) - 1 ) * <beweg>-bnwhr.
* vg_enpv = enpv.
* enpv = vg_vp_aux.
* EXIT.
* ENDIF.
* ENDIF.
* ENDIF.
** Lógica 3
* vg_vf =
* ( ( ( ( ( for_capfac-capfact ** ( 1 / vg_nok ) ) - 1 ) *
* * <beweg>-bcwhr.
* vg_enpv = enpv.
* enpv = vg_vp_aux.
* EXIT.
* ENDIF.
* ENDIF.
** Lógica 4
* IF <beweg>-pkond = 0 AND <beweg>-soffset = 0.
* vg_enpv = enpv.
* enpv = vg_vp_aux.
* EXIT.
* ENDIF.
** Lógica 5
* <beweg>-pkond <> 0.
* vg_vf =
* vg_enpv = enpv.
* enpv = vg_vp_aux.
* EXIT.
* ENDIF.
* ENDIF.
vg_vf = <beweg>-bcwhr.
( <beweg>-CFKNZ = '0' OR
for_capfac-capfact = 1.
enpv = 0.
for_capfac-capfact = 0.
ELSE.
enpv = vg_vf / for_capfac-capfact.
ENDIF.
vg_enpv = enpv.
enpv = vg_vp_aux.
* ENDIF.
*&--------------------------------------------------------------------
-*
*&--------------------------------------------------------------------
-*
FORM f_update_beweg
USING
DATA:
vl_ridxrt = p_beweg-objnr+2.
SELECT *
UP TO 1 ROWS
FROM jbrdbbeweg
INTO el_beweg
ENDSELECT.
IF sy-subrc = 0.
el_beweg-bcwhr = vg_vf.
ENDIF.
ENDFORM. "f_update_beweg
*&--------------------------------------------------------------------
-*
*&--------------------------------------------------------------------
-*
* text
*---------------------------------------------------------------------
-*
* -->I_CURR text
* -->FCURR text
* -->TCURR text
* <--ENPV text
*---------------------------------------------------------------------
-*
USING fcurr
tcurr
CHANGING enpv.
DATA: rate LIKE vtvmdvcr-rate.
IF fcurr NE tcurr.
tcurr = tcurr.
IF sy-subrc <> 0.
enpv = 0.
EXIT.
ENDIF.
IF i_curr-rate < 0.
rate = -1 / i_curr-rate.
ELSE.
rate = i_curr-rate.
ENDIF.
ENDIF.
*&--------------------------------------------------------------------
-*
*&--------------------------------------------------------------------
-*
USING fcurr
tcurr
cenario
CHANGING enpv.
IF fcurr NE tcurr.
tcurr = tcurr.
IF sy-subrc <> 0.
enpv = 0.
EXIT.
ENDIF.
IF i_curr-rate < 0.
rate = -1 / i_curr-rate.
ELSE.
rate = i_curr-rate.
ENDIF.
SELECT SINGLE *
FROM vtvszcr
INTO wa
IF sy-subrc = 0.
rate = wa-bukurs.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. "f_conv_curr_cenario
*&--------------------------------------------------------------------
-*
*&--------------------------------------------------------------------
-*
*---------------------------------------------------------------------
-*
USING
p_curve
p_curveb
p_kurstg
p_methode
p_evaldate
p_tabix
p_enpv
p_currency
p_rate
p_curr_pos "VSI02+
vgform "VSI03+
v_type_of_rate. "VSI03+
*---------------------------------------------------------------------
-*
* Declarações Locais
*---------------------------------------------------------------------
-*
DATA:
END OF el_fluxo_caixa_fix,
END OF el_curvjuros,
BEGIN OF el_val_atual, " Largura Total: 46 Caracteres
END OF el_val_atual,
* I N Í C I O D A C O N S T R U Ç Ã O D O L O G
*
**********************************************************************
**
FROM i73gpa1
INTO vl_WYFCJ
IF vg_log_flg IS INITIAL.
vg_log_flg = 'X'.
*---------------------------------------------------------------------
-*
* Dds. Mercado
*---------------------------------------------------------------------
-*
* Linha vazia
----------------------------------------------------------
CLEAR tg_detail.
tg_detail-objnr = eg_beweg-objnr.
tg_detail-type = con_empty.
APPEND tg_detail.
* Linha azul
-----------------------------------------------------------
CLEAR tg_detail.
tg_detail-objnr = eg_beweg-objnr.
tg_detail-type = con_new.
APPEND tg_detail.
CLEAR tg_detail.
tg_detail-objnr = eg_beweg-objnr.
tg_detail-type = con_text.
APPEND tg_detail.
*---------------------------------------------------------------------
-*
*---------------------------------------------------------------------
-*
CLEAR tg_detail.
tg_detail-objnr = eg_beweg-objnr.
tg_detail-type = con_heading.
APPEND tg_detail.
* Curva 1
--------------------------------------------------------------
CLEAR jbd1t.
FROM jbd1t
INTO jbd1t-xzkart
CLEAR tg_detail.
tg_detail-objnr = eg_beweg-objnr.
tg_detail-type = con_list.
APPEND tg_detail.
* Curva 2
--------------------------------------------------------------
IF NOT p_curveb IS INITIAL.
CLEAR jbd1t.
FROM jbd1t
INTO jbd1t-xzkart
CLEAR tg_detail.
tg_detail-objnr = eg_beweg-objnr.
tg_detail-type = con_list.
APPEND tg_detail.
ENDIF.
*---------------------------------------------------------------------
-*
* Taxas de Câmbio
*---------------------------------------------------------------------
-*
* Linha vazia
----------------------------------------------------------
CLEAR tg_detail.
tg_detail-objnr = eg_beweg-objnr.
tg_detail-type = con_empty.
APPEND tg_detail.
CLEAR tg_detail.
tg_detail-objnr = eg_beweg-objnr.
tg_detail-type = con_heading.
APPEND tg_detail.
CLEAR tcurw.
FROM tcurw
INTO tcurw-curvw
* Taxa 1
--------------------------------------------------------------
CLEAR tg_detail.
tg_detail-objnr = eg_beweg-objnr.
tg_detail-type = con_list.
APPEND tg_detail.
* Taxa 2
--------------------------------------------------------------
CLEAR tg_detail.
tg_detail-objnr = eg_beweg-objnr.
tg_detail-type = con_list.
APPEND tg_detail.
* ENDIF.
* Linha vazia
----------------------------------------------------------
CLEAR tg_detail.
tg_detail-objnr = eg_beweg-objnr.
tg_detail-type = con_empty.
APPEND tg_detail.
* Linha azul
-----------------------------------------------------------
CLEAR tg_detail.
tg_detail-objnr = eg_beweg-objnr.
tg_detail-type = con_new.
APPEND tg_detail.
*---------------------------------------------------------------------
-*
* Avaliação
*---------------------------------------------------------------------
-*
CLEAR tg_detail.
tg_detail-objnr = eg_beweg-objnr.
tg_detail-type = con_text.
tg_detail-text = 'Avaliação'(005).
APPEND tg_detail.
CLEAR tg_detail.
tg_detail-objnr = eg_beweg-objnr.
tg_detail-type = con_heading.
IF p_methode = '100'.
ENDIF.
CLEAR tg_detail.
tg_detail-objnr = eg_beweg-objnr.
tg_detail-type = con_list.
APPEND tg_detail.
* Linha vazia
----------------------------------------------------------
CLEAR tg_detail.
tg_detail-objnr = eg_beweg-objnr.
tg_detail-type = con_empty.
APPEND tg_detail.
*---------------------------------------------------------------------
-*
* Flxs.caix.fix.:
*---------------------------------------------------------------------
-*
CLEAR tg_detail.
tg_detail-objnr = eg_beweg-objnr.
tg_detail-type = con_text.
tg_detail-text = 'Flxs.caix.fix.:'(009).
APPEND tg_detail.
*=====================================================================
=*
*=====================================================================
=*
CLEAR el_fluxo_caixa_fix.
CLEAR tg_detail.
tg_detail-type = con_cols.
tg_detail-width = 75.
tg_detail-keywidth = 20.
tg_detail-border = 'X'.
i_ref = el_fluxo_caixa_fix
CHANGING
c_text = tg_detail-text.
APPEND tg_detail.
CLEAR tg_detail.
tg_detail-type = con_heading.
tg_detail-width = 75.
tg_detail-keywidth = 20.
tg_detail-border = 'X'.
APPEND tg_detail.
*---------------------------------------------------------------------
--
* Registros da tabela
*---------------------------------------------------------------------
--
CLEAR el_fluxo_caixa_fix.
CLEAR tg_detail.
tg_detail-type = con_list.
tg_detail-width = 73.
tg_detail-keywidth = 10.
APPEND tg_detail.
*=====================================================================
=*
*=====================================================================
=*
* END-OF-PAGE
*=====================================================================
=*
* Linha vazia
----------------------------------------------------------
CLEAR tg_detail.
tg_detail-objnr = eg_beweg-objnr.
tg_detail-type = con_empty.
APPEND tg_detail.
LOOP AT tg_beweg.
IF sy-tabix = 1.
CLEAR tg_detail.
tg_detail-objnr = eg_beweg-objnr.
tg_detail-type = con_text.
IF tg_beweg-bcwhr < 0.
vl_neg_posit = 'negativ.'.
ELSE.
vl_neg_posit = 'positiv.'.
ENDIF.
CONCATENATE
vl_neg_posit
APPEND tg_detail.
* CurvJuros: ...
-------------------------------------------------------
CLEAR tg_detail.
tg_detail-objnr = eg_beweg-objnr.
tg_detail-type = con_text.
ELSE.
vl_neg_posit = p_curve.
ENDIF.
CONCATENATE
'CurvJuros:'(019)
vl_data
* Linha vazia
----------------------------------------------------------
CLEAR tg_detail.
tg_detail-objnr = eg_beweg-objnr.
tg_detail-type = con_empty.
APPEND tg_detail.
*=====================================================================
=*
*=====================================================================
=*
CLEAR el_curvjuros.
CLEAR tg_detail.
tg_detail-type = con_cols.
tg_detail-width = 78.
tg_detail-keywidth = 10.
tg_detail-border = 'X'.
CALL FUNCTION 'RM_PROT_GEN_STRING'
EXPORTING
i_ref = el_curvjuros
CHANGING
c_text = tg_detail-text.
APPEND tg_detail.
CLEAR tg_detail.
tg_detail-type = con_heading.
tg_detail-width = 78.
* tg_detail-keywidth = 10.
tg_detail-border = 'X'.
APPEND tg_detail.
ENDIF.
*---------------------------------------------------------------------
--
* Registros da tabela
*---------------------------------------------------------------------
--
CLEAR el_curvjuros.
*
WRITE tg_beweg-bcwhr TO vl_valor.
IF vl_WYFCJ = '0' OR
"VSI02+
( ( vgform = '041' OR
"VSI03+
tg_beweg-scwhr NE 'BRL' ).
"VSI03+
vl_14d =
vl_14d =
ENDIF.
ELSE.
vl_14d = 0.
ENDIF.
ELSE.
tg_beweg-fatded = 0.
ENDIF.
*** p_curr_pos
"VSI02+
EXPORTING "VSI02+
IMPORTING
IF SY-SUBRC <> 0.
CLEAR tg_detail.
tg_detail-type = con_list.
tg_detail-width = 78.
APPEND tg_detail.
*=====================================================================
=*
*=====================================================================
=*
AT LAST.
DO 2 TIMES.
* Linha vazia
----------------------------------------------------------
CLEAR tg_detail.
tg_detail-objnr = eg_beweg-objnr.
tg_detail-type = con_empty.
APPEND tg_detail.
IF sy-index = 2.
CLEAR tg_detail.
tg_detail-objnr = eg_beweg-objnr.
tg_detail-type = con_text.
tg_detail-text =
APPEND tg_detail.
ENDIF.
*=====================================================================
=*
*=====================================================================
=*
CLEAR el_val_atual.
el_val_atual-c13 = 'VAL'(025).
el_val_atual-c14 = 'Moeda'(016).
el_val_atual-c15 = 'T/C'(026).
CLEAR tg_detail.
tg_detail-type = con_cols.
tg_detail-width = 49.
tg_detail-border = 'X'.
EXPORTING
i_ref = el_val_atual
CHANGING
c_text = tg_detail-text.
APPEND tg_detail.
CLEAR tg_detail.
tg_detail-type = con_heading.
tg_detail-width = 49.
tg_detail-border = 'X'.
APPEND tg_detail.
*---------------------------------------------------------------------
--
* Registros da tabela
*---------------------------------------------------------------------
--
CLEAR el_val_atual.
el_val_atual-c13 = vl_valor.
EXPORTING "VSI02+
* CLIENT = SY-MANDT
* READ_TCURR = 'X'
IMPORTING
* FOREIGN_FACTOR =
* LOCAL_FACTOR =
* EXCHANGE_RATEX =
* FIXED_RATE =
* DERIVED_RATE_TYPE =
* EXCEPTIONS
* NO_RATE_FOUND = 1
* OVERFLOW = 2
* NO_FACTORS_FOUND = 3
* NO_SPREAD_FOUND = 4
* DERIVED_2_TIMES = 5
* OTHERS = 6
IF SY-SUBRC <> 0.
STOP.
ENDIF.
*** USING
"VSI02-
*** CHANGING
"VSI02-
*** vl_taxa.
"VSI02-
el_val_atual-c16 = vl_valor.
CLEAR tg_detail.
tg_detail-type = con_sum.
tg_detail-width = 49.
APPEND tg_detail.
*=====================================================================
=*
*=====================================================================
=*
ENDDO.
ENDAT.
ENDLOOP.
* Linha vazia
----------------------------------------------------------
CLEAR tg_detail.
tg_detail-objnr = eg_beweg-objnr.
tg_detail-type = con_empty.
APPEND tg_detail.
ENDIF.
ENDFORM. "f_construir_log
****&-----------------------------------------------------------------
----*
****&-----------------------------------------------------------------
----*
*** USING
*** CHANGING
*** p_taxa.
***
***
*** ELSE.
***
***
*** EXPORTING
*** IMPORTING
***
*** IF sy-subrc = 0.
*** ENDIF.
***
*** ENDIF.
***
FUNCTION zfctp_forward_rates.
*"----------------------------------------------------------------------
*"*"Interface local:
*" IMPORTING
*" EXPORTING
*" TABLES
*" EXCEPTIONS
*" ERROR_FOUND
*"----------------------------------------------------------------------
* beziehen, untereinander an
LOOP AT request.
IF ( request-curvetype NE curve_def-szkart )
OR ( request-currency NE curve_def-wwaer ) .
EXPORTING
konddatum = valuedate
kurvenart = request-curvetype
waehrung = request-currency
zurueck_suchen = 1
IMPORTING
e_jbd14 = curve_def
TABLES
e_jbd11 = curve_data
EXCEPTIONS
not_found =1
OTHERS = 2.
IF sy-subrc <> 0.
valuetext = text-m02.
EXIT.
ENDIF.
ENDIF.
EXPORTING
i_szbmeth = curve_def-szbmeth
IMPORTING
e_stgmeth = v_stgmeth.
* Calculate the work days between valuation date and date end
* transaction using calendar CF
EXPORTING
i_datum_von = request-valuedate
i_datum_bis = request-griddate
i_kz_ult_bis = 'X'
i_stgmeth = v_stgmeth
i_szbmeth = curve_def-szbmeth
i_skalid = curve_def-skalid
IMPORTING
e_tage = nok.
e_nok = nok.
DATA:
cf LIKE request-capfact,
* Table Index
CLEAR: cf,
nfr,
nto,
ffr,
fto,
v_tabix,
v_meth,
v_WYFCJ,
v_nok.
IF curve_def-szbmeth = '2'.
v_meth = '360'.
v_meth = '365'.
ELSE.
v_meth = '252'.
ENDIF.
e_meth = v_meth.
FROM i73gpa1
INTO v_WYFCJ
WHERE objnr = request-objnr.
""break br3ros.
* v_nok = nok + 1.
v_nok = nok.
v_tabix = sy-tabix.
EXIT.
ENDLOOP.
v_subrc = sy-subrc.
IF sy-subrc <> 0.
valuetext = text-m01.
EXIT.
ENDIF.
ELSE.
v_tabix = sy-tabix.
EXIT.
ENDLOOP.
v_subrc = sy-subrc.
ENDIF.
DATA:
IF v_subrc <> 0.
vl_extrapolacao_flg = 'X'.
ENDIF.
IF vl_extrapolacao_flg IS INITIAL.
valuetext = text-m01.
EXIT.
ENDIF.
ELSE.
ENDIF.
* break br3ros.
vl_taxa = curve_data-ifr.
IF v_tabix LT 2.
valuetext = text-m02.
EXIT.
ENDIF.
IF curve_def-szbmeth = 'A'.
IF curve_data-ntage GT '504'.
nto = curve_data-ntage.
v_tabix = v_tabix - 1.
IF v_tabix LT 1.
v_tabix = 1.
ENDIF.
READ TABLE curve_data INDEX v_tabix.
nfr = curve_data-ntage.
- 1 ) * 100 ).
ELSE.
* nto = curve_data-ntage - 1.
nto = curve_data-ntage.
v_tabix = v_tabix - 1.
IF v_tabix LT 1.
v_tabix = 1.
ENDIF.
* nfr = curve_data-ntage - 1.
nfr = curve_data-ntage.
- 1 ) * 100 ).
ENDIF.
ELSEIF v_WYFCJ = 0 OR "VSI02+
nto = curve_data-ntage.
v_tabix = v_tabix - 1.
IF v_tabix LT 1.
v_tabix = 1.
ENDIF.
nfr = curve_data-ntage.
* v_meth ) * 100 ).
nto = curve_data-ntage.
v_tabix = v_tabix - 1.
IF v_tabix LT 1.
v_tabix = 1.
ENDIF.
nfr = curve_data-ntage.
1 ) * 100 ).
ENDIF.
request-griddays = nok.
request-capfact = cf.
MODIFY request.
ELSE.
* fazer "interpolacao".
"break-point.
IF curve_def-szbmeth = 'A'.
* nto = curve_data-ntage - 1.
nto = curve_data-ntage.
ELSE.
nto = curve_data-ntage.
ENDIF.
v_tabix = v_tabix - 1.
nto = curve_data-ntage.
v_tabix = v_tabix - 1.
nto = curve_data-ntage.
v_tabix = v_tabix - 1.
ENDIF.
* Penultimo dia
IF nok = 1.
cf = fto.
ELSE.
if nok = 0.
cf = 1.
else.
* teste rodrigo
if v_tabix = 0.
v_tabix = 1.
endif.
IF sy-subrc EQ 0.
IF curve_def-szbmeth = 'A'.
IF curve_data-ntage = v_nok.
v_meth ) ).
ELSE.
* nfr = curve_data-ntage - 1.
nfr = curve_data-ntage.
) ).
ENDIF.
request-griddays = nok.
request-capfact = cf.
MODIFY request.
CONTINUE.
ELSE.
IF curve_data-ntage = nok.
IF v_WYFCJ = 0 OR "VSI02+
1 ).
ELSE.
v_meth ) ).
ENDIF.
request-griddays = nok.
request-capfact = cf.
MODIFY request.
CONTINUE.
ENDIF.
ENDIF.
ENDIF.
IF sy-subrc EQ 0.
IF v_WYFCJ = 0 OR "VSI02+
nfr = curve_data-ntage.
nfr = curve_data-ntage.
).
ELSE.
valuetext = text-m02.
EXIT.
ENDIF.
ENDIF.
endif.
ENDIF.
request-griddays = nok.
request-capfact = cf.
MODIFY request.
ENDLOOP.
ENDFUNCTION.---------------------------------------------------------------------------------------------------------
---------------------