CE PLUS - Nota 003023

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.

 

Versões Tratadas

6.0


Pré-Requisitos

Produto:

Nota

Descrição

EXCLUSÃO DE ITENS DE EMBARQUE SOB MESMO FATURAMENTO OU REMESSA

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

...