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.
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
...