CE PLUS - Nota 004385

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

Versões Tratadas

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.

...