CE PLUS - Nota 012976

Módulo: DOC. IMPORTAÇÃO

Funcionalidade: Encerramento de Custo

Data/Hora da Publicação: 14/05/2013 00:00:00

Data/Hora Última Alteração: 16/05/2013 15:59:46

Descrição da Nota: REALIZAR QUEBRA NO ENCERRAMENTO QUANDO POSSUIR MAIS DE 999 MATERIAIS

Sintoma

Ao realizar o encerramento de custo de um processo com mais de 999 materiais diferente ocorre erro

na MR22.

 

 

Solução

Atualizado programa de encerramento de custo para efetuar a quebra dos itens em encerramentos

distintos para não ultapassar o limite de itens na MR22. Agrupado por código de material

 

Versões Tratadas

9.0


Pré-Requisitos

Produto:

Nota

Descrição

ENCERRAMENTO PROCESSO DE SERVIÇO( ITEM SEM MATUSE )

GRAVA VALORES INCORRETOS NO ENCERRAMENTO DE CUSTO.

TRATAMENTO DE CAMPOS DE VENDA NA MR22

RETIRAR AUTHORITY CHECK ANTES DA MR22 E F02 NO ENCERRAMENTO.

Informações Complementares

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

Nota Número 12976 Data: 14/05/2013 Hora: 14:49:23

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

 

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

Nota Número              : 12976

Categoria                : Melhoria

Prioridade               : Média

Versão PW.CE             : 9.0

Pacote                   : 00004

Agrupamento              : 00154

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

Referência às notas relacionadas:

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

 

08016  - 00001 - 7.0    - 00008  - GRAVA VALORES INCORRETOS NO ENCERRAMENTO DE CUSTO.

08240  - 00002 - 7.0    - 00009  - ENCERRAMENTO PROCESSO DE SERVIÇO( ITEM SEM MATUSE )

11355  - 00003 - 8.0    - 00008  - TRATAMENTO DE CAMPOS DE VENDA NA MR22

11760  - 00004 - 8.0    - 00009  - RETIRAR AUTHORITY CHECK ANTES DA MR22 E F02 NO ENCERRAMENTO.

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

REALIZAR QUEBRA NO ENCERRAMENTO QUANDO POSSUIR MAIS DE 999 MATERIAIS

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

Palavras Chave:

ENCERRAMENTO - CUSTO - LIMITE - ITENS - MR22 - QUEBRA

/PWS/SAPMZYCI010

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

Objetos da nota:

REPS /PWS/MZYCI010X01

REPS /PWS/MZYCI010F03

REPS /PWS/MZYCI010F02

 

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

Modificações efetuadas em REPS /PWS/MZYCI010X01

 

...

* >> Início da inclusão:

DATA: BEGIN OF itab_item_q OCCURS 0.

DATA: ebeln  TYPE ekpo-ebeln,

      ebelp  TYPE ekpo-ebelp,

      matnr  TYPE ekpo-matnr.

DATA: END OF itab_item_q.

DATA: BEGIN OF itab_zycbt035_q OCCURS 0.

        INCLUDE STRUCTURE /pws/zycbe035.

DATA: knttp    LIKE ekpo-knttp.

DATA: END OF itab_zycbt035_q.

DATA: v_quebra TYPE c,

      v_limite TYPE i.

* << Fim da inclusão

DATA: END OF COMMON PART b.

 

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

Modificações efetuadas em REPS /PWS/MZYCI010F03

 

...

  CLEAR: itab_zycbt035_aux.

  MODIFY itab_zycbt035_aux TRANSPORTING d_gsber c_gsber lei102

    WHERE lei102 = 'X'.

  FREE itab_zycbt035.

  FREE itab_zycbt035_aux2.

  SORT itab_zycbt035_aux BY sinal matuse bklas d_gsber bschl d_newko

                          d_kostl d_prctr d_fipos d_fictr ps_psp_pnr.

  PERFORM verifica_exit USING 'D'

                     '/PWS/SAPMZYCI010'

                     'CUS008'.

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

  REFRESH itab_zycbt035_q.

  itab_zycbt035_q[] = itab_zycbt035_aux[].

* << Fim da inclusão

  LOOP AT itab_zycbt035_aux.

    CLEAR itab_zyglt100 .

    READ TABLE itab_zyglt100 WITH KEY zexit = 'CUS008'.

    IF NOT itab_zyglt100-zexit_ativa IS INITIAL.

      PERFORM (itab_zyglt100-formulario) IN PROGRAM

          (itab_zyglt100-programa).

    ENDIF.

    itab_zycbt035_aux2-matuse     = itab_zycbt035_aux-matuse.

    itab_zycbt035_aux2-sinal      = itab_zycbt035_aux-sinal.

    itab_zycbt035_aux2-bklas      = itab_zycbt035_aux-bklas.

...

 

...

FORM fill_036_aux2.

  CLEAR: v_codigo, itab_zycit036_aux, itab_zycit036_aux2.

  FREE itab_zycit036_aux2.

  LOOP AT itab_zycit036_aux.

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

    IF v_quebra = 'X'.

      READ TABLE itab_item_q

                    WITH KEY ebeln = itab_zycit036_aux-ebeln

                             ebelp = itab_zycit036_aux-ebelp.

      CHECK sy-subrc EQ 0.

    ENDIF.

* << Fim da inclusão

    IF itab_zycit036_aux-origem NE 'PED'.

      MOVE itab_zycit036_aux TO wa_zycit036.

      READ TABLE itab_zycit036_aux2 WITH KEY

                                    ebeln  = itab_zycit036_aux-ebeln

                                    ebelp  = itab_zycit036_aux-ebelp

                                    origem = itab_zycit036_aux-origem

                                    codigo = itab_zycit036_aux-codigo.

      IF sy-subrc = 0.

        v_index = sy-tabix.

        itab_zycit036_aux2-vlreal = wa_zycit036-vlreal +

...

 

...

      ELSE.

        MOVE itab_zycit036_aux TO itab_zycit036_aux2.

        APPEND itab_zycit036_aux2 .

        v_codigo = itab_zycit036_aux-codigo.

      ENDIF.

    ENDIF.

  ENDLOOP.

  CLEAR:  itab_zycit036_aux, itab_zycit036_aux2.

  LOOP AT itab_zycit036_aux WHERE origem = 'PED'

                              AND vlmov  NE 0.

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

    IF v_quebra = 'X'.

      READ TABLE itab_item_q

                    WITH KEY ebeln = itab_zycit036_aux-ebeln

                             ebelp = itab_zycit036_aux-ebelp.

      CHECK sy-subrc EQ 0.

    ENDIF.

* << Fim da inclusão

    MOVE itab_zycit036_aux TO wa_zycit036.

    READ TABLE itab_zycit036_aux2 WITH KEY

                                  ebeln  = itab_zycit036_aux-ebeln

                                  ebelp  = itab_zycit036_aux-ebelp

                                  codigo = itab_zycit036_aux-codigo.

    IF sy-subrc NE 0.

      MOVE itab_zycit036_aux TO itab_zycit036_aux2.

      APPEND itab_zycit036_aux2 .

    ENDIF.

  ENDLOOP.

...

 

 

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

Modificações efetuadas em REPS /PWS/MZYCI010F02

 

...

    CLEAR itab_zyglt100 .

    READ TABLE itab_zyglt100 WITH KEY zexit = 'CUS004'.

    IF NOT itab_zyglt100-zexit_ativa IS INITIAL.

      PERFORM (itab_zyglt100-formulario) IN PROGRAM

     (itab_zyglt100-programa) IF FOUND.

    ELSE.

      SUBMIT /pws/zycir007 AND RETURN.                   "#EC CI_SUBMIT

    ENDIF.

    IMPORT e_okcode FROM MEMORY ID 'I007E'.

    IF e_okcode EQ 'CONTAB'.

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

      IF v_quebra EQ 'X' AND

         /pws/zycie001-belnr_mr22 IS INITIAL AND

         NOT itab_zycie031[] IS INITIAL AND

         v_rub NE 'X'.

        PERFORM quebra_enc.

      ELSE.

* << Fim da inclusão

      IF /pws/zycie001-belnr_mr22 IS INITIAL AND

      NOT itab_zycie031[] IS INITIAL AND v_rub NE 'X'.

        PERFORM fill_date_mr22.

      ENDIF.

      IF NOT /pws/zycie001-belnr_mr22 IS INITIAL OR

      ( /pws/zycie001-belnr_mr22 IS INITIAL

      AND itab_zycie031[] IS INITIAL )

      OR v_rub = 'X'.

        IF v_conta = 'X'.

          MESSAGE i015 WITH text-065.

...

 

...

        MODIFY /pws/zycit001 FROM /pws/zycie001.

        IF sy-subrc EQ 0.

          MOVE-CORRESPONDING /pws/zycie001 TO /pws/zycit001.

          PERFORM carrega_log USING '/PWS/ZYCIT001' 'U'

                ' '  '/PWS/SAPMZYCI001' /pws/zycit001-nrseq.

        ENDIF.

        PERFORM fill_encerramento USING '1'.

        PERFORM fill_diferencas.

        COMMIT WORK AND WAIT.

        PERFORM call_encerramento.

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

        ENDIF.

* << Fim da inclusão

      ENDIF.

    ELSE.

      EXIT.

    ENDIF.

  ELSEIF v_nota IS INITIAL AND v_fatura IS INITIAL.

    /pws/zycie001-dtencer = sy-datlo.

    /pws/zycie001-status   = 'EN'.

    /pws/zycie001-status_e = 'E'.

    UPDATE /pws/zycit001 SET dtencer = /pws/zycie001-dtencer

                        status  = /pws/zycie001-status

...

 

...

    itab_zycie031_aux-wrbtr    = itab_zycit003_custo-vldif .

    itab_zycie031_aux-waers    = wa_zycbt007-waersb.

    IF 'CME' CA itab_material-knttp.

      SELECT SINGLE vbeln vbelp FROM ekkn

      INTO (itab_zycie031_aux-vbeln, itab_zycie031_aux-vbelp)

        WHERE   ebeln = itab_zycit003_custo-ebeln

        AND     ebelp = itab_zycit003_custo-ebelp.

    ENDIF.

    APPEND itab_zycie031_aux.

  ENDLOOP.

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

  CLEAR v_quebra.

  REFRESH itab_item_q.

  v_limite = 999.

* << Fim da inclusão

  FREE itab_zycie031.

  LOOP AT itab_zycie031_aux.

    itab_zycie031-tcode = itab_zycie031_aux-tcode.

    itab_zycie031-tabela = itab_zycie031_aux-tabela.

    itab_zycie031-cpochv = itab_zycie031_aux-cpochv.

    itab_zycie031-werks  = itab_zycie031_aux-werks.

    itab_zycie031-matnr = itab_zycie031_aux-matnr.

    itab_zycie031-bwtar = itab_zycie031_aux-bwtar.

    itab_zycie031-wrbtr = itab_zycie031_aux-wrbtr.

    itab_zycie031-menge = itab_zycie031_aux-menge.

    itab_zycie031-selkz_soll = itab_zycie031_aux-selkz_soll.

    itab_zycie031-selkz_habe = itab_zycie031_aux-selkz_habe.

    itab_zycie031-waers   = itab_zycie031_aux-waers.

    itab_zycie031-ps_psp_pnr = itab_zycie031_aux-ps_psp_pnr.

    itab_zycie031-vbeln = itab_zycie031_aux-vbeln.

    itab_zycie031-vbelp = itab_zycie031_aux-vbelp.

    COLLECT itab_zycie031.

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

    DESCRIBE TABLE itab_zycie031 LINES v_line.

    IF v_line > v_limite.

      v_quebra = 'X'.

      ADD 999 TO v_limite.

    ENDIF.

    itab_item_q-ebeln = itab_zycie031_aux-ebeln.

    itab_item_q-ebelp = itab_zycie031_aux-ebelp.

    itab_item_q-matnr = itab_zycie031_aux-matnr.

    APPEND itab_item_q.

* << Fim da inclusão

  ENDLOOP.

ENDFORM.

...

 

...

* >> Início da inclusão:

FORM quebra_enc.

  DATA: BEGIN OF itab_zycie031_q OCCURS 0.

          INCLUDE STRUCTURE /pws/zycie031.

  DATA: END OF itab_zycie031_q.

  DATA: BEGIN OF itab_item_t OCCURS 0.

  DATA: ebeln  TYPE ekpo-ebeln,

        ebelp  TYPE ekpo-ebelp,

        matnr  TYPE ekpo-matnr.

  DATA: END OF itab_item_t.

  itab_zycie031_q[] = itab_zycie031[].

  itab_item_t[] = itab_item_q[].

  DO.

    REFRESH: itab_zycbt035, itab_zycie031, itab_zycbt035_aux,

             itab_zycbt035_aux2, itab_item_q.

    LOOP AT itab_zycie031_q.

      APPEND itab_zycie031_q TO itab_zycie031.

      DELETE itab_zycie031_q.

      LOOP AT itab_item_t WHERE matnr EQ itab_zycie031_q-matnr.

        APPEND itab_item_t TO itab_item_q.

        DELETE itab_item_t.

      ENDLOOP.

      IF sy-tabix = 999.

        EXIT.

      ENDIF.

    ENDLOOP.

    LOOP AT itab_item_q.

      LOOP AT itab_zycbt035_q

                  WHERE ebeln = itab_item_q-ebeln

                    AND ebelp = itab_item_q-ebelp.

        APPEND itab_zycbt035_q TO itab_zycbt035_aux.

        DELETE itab_zycbt035_q.

      ENDLOOP.

    ENDLOOP.

    LOOP AT itab_zycbt035_aux.

      CLEAR itab_zyglt100 .

      READ TABLE itab_zyglt100 WITH KEY zexit = 'CUS008'.

      IF NOT itab_zyglt100-zexit_ativa IS INITIAL.

        PERFORM (itab_zyglt100-formulario) IN PROGRAM

            (itab_zyglt100-programa).

      ENDIF.

      itab_zycbt035_aux2-matuse     = itab_zycbt035_aux-matuse.

      itab_zycbt035_aux2-sinal      = itab_zycbt035_aux-sinal.

      itab_zycbt035_aux2-bklas      = itab_zycbt035_aux-bklas.

      itab_zycbt035_aux2-d_gsber    = itab_zycbt035_aux-d_gsber.

      itab_zycbt035_aux2-bschl      = itab_zycbt035_aux-bschl  .

      itab_zycbt035_aux2-d_newko    = itab_zycbt035_aux-d_newko.

      itab_zycbt035_aux2-newko      = itab_zycbt035_aux-newko.

      itab_zycbt035_aux2-d_kostl    = itab_zycbt035_aux-d_kostl.

      itab_zycbt035_aux2-d_prctr    = itab_zycbt035_aux-d_prctr.

      itab_zycbt035_aux2-c_prctr    = itab_zycbt035_aux-c_prctr.

      itab_zycbt035_aux2-d_fipos    = itab_zycbt035_aux-d_fipos.

      itab_zycbt035_aux2-d_fictr    = itab_zycbt035_aux-d_fictr.

      itab_zycbt035_aux2-ps_psp_pnr = itab_zycbt035_aux-ps_psp_pnr.

      itab_zycbt035_aux2-wrbtr      = itab_zycbt035_aux-wrbtr.

      itab_zycbt035_aux2-menge      = itab_zycbt035_aux-menge.

      itab_zycbt035_aux2-aufnr      = itab_zycbt035_aux-aufnr.

      itab_zycbt035_aux2-nplnr      = itab_zycbt035_aux-nplnr.

      itab_zycbt035_aux2-vornr      = itab_zycbt035_aux-vornr.

      itab_zycbt035_aux2-werks      = itab_zycbt035_aux-werks.

      itab_zycbt035_aux2-knttp      = itab_zycbt035_aux-knttp.

      IF itab_zycbt035_aux2-bschl EQ '70' OR

         itab_zycbt035_aux2-bschl EQ '75'.

        CLEAR: itab_zycbt035_aux2-d_kostl, itab_zycbt035_aux2-c_kostl,

               itab_zycbt035_aux2-d_prctr, itab_zycbt035_aux2-c_prctr.

        CLEAR: itab_zycbt035_aux-d_fipos, itab_zycbt035_aux-d_fictr,

               itab_zycbt035_aux-ps_psp_pnr.

      ENDIF.

      COLLECT itab_zycbt035_aux2.

    ENDLOOP.

    MOVE itab_zycbt035_aux2[] TO itab_zycbt035[].

    LOOP AT itab_zycbt035.

      v_index = sy-tabix.

      CLEAR itab_zycbt012.

      IF itab_zycbt035-d_newko IS INITIAL.

        CLEAR v_matuse.

        IF v_land1 EQ 'AR' OR v_land1 EQ 'CL'.

          IF itab_zycbt035-knttp EQ 'F' OR itab_zycbt035-knttp EQ 'K'.

            v_matuse = 3.

         ELSE.

            v_matuse = 1.

          ENDIF.

        ENDIF.

        IF v_matuse IS INITIAL.

          v_matuse = itab_zycbt035-matuse.

        ENDIF.

        CLEAR itab_cta. REFRESH itab_cta.

        PERFORM seek_account_number

                TABLES itab_cta

                USING /pws/zycie001-bukrs

                      'IPA'

                      /pws/zycie001-werks

                      itab_zycbt035-bklas

                      v_matuse

                      space

                      space.

        READ TABLE itab_cta INDEX 1.

        IF itab_cta-konth IS INITIAL.

          CLEAR itab_cta. REFRESH itab_cta.

          PERFORM seek_account_number

                  TABLES itab_cta

                  USING /pws/zycie001-bukrs

                        'IPA'

                        /pws/zycie001-werks

                        space

                        v_matuse

                        space

                        space.

          READ TABLE itab_cta INDEX 1.

        ENDIF.

        itab_zycbt035-d_newko = itab_cta-konth.

        PERFORM verify_null_field USING itab_zycbt035-d_newko

                                                            'D_NEWKO'

                                                            text-022.

      ENDIF.

      IF itab_zycbt035-wrbtr LT 0.

        itab_zycbt035-wrbtr = itab_zycbt035-wrbtr * -1.

      ENDIF.

      MODIFY itab_zycbt035 INDEX v_index.

    ENDLOOP.

    PERFORM fill_date_mr22.

    IF NOT /pws/zycie001-belnr_mr22 IS INITIAL OR

       ( /pws/zycie001-belnr_mr22 IS INITIAL

       AND itab_zycie031[] IS INITIAL )

       OR v_rub = 'X'.

      IF v_conta = 'X'.

        MESSAGE i015 WITH text-065.

      ELSE.

        PERFORM adiciona_partidas_est.

        IF NOT itab_return[] IS INITIAL.

          PERFORM show_message_errors.

        ELSE.

          PERFORM fill_date_f_02.

        ENDIF.

      ENDIF.

    ENDIF.

    IF ( ( NOT /pws/zycie001-belnr_mr22 IS INITIAL AND

           NOT /pws/zycie001-belnr_f_02 IS INITIAL )     OR

         ( /pws/zycie001-belnr_mr22 IS INITIAL AND

           itab_zycie031[] IS INITIAL          AND

           NOT /pws/zycie001-belnr_f_02 IS INITIAL )     OR

         ( NOT /pws/zycie001-belnr_mr22 IS INITIAL AND

           /pws/zycie001-belnr_f_02 IS INITIAL AND

           v_mr22 IS INITIAL )                           AND

           v_conta NE 'X' ).

      /pws/zycie001-dtencer = sy-datlo.

      /pws/zycie001-status  = 'EC'.

      /pws/zycie001-status_e = 'E'.

      MODIFY /pws/zycit001 FROM /pws/zycie001.

      IF sy-subrc EQ 0.

        MOVE-CORRESPONDING /pws/zycie001 TO /pws/zycit001.

        PERFORM carrega_log USING '/PWS/ZYCIT001' 'U'

              ' '  '/PWS/SAPMZYCI001' /pws/zycit001-nrseq.

      ENDIF.

      PERFORM fill_encerramento USING '1'.

      COMMIT WORK AND WAIT.

    ENDIF.

    IF itab_zycbt035_q[] IS INITIAL.

      EXIT.

    ENDIF.

  ENDDO.

  PERFORM fill_diferencas.

  COMMIT WORK AND WAIT.

  PERFORM call_encerramento.

ENDFORM.

* << Fim da inclusão