Módulo: CÂMBIO EXPORTAÇÃO
Funcionalidade: Relatórios
Data/Hora da Publicação: 09/08/2007 00:00:00
Data/Hora Última Alteração: 10/03/2010 15:56:49
Descrição da Nota: PERFORMANCE NO RELATÓRIO DE CONTRATOS
Sintoma
Performance do Relatório de Contratos. O tempo de execução sem nenhum critério de seleção chega a 20
minutos.
Solução
Dado SORT nas tabelas e mudado algumas regras de busca. Melhora da Performace
7.0
Informações Complementares
----------------------------------------------------------------------------------------------------
Nota Número 04385 Data: 09/08/2007 Hora: 16:43:12
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Nota Número : 04385
Categoria : Melhoria
Prioridade : Média
Versão PW.CE : 7.0
Pacote : 00002
Agrupamento : 00007
----------------------------------------------------------------------------------------------------
Referência às notas relacionadas:
Número - Ordem - Descrição Breve
----------------------------------------------------------------------------------------------------
PERFORMANCE NO RELATÓRIO DE CONTRATOS
----------------------------------------------------------------------------------------------------
Palavras Chave:
PERFORMANCE, CONTRATOS, RELATÓRIO
----------------------------------------------------------------------------------------------------
Objetos da nota:
REPS /PWS/ZYCBR010
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/ZYCBR010
...
SELECTION-SCREEN BEGIN OF BLOCK bl_5 WITH FRAME TITLE text-084.
PARAMETER: s_txcamb LIKE tcurr-ukurs.
PARAMETERS: p_compra RADIOBUTTON GROUP rg1,
p_venda RADIOBUTTON GROUP rg1,
p_media RADIOBUTTON GROUP rg1.
SELECTION-SCREEN END OF BLOCK bl_5.
SELECTION-SCREEN BEGIN OF BLOCK bl_3 WITH FRAME TITLE text-035.
PARAMETERS: p_zebra AS CHECKBOX,
p_otim AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK bl_3.
* >> Início da exclusão:
SELECTION-SCREEN BEGIN OF BLOCK bl_4 WITH FRAME.
PARAMETERS: p_alv AS CHECKBOX USER-COMMAND p_alv.
SELECTION-SCREEN END OF BLOCK bl_4.
* << Fim da exclusão
SELECTION-SCREEN BEGIN OF BLOCK variant WITH FRAME TITLE text-057.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (31) text-058 FOR FIELD p_varian
MODIF ID var.
PARAMETERS p_varian LIKE disvariant-variant MODIF ID var.
SELECTION-SCREEN COMMENT 47(40) p_vartxt FOR FIELD p_varian
MODIF ID var.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK variant.
* >> Início da exclusão:
AT SELECTION-SCREEN OUTPUT.
CLEAR p_varian.
IF p_alv = 'X'.
LOOP AT SCREEN.
IF screen-name EQ 'P_ZEBRA' OR screen-name EQ 'P_OTIM' OR
screen-name EQ 'P_VARIAN'.
CLEAR p_varian.
p_zebra = ' '.
p_otim = ' '.
screen-input = '0'.
CLEAR p_vartxt.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
* << Fim da exclusão
PERFORM exclui_campos.
INITIALIZATION.
CLEAR g_variant.
g_variant-report = sy-repid.
g_variant-username = sy-uname.
AT SELECTION-SCREEN.
CLEAR p_varian.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_varian.
PERFORM f4_for_variant.
TOP-OF-PAGE.
...
...
ENDIF.
END-OF-PAGE.
IF v_impr NE 'X'.
ULINE AT /sy-linsz.
ELSE.
ULINE AT /(v_tamr).
ENDIF.
START-OF-SELECTION.
PERFORM get_parametros.
PERFORM processar_dados.
* >> Início da exclusão:
IF p_alv IS INITIAL.
* << Fim da exclusão
v_repid = sy-repid.
PERFORM e04_comment_build USING gt_list_top_of_page[].
PERFORM f_monta_final.
PERFORM f_fieldcat_fill.
* >> Início da exclusão:
ENDIF.
* << Fim da exclusão
IF itab_relat[] IS INITIAL.
MESSAGE i222.
ELSE.
* >> Início da exclusão:
IF NOT p_alv IS INITIAL.
PERFORM imprime_relatorio.
PERFORM imprime_relat_erro.
ELSE.
* << Fim da exclusão
PERFORM imprime_relatorio_alv.
* >> Início da exclusão:
ENDIF.
* << Fim da exclusão
ENDIF.
END-OF-SELECTION.
* >> Início da exclusão:
IF NOT p_alv IS INITIAL.
SET PF-STATUS 'SELL010'.
ENDIF.
* << Fim da exclusão
FREE:
itab_zycbt001,
itab_zycbt002,
itab_relat,
itab_relat2,
itab_erro.
AT USER-COMMAND.
FORM cabecalho.
DATA:
v_datalow(10) TYPE c,
...
...
WHERE nrseqc IN nrseqc
AND nrcontr IN nrcontr
AND tpcontr IN tpcontr
AND bukrs IN bukrs
AND dtcontr IN dtcontr
AND bcofinan IN bcofinan
AND bconegoc IN bconegoc
AND dtcred IN dtcred
AND dtdesem IN dtdesem
AND dtentr IN dtentr.
* >> Início da inclusão: FORM PROCESSAR_DADOS
SORT itab_zycbt001 BY nrseqc.
* << Fim da inclusão
IF NOT itab_zycbt001[] IS INITIAL.
SELECT *
FROM /pws/zycbt003
INTO TABLE itab_zycbt003
FOR ALL ENTRIES IN itab_zycbt001
WHERE nrseqc = itab_zycbt001-nrseqc AND
tppror = 'E'.
* >> Início da inclusão: FORM PROCESSAR_DADOS
SORT itab_zycbt003 BY nrseqc tppror dtpror.
* << Fim da inclusão
IF s_posic IS INITIAL.
s_posic = sy-datum.
ENDIF.
IF s_flag IS INITIAL.
s_flag = 'O'.
ENDIF.
CASE s_flag.
WHEN 'D'.
DELETE itab_zycbt001 WHERE dtdesem > s_posic
OR dtdesem IS initial.
...
...
READ TABLE itab_zycbt001 INDEX sy-tabix.
SELECT nrseqc dtvincul nrcontr vlvinc status
nrinvoic nrparcf gsberf
tpdesp waers_c waers parid nrparc dtincl dtvencto
FROM /pws/zycbt005
INTO TABLE itab_zycbt005
FOR ALL ENTRIES IN itab_zycbt001
WHERE dtvincul LE s_posic
AND nrseqc = itab_zycbt001-nrseqc
AND ( status = 'C' OR status = '1' ).
* >> Início da inclusão: FORM PROCESSAR_DADOS
SORT itab_zycbt005 BY nrseqc tpdesp nrparc dtincl nrinvoic nrparcf
gsberf dtvincul dtvencto.
* << Fim da inclusão
SELECT nrseqc dtpagto nrcontr vlme status
nrinvoic nrparcf gsberf
tpdesp nrparc dtincl dtvincul dtvencto
FROM /pws/zycbt006
INTO TABLE itab_zycbt006
FOR ALL ENTRIES IN itab_zycbt001
WHERE dtpagto LE s_posic
AND nrseqc = itab_zycbt001-nrseqc
AND ( status = 'C' OR status = '1' ).
* >> Início da inclusão: FORM PROCESSAR_DADOS
SORT itab_zycbt006 BY nrseqc tpdesp nrparc dtincl nrinvoic nrparcf
gsberf dtvincul dtvencto dtpagto.
* << Fim da inclusão
SELECT tpcontr txtdesc
FROM /pws/zycbt016
INTO TABLE itab_zycbt016
FOR ALL ENTRIES IN itab_zycbt001
WHERE tpcontr = itab_zycbt001-tpcontr.
* >> Início da inclusão: FORM PROCESSAR_DADOS
SORT itab_zycbt016 BY tpcontr.
* << Fim da inclusão
SELECT nrseqc nrparc tpparc
dtinicio dtfinal txjfixa
txjvar vlme slvinc
FROM /pws/zycbt002
INTO TABLE itab_zycbt002
FOR ALL ENTRIES IN itab_zycbt001
WHERE nrseqc EQ itab_zycbt001-nrseqc.
* >> Início da inclusão: FORM PROCESSAR_DADOS
SORT itab_zycbt002 BY nrseqc nrparc tpparc.
* << Fim da inclusão
SELECT nrseqc tpdesp nrparc
dtincl waers vlme dtpagto
FROM /pws/zycbt004
INTO TABLE itab_zycbt004
FOR ALL ENTRIES IN itab_zycbt001
WHERE nrseqc EQ itab_zycbt001-nrseqc
AND tpdesp LIKE 'J%'.
* >> Início da inclusão: FORM PROCESSAR_DADOS
SORT itab_zycbt004 BY nrseqc tpdesp nrparc dtincl.
* << Fim da inclusão
SELECT nrseqc nrinvoic nrparcf gsberf vldev
FROM /pws/zycbt050
INTO TABLE itab_zycbt050
FOR ALL ENTRIES IN itab_zycbt001
WHERE nrseqc = itab_zycbt001-nrseqc
AND dtdevol LE s_posic.
* >> Início da inclusão: FORM PROCESSAR_DADOS
SORT itab_zycbt050 BY nrseqc nrinvoic nrparcf gsberf.
* << Fim da inclusão
SELECT nrseqc nrinvoic nrparcf gsberf vlme
FROM /pws/zycbt051
INTO TABLE itab_zycbt051
FOR ALL ENTRIES IN itab_zycbt001
WHERE nrseqc = itab_zycbt001-nrseqc
AND dtreceb LE s_posic
AND tpdev = 'RP'.
* >> Início da inclusão: FORM PROCESSAR_DADOS
SORT itab_zycbt051 BY nrseqc nrinvoic nrparcf gsberf.
* << Fim da inclusão
LOOP AT itab_zycbt001.
CLEAR itab_relat.
LOOP AT itab_zycbt003 WHERE nrseqc = itab_zycbt001-nrseqc.
IF itab_zycbt001-dtentr LE itab_zycbt003-dtpror.
itab_zycbt001-dtentr = itab_zycbt003-dtpror.
ENDIF.
ENDLOOP.
LOOP AT itab_zycbt016 WHERE tpcontr = itab_zycbt001-tpcontr.
MOVE:
itab_zycbt016-txtdesc TO itab_relat-txtdesc.
...
...
WHERE lifnr = itab_relat-bconegoc
OR lifnr = itab_relat-bcofinan.
ENDIF.
LOOP AT itab_relat.
v_tabix = sy-tabix.
READ TABLE itab_zycbt001 WITH KEY nrseqc = itab_relat-nrseqc.
LOOP AT itab_zycbt005 WHERE nrseqc = itab_relat-nrseqc.
v_vlvinc = v_vlvinc + itab_zycbt005-vlvinc.
ENDLOOP.
itab_relat-vlvinc = v_vlvinc.
* >> Início da exclusão: FORM PROCESSAR_DADOS
CLEAR v_vldev.
LOOP AT itab_zycbt050 WHERE nrseqc = itab_relat-nrseqc.
v_vldev = v_vldev + itab_zycbt050-vldev.
ENDLOOP.
CLEAR v_slpagar.
LOOP AT itab_zycbt006 WHERE nrseqc = itab_relat-nrseqc.
v_slpagar = v_slpagar + itab_zycbt006-vlme.
ENDLOOP.
IF s_txcamb <> ''.
itab_relat-slpagbr = itab_relat-slpagar * s_txcamb.
ELSE.
PERFORM calcula_valor_nacional.
ENDIF.
* << Fim da exclusão
v_slvinc = itab_zycbt001-vlme - v_vlvinc + v_vldev.
itab_relat-slvinc = v_slvinc - v_vldev.
MODIFY itab_relat INDEX v_tabix
TRANSPORTING vlvinc slvinc slpagar slpagbr.
CLEAR: v_slvinc, v_vlvinc, v_vldev.
IF NOT s_a_entr IS INITIAL.
IF itab_relat-slvinc IS INITIAL.
DELETE itab_relat WHERE nrseqc = itab_zycbt001-nrseqc.
ENDIF.
ENDIF.
* >> Início da exclusão: FORM PROCESSAR_DADOS
ENDLOOP.
LOOP AT itab_relat.
* << Fim da exclusão
CLEAR itab_bancos.
READ TABLE itab_bancos WITH KEY lifnr = itab_relat-bconegoc.
itab_relat-txtnegoc = itab_bancos-name1.
CLEAR itab_bancos.
READ TABLE itab_bancos WITH KEY lifnr = itab_relat-bcofinan.
itab_relat-txtfinan = itab_bancos-name1.
MODIFY itab_relat.
* >> Início da exclusão: FORM PROCESSAR_DADOS
ON CHANGE OF itab_relat-nrseqc.
itab_sumario_tp-tpcontr = itab_relat-tpcontr.
itab_sumario_tp-vlme = itab_relat-vlme.
itab_sumario_tp-waers = itab_relat-waers.
itab_sumario_tp-vlvinc = itab_relat-vlvinc.
itab_sumario_tp-vlcanc = itab_relat-vlcanc.
itab_sumario_tp-slvinc = itab_relat-slvinc.
itab_sumario_tp-slpagar = itab_relat-slpagar.
itab_sumario_tp-slpagbr = itab_relat-slpagbr.
COLLECT itab_sumario_tp.
ENDON.
itab_sumario_tpparc-nrseqc = itab_relat-nrseqc.
itab_sumario_tpparc-tpparc = itab_relat-tpparc.
itab_sumario_tpparc-vlusd = itab_relat-vlusd.
itab_sumario_tpparc-waers = itab_relat-waers.
itab_sumario_tp-vlvinc = itab_relat-vlvinc.
itab_sumario_tp-slpagar = itab_relat-slpagar.
itab_sumario_tp-slpagbr = itab_relat-slpagbr.
COLLECT itab_sumario_tpparc.
* << Fim da exclusão
ENDLOOP.
ENDIF.
SORT itab_sumario_tpparc BY nrseqc tpparc DESCENDING.
ENDFORM.
FORM converter_moeda USING p_devlme p_dewaers p_parawaers p_ctmoeda
p_dtbase CHANGING p_paravlme p_taxa.
CHECK NOT p_devlme IS INITIAL.
SELECT SINGLE * FROM /pws/zycbt009
WHERE codpadr EQ p_ctmoeda.
v_type = /pws/zycbt009-kurst.
...
...
screen-name EQ '%B063024_BLOCK_1000' OR
screen-name EQ '%B042017_BLOCK_1000' OR
screen-name EQ '%_P_ZEBRA_%_APP_%-TEXT' OR
screen-name EQ '%_P_OTIM_%_APP_%-TEXT' OR
screen-name EQ '%_P_ALV_%_APP_%-TEXT'.
screen-input = '0'.
screen-invisible = '1'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
* >> Início da exclusão: FORM EXCLUI_CAMPOS
MOVE 'X' TO p_alv.
* << Fim da exclusão
ENDIF.
ENDFORM.
FORM calcula_valor_nacional.
IF s_pagar NE space AND p_compra = 'X'.
v_type = 'G'.
ELSEIF s_pagar NE space AND p_venda = 'X'.
v_type = 'B'.
ELSEIF s_pagar NE space AND p_media = 'X'.
v_type = 'M'.
ENDIF.
...