Módulo: DOC. EXPORTAÇÃO
Funcionalidade: Embarque
Data/Hora da Publicação: 02/02/2007 00:00:00
Data/Hora Última Alteração: 22/02/2011 10:45:49
Descrição da Nota: CONSISTENCIA PARA EXCLUSÃO DE ITENS DO EMBARQUE QUE ESTEJAM APROPRIADOS
Sintoma
Ao fazer o refresh do embarque, e, encontrando inconsistência nos itens, ao entrar na rotina de
exclusão dos itens selecionados, caso o item estivesse apropriado, o programa entrava em looping.
Solução
Alteração do programa.
6.0
Produto:
Nota
Descrição
Informações Complementares
----------------------------------------------------------------------------------------------------
Nota Número 03023 Data: 02/02/2007 Hora: 14:57:02
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Nota Número : 03023
Categoria : Erro de Programa
Prioridade : Média
Versão PW.CE : 6.0
Pacote : 00026
Agrupamento : 00151
----------------------------------------------------------------------------------------------------
Referência às notas relacionadas:
Número - Ordem - Versão - Pacote - Descrição Breve
02384 - 00001 - 6.0 - 00025 - EXCLUSÃO DE ITENS DE EMBARQUE SOB MESMO FATURAMENTO OU REMESSA
----------------------------------------------------------------------------------------------------
CONSISTENCIA PARA EXCLUSÃO DE ITENS DO EMBARQUE QUE ESTEJAM APROPRIADOS
----------------------------------------------------------------------------------------------------
Palavras Chave:
REFRESH, ITEM, CONSISTÊNCIA, APROPRIADO, EMBARQUE, LOOPING,
----------------------------------------------------------------------------------------------------
Objetos da nota:
REPS /PWS/MZYCE003F01
REPS /PWS/MZYCE003F02
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCE003F01
...
STATICS: v_parvw TYPE vbpa-parvw.
DATA: v_msgtp TYPE smesg-msgty,
v_kunnr TYPE vbpa-kunnr,
v_posnr TYPE vbpa-posnr,
v_vbeln TYPE vbpa-vbeln,
v_zterm TYPE /pws/zycet002-zterm,
v_bukrs TYPE /pws/zycet002-bukrs,
v_inco1 TYPE /pws/zycet002-inco1,
v_waers TYPE /pws/zycet002-waers,
v_vtweg TYPE /pws/zycet002-vtweg,
* >> Início da exclusão: FORM CONSISTENCIA_ITENS
v_vkorg TYPE /pws/zycet002-vkorg.
* << Fim da exclusão
* >> Início da inclusão: FORM CONSISTENCIA_ITENS
v_vkorg TYPE /pws/zycet002-vkorg,
v_exclui type c.
* << Fim da inclusão
DATA: BEGIN OF itab_ordens OCCURS 0,
vbeln_va TYPE /pws/zycet002-vbeln_va,
aupos TYPE /pws/zycet002-aupos,
END OF itab_ordens.
DATA: BEGIN OF itab_pedidos OCCURS 0,
ebeln TYPE /pws/zycet002-ebeln,
ebelp TYPE /pws/zycet002-ebelp,
END OF itab_pedidos.
DATA: BEGIN OF itab_zycet002_existe OCCURS 0,
nrseq TYPE /pws/zycet002-nrseq,
...
...
ENDLOOP.
IF wa_limpa-werks EQ 'X'.
CLEAR: /pws/zycee001-werks.
ENDIF.
IF wa_limpa-gsber EQ 'X'.
CLEAR: /pws/zycee001-gsber.
ENDIF.
CHECK p_excluir EQ 'X'.
READ TABLE itab_zycet002 WITH KEY mark = 'X'.
CHECK sy-subrc EQ 0.
* >> Início da exclusão: FORM CONSISTENCIA_ITENS
PERFORM elimina_itens_marcados USING space.
* << Fim da exclusão
* >> Início da inclusão: FORM CONSISTENCIA_ITENS
PERFORM elimina_itens_marcados USING space
CHANGING v_exclui.
CHECK v_exclui EQ 'X'.
* << Fim da inclusão
PERFORM limpa_dados_para_refresh.
PERFORM refresh_embarque USING space.
ENDFORM.
FORM busca_local_de_negocio USING value(p_centro) TYPE t001w-werks
CHANGING value(p_filial) TYPE t001w-j_1bbranch.
DATA: v_branch TYPE t001w-j_1bbranch,
v_werks TYPE t001w-werks,
v_tabix TYPE sy-tabix.
DATA: BEGIN OF itab_branch OCCURS 0,
j_1bbranch TYPE t001w-j_1bbranch,
...
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCE003F02
...
WHEN 'CALC_VENC'.
PERFORM calcula_vencimento.
PERFORM calcula_taxa_cambio.
okcode = 'DUMMY'.
WHEN 'ENTER'.
CHECK */pws/zycee001-dtemb NE /pws/zycee001-dtemb.
PERFORM calcula_taxa_cambio.
ENDCASE.
ENDFORM.
FORM okcode_0102.
* >> Início da exclusão: FORM OKCODE_0102
DATA: v_linhas TYPE sy-tabix.
* << Fim da exclusão
* >> Início da inclusão: FORM OKCODE_0102
DATA: v_linhas TYPE sy-tabix,
v_exclui TYPE c.
* << Fim da inclusão
CASE okcode.
WHEN 'COMPLETE'.
READ TABLE itab_zycet002_tc WITH KEY mark = 'X'.
IF sy-subrc NE 0.
MESSAGE s323(v1).
EXIT.
ENDIF.
LOOP AT itab_zycet002_tc WHERE mark EQ 'X'.
CHECK NOT itab_zycet002_tc-vbeln_va IS INITIAL OR
NOT itab_zycet002_tc-ebeln IS INITIAL.
CLEAR itab_zycet002.
itab_zycet002-nrseq = /pws/zycee001-nrseq.
itab_zycet002-vbeln_va = itab_zycet002_tc-vbeln_va.
itab_zycet002-ebeln = itab_zycet002_tc-ebeln.
itab_zycet002-novo = 'X'.
COLLECT itab_zycet002.
wa_controle-novos_itens = 'X'.
okcode = 'REFRESH'.
ENDLOOP.
WHEN 'DEL_MK'.
* >> Início da exclusão: FORM OKCODE_0102
PERFORM elimina_itens_marcados USING 'X'.
* << Fim da exclusão
* >> Início da inclusão: FORM OKCODE_0102
PERFORM elimina_itens_marcados USING 'X'
CHANGING v_exclui.
IF v_exclui EQ 'X'.
PERFORM refresh_embarque USING 'X'.
IF itab_zycet002_tc[] IS INITIAL.
okcode = 'T/02'.
ENDIF.
ENDIF.
* << Fim da inclusão
WHEN 'DETAIL'.
okcode = 'DUMMY'.
READ TABLE itab_zycet002_tc WITH KEY mark = 'X'.
IF sy-subrc NE 0.
MESSAGE s323(v1).
EXIT.
ENDIF.
CLEAR: itab_indices.
REFRESH: itab_indices.
LOOP AT itab_zycet002_tc.
...
...
itab_converte-meinn = p_um_para.
itab_converte-fator = p_quant_para / p_quant_de.
COLLECT itab_converte.
itab_converte-matnr = p_matnr.
itab_converte-meinv = p_um_para.
itab_converte-meinn = p_um_de.
itab_converte-fator = p_quant_de / p_quant_para.
COLLECT itab_converte.
ENDIF.
ENDFORM.
* >> Início da exclusão: FORM ELIMINA_ITENS_MARCADOS
FORM elimina_itens_marcados USING value(p_marcados).
* << Fim da exclusão
* >> Início da inclusão: FORM ELIMINA_ITENS_MARCADOS
FORM elimina_itens_marcados USING value(p_marcados)
CHANGING p_exclui TYPE c.
* << Fim da inclusão
DATA: BEGIN OF itab_excluir OCCURS 0,
vbeln_va TYPE /pws/zycet002-vbeln_va,
aupos TYPE /pws/zycet002-aupos,
vbeln_vl TYPE /pws/zycet002-vbeln_vl,
posnl TYPE /pws/zycet002-posnl,
vbeln_vf TYPE /pws/zycet002-vbeln_vf,
posnr TYPE /pws/zycet002-posnr,
END OF itab_excluir.
DATA: itab_002 LIKE itab_zycet002 OCCURS 0 WITH HEADER LINE.
* >> Início da inclusão: FORM ELIMINA_ITENS_MARCADOS
DATA: v_index TYPE sy-tabix,
v_subrc TYPE sy-subrc.
* << Fim da inclusão
IF p_marcados EQ 'X'.
itab_002[] = itab_zycet002_tc[].
ELSE.
itab_002[] = itab_zycet002[].
ENDIF.
READ TABLE itab_002 WITH KEY mark = 'X'.
IF sy-subrc NE 0.
IF p_marcados EQ 'X'.
MESSAGE s323(v1).
ENDIF.
...
...
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'W'
msgv1 = text-503
msgv2 = itab_002-vbeln_vl
msgv3 = itab_002-posnl
txtnr = 240
zeile = 'CAN_NOT_DEL_I'.
ENDIF.
CONTINUE.
* >> Início da inclusão: FORM ELIMINA_ITENS_MARCADOS
ENDIF.
ENDIF.
IF itab_002-vbeln_vf IS INITIAL.
READ TABLE itab_002 WITH KEY vbeln_vl = itab_002-vbeln_vl
staprop = 'A'.
v_subrc = sy-subrc.
ELSE.
READ TABLE itab_002 WITH KEY vbeln_vf = itab_002-vbeln_vf
staprop = 'A'.
v_subrc = sy-subrc.
ENDIF.
IF v_subrc IS INITIAL.
IF itab_002-vbeln_vl IS INITIAL.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'W'
msgv1 = text-501
msgv2 = itab_002-vbeln_va
msgv3 = itab_002-aupos
txtnr = 240
zeile = 'CAN_NOT_DEL_I'.
ELSE.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'W'
msgv1 = text-503
msgv2 = itab_002-vbeln_vl
msgv3 = itab_002-posnl
txtnr = 240
zeile = 'CAN_NOT_DEL_I'.
* << Fim da inclusão
ENDIF.
* >> Início da inclusão: FORM ELIMINA_ITENS_MARCADOS
READ TABLE itab_zycet002
WITH KEY vbeln_va = itab_002-vbeln_va
aupos = itab_002-aupos
vbeln_vl = itab_002-vbeln_vl
posnl = itab_002-posnl
vbeln_vf = itab_002-vbeln_vf
posnr = itab_002-posnr.
v_index = sy-tabix.
IF sy-subrc IS INITIAL.
itab_zycet002-mark = ' '.
MODIFY itab_zycet002 INDEX v_index TRANSPORTING mark.
* << Fim da inclusão
ENDIF.
* >> Início da exclusão: FORM ELIMINA_ITENS_MARCADOS
READ TABLE itab_002 WITH KEY mark = 'X'
staprop = 'A'
TRANSPORTING NO FIELDS.
* << Fim da exclusão
* >> Início da inclusão: FORM ELIMINA_ITENS_MARCADOS
CONTINUE.
* << Fim da inclusão
* >> Início da exclusão: FORM ELIMINA_ITENS_MARCADOS
CHECK NOT sy-subrc IS INITIAL.
* << Fim da exclusão
* >> Início da inclusão: FORM ELIMINA_ITENS_MARCADOS
ELSE.
* << Fim da inclusão
READ TABLE itab_excluir
WITH KEY vbeln_va = itab_002-vbeln_va
aupos = itab_002-aupos
vbeln_vl = itab_002-vbeln_vl
posnl = itab_002-posnl
vbeln_vf = itab_002-vbeln_vf
posnr = itab_002-posnr.
IF sy-subrc NE 0.
MOVE-CORRESPONDING itab_002 TO itab_excluir.
APPEND itab_excluir.
...
...
IF sy-subrc NE 0.
MOVE: itab_docrel-vbelv_va TO itab_excluir-vbeln_va,
itab_docrel-aupov TO itab_excluir-aupos,
itab_docrel-vbelv_vl TO itab_excluir-vbeln_vl,
itab_docrel-posvl TO itab_excluir-posnl,
itab_docrel-vbelv_vf TO itab_excluir-vbeln_vf,
itab_docrel-posnv TO itab_excluir-posnr.
APPEND itab_excluir.
ENDIF.
ENDLOOP.
* >> Início da inclusão: FORM ELIMINA_ITENS_MARCADOS
ENDIF.
* << Fim da inclusão
ENDLOOP.
IF itab_excluir[] IS INITIAL.
EXIT.
* >> Início da inclusão: FORM ELIMINA_ITENS_MARCADOS
ELSE.
p_exclui = 'X'.
* << Fim da inclusão
ENDIF.
SORT itab_excluir.
LOOP AT itab_excluir.
...
...
posnl = itab_excluir-posnl AND
vbeln_vf = itab_excluir-vbeln_vf AND
posnr = itab_excluir-posnr.
DELETE itab_zycet002_tc WHERE vbeln_va = itab_excluir-vbeln_va AND
aupos = itab_excluir-aupos AND
vbeln_vl = itab_excluir-vbeln_vl AND
posnl = itab_excluir-posnl AND
vbeln_vf = itab_excluir-vbeln_vf AND
posnr = itab_excluir-posnr.
ENDLOOP.
* >> Início da exclusão: FORM ELIMINA_ITENS_MARCADOS
IF p_marcados EQ 'X'.
IF sy-subrc EQ 0.
PERFORM refresh_embarque USING 'X'.
ENDIF.
IF itab_zycet002_tc[] IS INITIAL.
okcode = 'T/02'.
ENDIF.
ENDIF.
* << Fim da exclusão
ENDFORM.
FORM okcode_aprop CHANGING p_executou TYPE c.
DATA: BEGIN OF it_zycet002 OCCURS 0.
INCLUDE STRUCTURE /pws/zycet002.
DATA: qtdbx TYPE /pws/zycet002-fkimg,
mexp(1) TYPE c .
DATA: END OF it_zycet002.
DATA: rimc1 TYPE indx-srtfd VALUE 'R070PAR1'.
LOOP AT itab_zycet002 WHERE mark = 'X'.
CHECK itab_zycet002-devolucao IS INITIAL AND
...