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
9.0
Produto:
Nota
Descrição
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