CE PLUS - Nota 005439

Módulo: DRAWBACK

Funcionalidade: Composição

Data/Hora da Publicação: 12/12/2007 00:00:00

Data/Hora Última Alteração: 17/02/2011 15:18:24

Descrição da Nota: PERFORMANCE

Sintoma

O programa está demorando para buscar os dados.

 

 

Solução

Performance melhorada.

 

Versões Tratadas

7.0


Pré-Requisitos

Produto:

Nota

Descrição

DUMP TIME OUT NA SELEÇÃO DAS EXPORTAÇÕES

AJUSTE DE PERFORMANCE NA VINCULAÇÃO DAS DI¿S

Informações Complementares

----------------------------------------------------------------------------------------------------

Nota Número 05439 Data: 12/12/2007 Hora: 13:38:02

----------------------------------------------------------------------------------------------------

 

----------------------------------------------------------------------------------------------------

Nota Número              : 05439

Categoria                : Erro de Programa

Prioridade               : Média

Versão PW.CE             : 7.0

Pacote                   : 00004

Agrupamento              : 00026

----------------------------------------------------------------------------------------------------

Referência às notas relacionadas:

Número - Ordem - Versão - Pacote - Descrição Breve

 

05100  - 00001 - 7.0    - 00003  - DUMP TIME OUT NA SELEÇÃO DAS EXPORTAÇÕES

05384  - 00002 - 7.0    - 00003  - AJUSTE DE PERFORMANCE NA VINCULAÇÃO DAS DI¿S

----------------------------------------------------------------------------------------------------

PERFORMANCE

----------------------------------------------------------------------------------------------------

Palavras Chave:

PERFORMANCE COMPOSIÇÃO DE ISENÇÃO DRAWBACK

 

----------------------------------------------------------------------------------------------------

Objetos da nota:

REPS /PWS/MZYCI064F03

 

----------------------------------------------------------------------------------------------------

Modificações efetuadas em REPS /PWS/MZYCI064F03

 

...

                        matnr = itab_comp_vinc_final-codcomp.

      IF sy-subrc NE 0.

        itab_insumo_di-matnr = itab_comp_vinc_final-codcomp.

        APPEND itab_insumo_di.

      ENDIF.

    ENDIF.

  ENDLOOP.

  IF itab_insumo_di[] IS INITIAL.

    EXIT.

  ENDIF.

* >> Início da exclusão: FORM SELECIONA_DI3

  SORT itab_det_exp BY dtnf dtre.

* << Fim da exclusão

* >> Início da inclusão: FORM SELECIONA_DI3

  SORT itab_det_exp BY dtnf dtre nrseqre.

* << Fim da inclusão

  READ TABLE itab_det_exp INDEX 1.

  itab_det_exp-dtre = /pws/zycie258-dtpr.

  itab_det_exp-dtre(4) = itab_det_exp-dtre(4) - 2.

  v_pct = 50.

  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

       EXPORTING

            percentage = v_fixo

            text       = text-297.

  IF NOT itab_insumo_di[] IS INITIAL.

    REFRESH itab_sel_di.

...

 

...

               INNER JOIN /pws/zycit085 AS c

               ON b~nrseqdi EQ c~nrseqdi )

            INTO TABLE itab_sel_di

            FOR ALL ENTRIES IN itab_insumo_di

            WHERE a~matnr EQ itab_insumo_di-matnr

              AND c~dtreg >= itab_det_exp-dtre

              AND c~nrdi NE space.

  ENDIF.

  IF NOT itab_insumo_di[] IS INITIAL.

    SELECT * FROM /pws/zycit003 INTO TABLE itab_zycit003

* >> Início da exclusão: FORM SELECIONA_DI3

        FOR ALL ENTRIES IN itab_insumo_di

           WHERE

                 matnr      EQ itab_insumo_di-matnr.

* << Fim da exclusão

* >> Início da inclusão: FORM SELECIONA_DI3

        FOR ALL ENTRIES IN itab_sel_di

           WHERE nrseq EQ itab_sel_di-nrseq

             AND ebeln EQ itab_sel_di-ebeln

             AND ebelp EQ itab_sel_di-ebelp.

* << Fim da inclusão

  ENDIF.

  IF NOT itab_zycit003[] IS INITIAL.

    itab_zycit003_t2[] = itab_zycit003[].

    DELETE itab_zycit003_t2 WHERE nrseqd EQ space.

    SORT itab_zycit003_t2 BY nrseqd.

    DELETE ADJACENT DUPLICATES FROM itab_zycit003_t2 COMPARING nrseqd.

    IF NOT itab_zycit003_t2[] IS INITIAL.

      SELECT * FROM /pws/zycit244 INTO TABLE itab_zycit244

          FOR ALL ENTRIES IN itab_zycit003_t2

          WHERE nrseqd EQ itab_zycit003_t2-nrseqd

...

 

...

    ENDLOOP.

  ENDLOOP.

  REFRESH: itab_ekpo.

  itab_ekpo[] = itab_ekpo_sort[] .

  REFRESH itab_mess_un.

  SORT itab_det_exp BY dtre nrseqre.

  IF /pws/zycit321-it_ge EQ 'X'.

  ELSE.

  ENDIF.

  CLEAR: v_count .

* >> Início da inclusão: FORM SELECIONA_DI3

  REFRESH   itab_dis.

* << Fim da inclusão

  LOOP AT itab_zycit100_sort

                        .

    v_pct = 50.

    CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

         EXPORTING

              percentage = v_fixo

              text       = text-297.

    PERFORM monta_dis3.

  ENDLOOP.

  .

...

 

...

    LOOP AT itab_zycit244.

      DELETE itab_zycit279 WHERE nrseqd EQ itab_zycit244-nrseqd.

    ENDLOOP.

  ENDIF.

  LOOP AT itab_zycit279 WHERE grupo EQ space.

    READ TABLE itab_zycit433 WITH KEY matnr = itab_zycit279-matnr.

    itab_zycit279-grupo = itab_zycit433-grupo.

    MODIFY itab_zycit279 TRANSPORTING grupo

              WHERE matnr EQ itab_zycit279-matnr.

  ENDLOOP.

* >> Início da inclusão: FORM SELECIONA_DI

  SELECT * FROM /pws/zycit260 INTO TABLE itab_zycit260

         FOR ALL ENTRIES IN itab_zycit279

         WHERE docnum    = itab_zycit279-docnum

           AND ebeln     = itab_zycit279-ebeln

           AND ebelp     = itab_zycit279-ebelp.

* << Fim da inclusão

  LOOP AT itab_zycit279.

    v_pct = 80.

    CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

         EXPORTING

              percentage = v_fixo

              text       = text-297.

    PERFORM monta_di.

  ENDLOOP.

ENDFORM.

FORM verifica_exit USING    p_modulo

...

 

...

                                        * itab_mara-ntgew.

    itab_det_exp_final-brgew = itab_det_exp_final-qtd_iten

                                        * itab_mara-brgew.

    itab_det_exp_final-vlcif = ( itab_nota_c-netwr +

            itab_nota_c-netfre + itab_nota_c-netins )

            * ( itab_zycit373-qtd_apro / itab_zycit373-qtd_iten ).

    APPEND itab_det_exp_final.

  ENDLOOP.

ENDFORM.

FORM monta_dis3.

* >> Início da exclusão: FORM MONTA_DIS3

  REFRESH   itab_dis.

* << Fim da exclusão

  CLEAR itab_zycit085.

  READ TABLE itab_zycit085 WITH KEY

                             nrseqdi = itab_zycit100_sort-nrseqdi.

  IF  /pws/zycbt007-bukrs NE itab_zycit085-bukrs.

    SELECT SINGLE * FROM /pws/zycbt007

      WHERE bukrs EQ itab_zycit085-bukrs.

  ENDIF.

  READ TABLE itab_ekpo WITH KEY

                              ebeln = itab_zycit100_sort-ebeln

                              ebelp = itab_zycit100_sort-ebelp.

...

 

...

                                       itab_zycit085-dttax

                              CHANGING itab_dis-vlseg.

    itab_dis-vlfrete = itab_dis-vlfrete /

                            itab_zycit003-qtd_iten.

    itab_dis-vlseg   = itab_dis-vlseg /

                            itab_zycit003-qtd_iten.

    CHECK itab_dis-valor_u > 0.

    itab_dis-i_vlcif_me = itab_dis-valor_u.

    itab_dis-i_vlcif_mi =

           itab_dis-i_vlcif_me * itab_dis-i_txmoeda.

* >> Início da inclusão: FORM MONTA_DIS3

    READ TABLE itab_di_final WITH KEY

                                ebeln    = itab_di_final-ebeln

                                ebelp    = itab_di_final-ebelp

                                nrseqemb = itab_di_final-nrseqemb

                                docnum   = itab_di_final-docnum.

    IF sy-subrc NE 0.

* << Fim da inclusão

    LOOP AT itab_zycit260

                  WHERE

                        nrdi      = itab_zycit085-nrseqdi

                    AND nrseqemb  = itab_zycit100-nrseq

                    AND ebeln     = itab_ekpo-ebeln

                    AND ebelp     = itab_ekpo-ebelp.

      itab_dis-sdo_qtd =

              itab_dis-sdo_qtd - itab_zycit260-qtd_vinc.

    ENDLOOP.

* >> Início da inclusão: FORM MONTA_DIS3

    ELSE.

      itab_di_final-sdo_qtd = itab_dis-sdo_qtd.

    ENDIF.

* << Fim da inclusão

    IF itab_dis-sdo_qtd <= 0.

      CLEAR itab_dis.

      EXIT.

    ENDIF.

    CLEAR v_found.

    LOOP AT itab_zycit044 WHERE nrseq = itab_zycit001-nrseq

                            AND ebeln = itab_ekpo-ebeln

                            AND ebelp = itab_ekpo-ebelp.

      CLEAR itab_zycit043.

      READ TABLE itab_zycit043 WITH KEY

...

 

...

    itab_dis-valor_u = itab_zycit279-vltot /

                            itab_zycit279-qtd_ncm.

    itab_dis-vlfrete = itab_dis-vlfrete /

                            itab_zycit279-qtd_ncm.

    itab_dis-vlseg   = itab_dis-vlseg /

                            itab_zycit279-qtd_ncm.

    CHECK itab_dis-valor_u > 0.

    itab_dis-i_vlcif_me = itab_dis-valor_u.

    itab_dis-i_vlcif_mi =

           itab_dis-i_vlcif_me * itab_dis-i_txmoeda.

* >> Início da inclusão: FORM MONTA_DI

    READ TABLE itab_di_final WITH KEY

                                ebeln    = itab_di_final-ebeln

                                ebelp    = itab_di_final-ebelp

                                nrseqemb = itab_di_final-nrseqemb

                                docnum   = itab_di_final-docnum.

    IF sy-subrc NE 0.

* << Fim da inclusão

    LOOP AT itab_zycit260

                   WHERE

                        docnum    = itab_zycit279-docnum

                    AND ebeln     = itab_zycit279-ebeln

                    AND ebelp     = itab_zycit279-ebelp.

      itab_dis-sdo_qtd =

              itab_dis-sdo_qtd - itab_zycit260-qtd_vinc.

    ENDLOOP.

* >> Início da inclusão: FORM MONTA_DI

    ELSE.

      itab_dis-sdo_qtd = itab_di_final-sdo_qtd.

    ENDIF.

* << Fim da inclusão

    IF itab_dis-sdo_qtd <= 0.

      CLEAR itab_dis.

      EXIT.

    ENDIF.

    APPEND itab_dis.

  ENDIF.

ENDFORM.

FORM monta_nf.

  READ TABLE itab_di_final_aux WITH KEY

              nrseqre  = itab_comp_vinc_final-nrseqre

...

 

...

        itab_saida,

        itab_zycee085,

        it_log_erro3,

        itab_nota_c,

        itab_sel_vbfa,

        itab_vbfa,

        itab_vbfa_1.

ENDFORM.

FORM vincula_di .

  DATA: v_pct TYPE p.

* >> Início da exclusão: FORM VINCULA_DI

  DATA: BEGIN OF itab_taxa OCCURS 0.

  DATA: data TYPE datum,

        taxa TYPE /pws/zycit279-i_txmoeda.

  DATA: END OF itab_taxa.

* << Fim da exclusão

* >> Início da inclusão: FORM VINCULA_DI

  DATA: v_saida.

* << Fim da inclusão

  DESCRIBE TABLE itab_det_exp LINES v_lines.

  CLEAR: v_count .

  LOOP AT itab_det_exp.

* >> Início da inclusão: FORM VINCULA_DI

    CLEAR: v_saida.

    LOOP AT itab_di_final WHERE nrseqre  EQ itab_det_exp-nrseqre

                            AND nrseq    EQ itab_det_exp-nrseq

                            AND nrseqc   EQ itab_det_exp-nrseqc

                            AND vbeln_va EQ itab_det_exp-vbeln_va

                            AND vbeln_vf EQ itab_det_exp-vbeln_vf

                            AND posnr    EQ itab_det_exp-posnr.

      v_saida = 'X'.

      EXIT.

    ENDLOOP.

    IF v_saida EQ 'X'.

      CONTINUE.

    ENDIF.

* << Fim da inclusão

    v_pct = ( sy-tabix / v_lines ) * 100.

    IF v_pct < 1.

      v_pct = 1.

    ENDIF.

    CLEAR: v_percent.

    WRITE v_pct TO v_percent LEFT-JUSTIFIED NO-GAP.

    CONCATENATE text-302 '.' v_percent '%'

                  INTO v_percent SEPARATED BY space.

    LOOP AT itab_comp_vinc_final WHERE

                                codmat   = itab_det_exp-codmat

                            AND nrseqre  = itab_det_exp-nrseqre

                            AND nrseq    = itab_det_exp-nrseq

                            AND nrseqc   = itab_det_exp-nrseqc

                           AND vbeln_va = itab_det_exp-vbeln_va

                           AND vbeln_vf = itab_det_exp-vbeln_vf

                            AND posnr    = itab_det_exp-posnr.

* >> Início da inclusão: FORM VINCULA_DI

      IF /pws/zycit321-it_ge EQ 'X'.

* << Fim da inclusão

      READ TABLE itab_dis WITH KEY

                  grupo = itab_comp_vinc_final-grupo.

* >> Início da inclusão: FORM VINCULA_DI

      ELSE.

        READ TABLE itab_dis WITH KEY

                    codcomp = itab_comp_vinc_final-codcomp.

      ENDIF.

* << Fim da inclusão

      IF sy-subrc NE 0.

        DELETE itab_comp_vinc_final

...

 

...

      ENDIF.

      IF NOT itab_det_exp-dtre IS INITIAL.

        v_dtini = /pws/zycie258-dtpr.

        v_dtini(4) = v_dtini(4) - 2.

        v_dtfim = itab_det_exp-dtre.

      ELSE.

        v_dtini = /pws/zycie258-dtpr.

        v_dtini(4) = v_dtini(4) - 2.

        v_dtfim = itab_det_exp-dtnf.

      ENDIF.

* >> Início da inclusão: FORM VINCULA_DI

      IF /pws/zycit321-it_ge EQ 'X'.

* << Fim da inclusão

      LOOP AT itab_dis WHERE grupo EQ itab_comp_vinc_final-grupo

* >> Início da inclusão: FORM VINCULA_DI

                           AND dtdi >= v_dtini

                           AND dtdi <= v_dtfim

                           AND sdo_qtd > 0.

          CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

               EXPORTING

                    percentage = v_fixo

                    text       = v_percent.

          PERFORM monta_vinc.

        ENDLOOP.

      ELSE.

        LOOP AT itab_dis WHERE codcomp EQ itab_comp_vinc_final-codcomp

* << Fim da inclusão

                         AND dtdi >= v_dtini

                         AND dtdi <= v_dtfim

                         AND sdo_qtd > 0.

        CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

             EXPORTING

                  percentage = v_fixo

                  text       = v_percent.

* >> Início da inclusão: FORM VINCULA_DI

          PERFORM monta_vinc.

        ENDLOOP.

      ENDIF.

      MODIFY itab_comp_vinc_final.

    ENDLOOP.

  ENDLOOP.

  LOOP AT itab_di_final.

    READ TABLE itab_dis WITH KEY

                            ebeln    = itab_di_final-ebeln

                            ebelp    = itab_di_final-ebelp

                            nrseqemb = itab_di_final-nrseqemb

                            docnum   = itab_di_final-docnum.

    itab_di_final-sdo_qtd = itab_dis-sdo_qtd.

    MODIFY itab_di_final.

  ENDLOOP.

ENDFORM.

FORM monta_vinc.

  DATA: BEGIN OF itab_taxa OCCURS 0.

  DATA: data TYPE datum,

        taxa TYPE /pws/zycit279-i_txmoeda.

  DATA: END OF itab_taxa.

* << Fim da inclusão

        itab_di_final = itab_dis.

        MOVE:

          itab_comp_vinc_final-codmat   TO itab_di_final-codmat      ,

          itab_comp_vinc_final-nrseqre  TO itab_di_final-nrseqre     ,

          itab_comp_vinc_final-nrseq    TO itab_di_final-nrseq       ,

          itab_comp_vinc_final-nrseqc   TO itab_di_final-nrseqc      ,

          itab_comp_vinc_final-vbeln_va TO itab_di_final-vbeln_va    ,

          itab_comp_vinc_final-vbeln_vf TO itab_di_final-vbeln_vf    ,

          itab_comp_vinc_final-posnr    TO itab_di_final-posnr       .

        IF itab_comp_vinc_final-qtd_stotal > 0 AND

...

 

...

          ENDIF.

          itab_di_final-t_benef =

                     itab_di_final-i_vlii + itab_di_final-i_vlipi.

          itab_comp_vinc_final-qtd_stotal =

                                itab_comp_vinc_final-qtd_stotal -

                                           itab_di_final-qtd_vinc.

          itab_di_final-v_sel = 'X'.

        ENDIF.

        APPEND itab_di_final.

        MODIFY itab_dis.

* >> Início da exclusão: FORM VINCULA_DI

      ENDLOOP.

      MODIFY itab_comp_vinc_final.

    ENDLOOP.

  ENDLOOP.

  LOOP AT itab_di_final.

    READ TABLE itab_dis WITH KEY

                            ebeln    = itab_di_final-ebeln

                            ebelp    = itab_di_final-ebelp

                            nrseqemb = itab_di_final-nrseqemb

                            docnum   = itab_di_final-docnum.

    itab_di_final-sdo_qtd = itab_dis-sdo_qtd.

    MODIFY itab_di_final.

  ENDLOOP.

ENDFORM.

* << Fim da exclusão

* >> Início da inclusão:

ENDFORM.

* << Fim da inclusão

...

...

        marc_cp(1)  TYPE c.

  DATA: END OF itab_comp_vinc_aux.

  LOOP AT itab_di_final WHERE v_sel EQ ' '.

    DELETE itab_di_final.

  ENDLOOP.

  LOOP AT itab_di WHERE v_sel EQ ' '.

    DELETE itab_di.

  ENDLOOP.

  itab_comp_vinc_aux[] = itab_comp_vinc_final[].

  SORT itab_comp_vinc_aux BY nrseqre nrseq nrseqc

* >> Início da exclusão: FORM ELIMINA_NAO_VINCULADOS

          vbeln_va vbeln_vf posnr.

* << Fim da exclusão

* >> Início da inclusão: FORM ELIMINA_NAO_VINCULADOS

          codmat vbeln_va vbeln_vf posnr.

* << Fim da inclusão

  DELETE ADJACENT DUPLICATES FROM itab_comp_vinc_aux

                           COMPARING nrseqre nrseq nrseqc

                                  vbeln_va vbeln_vf posnr.

  LOOP AT itab_det_exp_final.

    READ TABLE itab_comp_vinc_aux WITH KEY

                        nrseqre  = itab_det_exp_final-nrseqre

                        nrseq    = itab_det_exp_final-nrseq

                        nrseqc   = itab_det_exp_final-nrseqc

                        codmat   = itab_det_exp_final-codmat

                        vbeln_va = itab_det_exp_final-vbeln_va

...