Módulo: DOC. EXPORTAÇÃO
Funcionalidade: Relatórios
Data/Hora da Publicação: 30/10/2007 00:00:00
Data/Hora Última Alteração: 22/02/2011 11:41:48
Descrição da Nota: CONVERSAO DE MONTANTE E MELHORIA DE PERFORMANCE RELATORIO KPI
Sintoma
Ausência de conversão de montante na coluna "Valor Remessa em Dólar".
Solução
Conversão de montante nos itens de remessa.
7.0
Produto:
Nota
Descrição
Informações Complementares
----------------------------------------------------------------------------------------------------
Nota Número 05117 Data: 30/10/2007 Hora: 17:12:31
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Nota Número : 05117
Categoria : Melhoria
Prioridade : Baixa
Versão PW.CE : 7.0
Pacote : 00003
Agrupamento : 00019
----------------------------------------------------------------------------------------------------
Referência às notas relacionadas:
Número - Ordem - Versão - Pacote - Descrição Breve
05055 - 00001 - 7.0 - 00003 - MELHORIA DE PERFORMANCE EM RELATÓRIO KPI
----------------------------------------------------------------------------------------------------
CONVERSAO DE MONTANTE E MELHORIA DE PERFORMANCE RELATORIO KPI
----------------------------------------------------------------------------------------------------
Palavras Chave:
CONVERSAO MONTANTE MELHORIA PERFORMANCE KPI
----------------------------------------------------------------------------------------------------
Objetos da nota:
FUNC /PWS/ZYCE_VLR_CONV_VERIF_MOEDA
REPS /PWS/LZYCEGF6UXX
REPS /PWS/ZYCER216
----------------------------------------------------------------------------------------------------
Modificações efetuadas em FUNC /PWS/ZYCE_VLR_CONV_VERIF_MOEDA
FUNCTION /PWS/ZYCE_VLR_CONV_VERIF_MOEDA.
*"----------------------------------------------------------------------
*"*"Interface local:
*" IMPORTING
*" VALUE(I_MONTANTE) LIKE /PWS/ZYCET002-VLME
*" VALUE(I_DEMOEDA) LIKE TCURR-FCURR
*" VALUE(I_PARAMOEDA) LIKE TCURR-TCURR
*" VALUE(I_CTMOEDA) LIKE TCURR-KURST
*" VALUE(I_DTBASE) LIKE SY-DATUM
*" EXPORTING
*" VALUE(E_MONTANTE) LIKE /PWS/ZYCET002-VLME
*" VALUE(E_TXC) LIKE TCURR-UKURS
*" VALUE(E_DEFATOR) LIKE TCURR-FFACT
*" VALUE(E_PARAFATOR) LIKE TCURR-TFACT
*" EXCEPTIONS
*" I_DEMOEDA_NAO_ENCONTRADO
*" I_PARAMOEDA_NAO_ENCONTRADO
*" I_CTMOEDA_NAO_ENCONTRADO
*" I_DTBASE_NAO_ENCONTRADA
*" TAXA_NAO_ENCONTRADA
*" FATOR_NAO_ENCONTRADO
*" I_MONTANTE_NAO_ENCONTRADO
*" TABELA_CATEG_NAO_CONFIGURADA
*" OTHERS
*"----------------------------------------------------------------------
TABLES tcurr.
DATA:
v_existe_conversao(1) TYPE c,
v_preco_base TYPE /pws/zycet002-vlme,
v_taxac1 TYPE /pws/zycee002-kurrf,
v_taxac2 TYPE /pws/zycee002-kurrf,
v_moeda TYPE waers,
v_defator1 TYPE tcurr-ffact,
v_parafator1 TYPE tcurr-tfact,
v_defator2 TYPE tcurr-ffact,
v_parafator2 TYPE tcurr-tfact.
PERFORM verifica_conversao_cadastrada
USING
i_ctmoeda
i_dtbase
i_demoeda
i_paramoeda
CHANGING
v_existe_conversao.
IF v_existe_conversao IS INITIAL.
v_moeda = 'BRL'.
PERFORM converte_taxa
USING
i_ctmoeda
i_dtbase
i_demoeda
v_moeda
i_montante
CHANGING
v_preco_base
v_taxac1
v_defator1
v_parafator1.
ELSE.
v_moeda = i_demoeda.
v_preco_base = i_montante.
v_taxac1 = 1.
v_defator1 = 1.
v_parafator1 = 1.
ENDIF.
PERFORM converte_taxa USING i_ctmoeda
i_dtbase
v_moeda
i_paramoeda
v_preco_base
CHANGING e_montante
v_taxac2
v_defator2
v_parafator2.
e_txc = v_taxac1 * v_taxac2.
e_defator = v_defator1 * v_defator2.
e_parafator = v_parafator1 * v_parafator2.
ENDFUNCTION.
FORM verifica_conversao_cadastrada
USING p_categ_moeda
p_data
p_moeda_de
p_moeda_para
CHANGING p_existe_conversao.
SELECT SINGLE * FROM tcurr
INTO tcurr
WHERE
kurst = p_categ_moeda AND
fcurr = p_moeda_de AND
tcurr = p_moeda_para AND
gdatu = p_data.
IF sy-subrc = 0.
p_existe_conversao = 'X'.
ELSE.
CLEAR p_existe_conversao.
ENDIF.
ENDFORM.
FORM converte_taxa USING value(p_categ) TYPE tcurr-kurst
value(p_datum) TYPE sy-datum
value(p_waewr) TYPE tcurr-fcurr
value(p_waedm) TYPE tcurr-tcurr
value(p_wrbtr)
CHANGING p_dmbtr
p_taxac TYPE /pws/zycee002-kurrf
p_defator TYPE tcurr-ffact
p_parafator TYPE tcurr-tfact.
DATA v_taxa TYPE /pws/zycet002-kurrf.
IF p_waewr EQ p_waedm OR
p_waewr IS INITIAL OR
p_waedm IS INITIAL.
p_dmbtr = p_wrbtr.
p_taxac = 1.
EXIT.
ENDIF.
CALL FUNCTION '/PWS/ZYGL_MONTANTE_CONVERTE'
EXPORTING
i_montante = p_wrbtr
i_demoeda = p_waewr
i_paramoeda = p_waedm
i_ctmoeda = p_categ
i_dtbase = p_datum
IMPORTING
e_montante = p_dmbtr
e_txc = v_taxa
e_defator = p_defator
e_parafator = p_parafator
EXCEPTIONS
i_demoeda_nao_encontrado = 1
i_paramoeda_nao_encontrado = 2
i_ctmoeda_nao_encontrado = 3
i_dtbase_nao_encontrada = 4
taxa_nao_encontrada = 5
fator_nao_encontrado = 6
i_montante_nao_encontrado = 7
tabela_categ_nao_configurada = 8
OTHERS = 9.
CASE sy-subrc.
WHEN 1.
RAISE i_demoeda_nao_encontrado.
WHEN 2.
RAISE i_paramoeda_nao_encontrado.
WHEN 3.
RAISE i_ctmoeda_nao_encontrado.
WHEN 4.
RAISE i_dtbase_nao_encontrada.
WHEN 5.
RAISE taxa_nao_encontrada.
WHEN 6.
RAISE fator_nao_encontrado.
WHEN 7.
RAISE i_montante_nao_encontrado.
WHEN 8.
RAISE tabela_categ_nao_configurada.
WHEN 9.
RAISE others.
ENDCASE.
p_taxac = ( v_taxa / p_defator ) * p_parafator.
ENDFORM. " converte_taxa
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/LZYCEGF6UXX (Inclusão automática)
...
INCLUDE /PWS/LZYCEGF6U06.
INCLUDE /PWS/LZYCEGF6U07.
INCLUDE /PWS/LZYCEGF6U08.
INCLUDE /PWS/LZYCEGF6U09.
INCLUDE /PWS/LZYCEGF6U10.
INCLUDE /PWS/LZYCEGF6U11.
INCLUDE /PWS/LZYCEGF6U12.
INCLUDE /PWS/LZYCEGF6U13.
INCLUDE /PWS/LZYCEGF6U14.
INCLUDE /PWS/LZYCEGF6U15.
* >> Início da inclusão:
INCLUDE /PWS/LZYCEGF6U16.
* << Fim da inclusão
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/ZYCER216
...
END OF itab_kpi_ordens.
DATA: BEGIN OF itab_carga OCCURS 0,
nrseqcg LIKE /pws/zycet053-nrseqcg,
nrseq LIKE /pws/zycet054-nrseq,
dtconsolida LIKE /pws/zycet053-dtconsolida,
END OF itab_carga.
DATA: BEGIN OF itab_zycet262 OCCURS 0,
nrseq LIKE /pws/zycet262-nrseq,
dtchegf LIKE /pws/zycet262-dtchegf,
END OF itab_zycet262.
* >> Início da inclusão:
DATA: BEGIN OF itab_zycbt011 OCCURS 1.
INCLUDE STRUCTURE /pws/zycbt011.
DATA: END OF itab_zycbt011.
* << Fim da inclusão
DATA: BEGIN OF itab_zycet020 OCCURS 0.
INCLUDE STRUCTURE /pws/zycet020.
DATA: END OF itab_zycet020.
DATA: BEGIN OF itab_zycet046 OCCURS 1.
INCLUDE STRUCTURE /pws/zycet046.
DATA: END OF itab_zycet046.
DATA: BEGIN OF itab_col_lips OCCURS 1.
INCLUDE STRUCTURE lips.
DATA: END OF itab_col_lips.
DATA: BEGIN OF itab_zycet271 OCCURS 0,
...
...
END OF itab_konv.
DATA: BEGIN OF itab_likp OCCURS 1.
INCLUDE STRUCTURE likp.
DATA: END OF itab_likp.
DATA: BEGIN OF itab_lips OCCURS 1.
INCLUDE STRUCTURE lips.
DATA: END OF itab_lips.
DATA: BEGIN OF itab_zycet156 OCCURS 1.
INCLUDE STRUCTURE /pws/zycet156.
DATA: END OF itab_zycet156 .
* >> Início da exclusão:
DATA: it_moedas TYPE t_moedas,
wa_moedas TYPE st_zycbt007.
* << Fim da exclusão
* >> Início da inclusão:
DATA: it_moedas TYPE t_moedas.
* << Fim da inclusão
DATA:
v_kwert_tot LIKE konv-kwert,
v_tabix LIKE sy-tabix.
CONSTANTS:
c_codmod_x LIKE /pws/zycet156-codmod VALUE 'X',
c_codigo_1 LIKE /pws/zycet156-codigo VALUE '000001',
c_codigo_9 LIKE /pws/zycet156-codigo VALUE '000009',
c_rd LIKE /pws/zycet001-viatrans VALUE 'RD',
c_ma LIKE /pws/zycet001-viatrans VALUE 'MA',
c_ta LIKE /pws/zycet001-viatrans VALUE 'TA',
...
...
MOVE itab_zycet047-dtbl TO itab_kpi-dtbl.
MODIFY itab_kpi TRANSPORTING dtbl.
ENDIF.
ENDLOOP.
ENDFORM.
FORM day_attributes_get USING
data1 TYPE datum
data2 TYPE datum
dias TYPE num03
sinal TYPE char1.
* >> Início da exclusão: FORM DAY_ATTRIBUTES_GET
DATA: iday_attributes LIKE casdayattr OCCURS 1 WITH HEADER LINE.
* << Fim da exclusão
* >> Início da inclusão: FORM DAY_ATTRIBUTES_GET
STATICS:
v_data_de TYPE datum,
v_data_para TYPE datum,
iday_attributes TYPE casdayattr OCCURS 1 WITH HEADER LINE.
* << Fim da inclusão
* >> Início da exclusão: FORM DAY_ATTRIBUTES_GET
DATA: data_aux LIKE sy-datlo.
* << Fim da exclusão
* >> Início da inclusão: FORM DAY_ATTRIBUTES_GET
DATA:
data_aux TYPE sy-datlo,
v_atualiza(1) TYPE c.
* << Fim da inclusão
CHECK NOT data1 IS INITIAL.
CHECK NOT data2 IS INITIAL.
CLEAR data_aux.
IF data2 GT data1.
data_aux = data1.
data1 = data2.
data2 = data_aux.
sinal = '-'.
* >> Início da inclusão: FORM DAY_ATTRIBUTES_GET
ENDIF.
CLEAR v_atualiza.
IF v_data_de IS INITIAL.
v_data_de = data2.
v_atualiza = 'X'.
ENDIF.
IF v_data_para IS INITIAL.
v_data_para = data1.
v_atualiza = 'X'.
ENDIF.
IF data2 < v_data_de.
v_data_de = data2.
v_atualiza = 'X'.
ENDIF.
IF data1 > v_data_para.
v_data_para = data1.
v_atualiza = 'X'.
* << Fim da inclusão
ENDIF.
* >> Início da inclusão: FORM DAY_ATTRIBUTES_GET
IF NOT v_atualiza IS INITIAL.
* << Fim da inclusão
CALL FUNCTION 'DAY_ATTRIBUTES_GET'
EXPORTING
holiday_calendar = 'BR'
* >> Início da exclusão: FORM DAY_ATTRIBUTES_GET
date_from = data2
date_to = data1
* << Fim da exclusão
* >> Início da inclusão: FORM DAY_ATTRIBUTES_GET
date_from = v_data_de
date_to = v_data_para
* << Fim da inclusão
language = sy-langu
TABLES
day_attributes = iday_attributes
EXCEPTIONS
OTHERS = 5.
* >> Início da inclusão: FORM DAY_ATTRIBUTES_GET
ENDIF.
* << Fim da inclusão
IF sy-subrc EQ 0.
* >> Início da exclusão: FORM DAY_ATTRIBUTES_GET
LOOP AT iday_attributes WHERE holiday = space AND
( weekday = '1' OR
weekday = '2' OR
weekday = '3' OR
weekday = '4' OR
weekday = '5' ).
* << Fim da exclusão
* >> Início da inclusão: FORM DAY_ATTRIBUTES_GET
LOOP AT iday_attributes WHERE holiday = space AND
( weekday = '1' OR
weekday = '2' OR
weekday = '3' OR
weekday = '4' OR
weekday = '5' ) AND
( date LE data1 AND
date GE data2 ).
* << Fim da inclusão
dias = dias + 1.
ENDLOOP.
dias = dias - 1.
IF NOT data_aux IS INITIAL.
data2 = data1.
data1 = data_aux.
ENDIF.
IF dias IS INITIAL.
dias = 1.
ENDIF.
...
...
v_campo = feld.
GET CURSOR FIELD v_campo VALUE itab_kpi-nrseq.
EXPORT v_valor TO MEMORY ID '/PWS/ZYCEP001'.
SET PARAMETER ID '/PWS/ZYCEP001' FIELD v_valor.
CALL TRANSACTION '/PWS/ZYCE003_E' AND SKIP FIRST SCREEN.
CLEAR feld.
ENDIF.
ENDCASE.
ENDFORM.
FORM select_embarques_itens.
* >> Início da inclusão: FORM SELECT_EMBARQUES_ITENS
DATA:
v_taxa TYPE tcurr-ukurs,
v_defator TYPE tcurr-ffact,
v_parafator TYPE tcurr-tfact,
wa_moedas TYPE st_zycbt007.
* << Fim da inclusão
CLEAR: itab_embarques, itab_kpi.
FREE : itab_embarques, itab_kpi.
SELECT a~nrseq
a~bukrs
a~dtaverb
a~dtemb
a~dteta
a~dtprev
a~viatrans
a~dtcruze
...
...
itab_kpi-viatrans = itab_embarques-viatrans.
itab_kpi-dtenvcamb = itab_embarques-dtenvcamb.
itab_kpi-vbeln_va = itab_embarques-vbeln_va.
itab_kpi-vbeln_vf = itab_embarques-vbeln_vf.
itab_kpi-vbeln_vl = itab_embarques-vbeln_vl.
itab_kpi-auart = itab_embarques-auart.
itab_kpi-waers = itab_embarques-waers.
itab_kpi-inco1 = itab_embarques-inco1.
itab_kpi-kurrf = itab_embarques-kurrf.
itab_kpi-land1 = itab_embarques-land1.
* >> Início da exclusão: FORM SELECT_EMBARQUES_ITENS
itab_kpi-vlme = itab_embarques-vlme.
* << Fim da exclusão
itab_kpi-totfatcom = itab_embarques-vlemb.
itab_kpi-vlme_f = itab_embarques-vlagente_r.
* >> Início da inclusão: FORM SELECT_EMBARQUES_ITENS
READ TABLE it_moedas INTO wa_moedas WITH KEY
bukrs = itab_embarques-bukrs.
IF itab_embarques-waers NE wa_moedas-waersa AND
NOT itab_embarques-dtaverb IS INITIAL.
READ TABLE itab_zycbt011 WITH KEY
bukrs = itab_embarques-bukrs.
PERFORM recupera_taxa_conversao
USING
itab_embarques-waers
wa_moedas-waersa
itab_zycbt011-ctmoed
itab_embarques-dtaverb
CHANGING
v_defator
v_parafator
v_taxa.
IF NOT v_defator IS INITIAL.
itab_kpi-vlme =
itab_embarques-vlme *
( ( v_taxa / v_defator ) * v_parafator ).
ENDIF.
ELSE.
IF itab_embarques-waers = wa_moedas-waersa.
itab_kpi-vlme = itab_embarques-vlme.
ENDIF.
ENDIF.
* << Fim da inclusão
IF itab_embarques-viatrans EQ c_rd.
itab_kpi-dtcruze = itab_embarques-dtcruze.
ELSE.
CLEAR itab_kpi-dtcruze.
ENDIF.
COLLECT itab_kpi.
CLEAR itab_kpi.
CALL FUNCTION 'K_PROGRESS_INDICATOR_PERCENT'
EXPORTING
i_processed = sy-tabix
...
...
CLEAR:
v_totfatcom,
v_vlme_f.
ENDAT.
ENDLOOP.
ENDFORM.
FORM select_parametros.
SELECT bukrs waersa
FROM /pws/zycbt007
INTO TABLE it_moedas.
* >> Início da inclusão: FORM SELECT_PARAMETROS
SELECT * FROM /pws/zycbt011
INTO TABLE itab_zycbt011
WHERE codeven = '001' AND
codmod = 'X'.
* << Fim da inclusão
ENDFORM.
* >> Início da inclusão:
FORM recupera_taxa_conversao
USING
p_demoeda
p_paramoeda
p_categ_moeda
p_data_base
CHANGING
p_defator
p_parafator
p_taxa.
TYPES:
BEGIN OF t_moeda,
demoeda TYPE tcurr-fcurr,
paramoeda TYPE tcurr-tcurr,
categ_moeda TYPE tcurr-kurst,
data_base TYPE sy-datum,
taxa TYPE tcurr-ukurs,
defator TYPE tcurr-ffact,
parafator TYPE tcurr-tfact,
END OF t_moeda.
STATICS:
itab_moedas TYPE HASHED TABLE OF t_moeda WITH UNIQUE KEY
demoeda paramoeda categ_moeda data_base.
DATA wa_moeda TYPE t_moeda.
READ TABLE itab_moedas INTO wa_moeda WITH TABLE KEY
demoeda = p_demoeda
paramoeda = p_paramoeda
categ_moeda = p_categ_moeda
data_base = p_data_base.
IF sy-subrc = 0.
p_defator = wa_moeda-defator.
p_parafator = wa_moeda-parafator.
p_taxa = wa_moeda-taxa.
ELSE.
CALL FUNCTION '/PWS/ZYCE_VLR_CONV_VERIF_MOEDA'
EXPORTING
i_montante = 1
i_demoeda = p_demoeda
i_paramoeda = p_paramoeda
i_ctmoeda = p_categ_moeda
i_dtbase = p_data_base
IMPORTING
e_txc = p_taxa
e_defator = p_defator
e_parafator = p_parafator
EXCEPTIONS
i_demoeda_nao_encontrado = 1
i_paramoeda_nao_encontrado = 2
i_ctmoeda_nao_encontrado = 3
i_dtbase_nao_encontrada = 4
taxa_nao_encontrada = 5
fator_nao_encontrado = 6
i_montante_nao_encontrado = 7
tabela_categ_nao_configurada = 8
OTHERS = 9.
IF sy-subrc = 0.
wa_moeda-demoeda = p_demoeda.
wa_moeda-paramoeda = p_paramoeda.
wa_moeda-categ_moeda = p_categ_moeda.
wa_moeda-data_base = p_data_base.
wa_moeda-taxa = p_taxa.
wa_moeda-defator = p_defator.
wa_moeda-parafator = p_parafator.
INSERT wa_moeda INTO TABLE itab_moedas.
ELSE.
CLEAR:
p_defator,
p_parafator,
p_taxa.
ENDIF.
ENDIF.
ENDFORM.
* << Fim da inclusão