Módulo: DOC. IMPORTAÇÃO
Funcionalidade: Recebimento
Data/Hora da Publicação: 26/07/2011 00:00:00
Data/Hora Última Alteração: 17/02/2012 15:29:51
Descrição da Nota: RECEBIMENTO COM RATEIO QUANTITATIVO - DESENVOLVIMENTO ADICIONAL
Sintoma
Desenvolvimento Adicional - Recebimento com rateio quantitativo
Deverá ser feito uma modificação na BAPI da MIRO para considerar a mesma quantidade informada no
pedido de compras quanto tiver distribuição quantitativa como forma de rateio.
Solução
Se a distribuição for quantitativa na aba classificação contábil do pedido de compra e a quantidade
informada pela MIRO for diferente da quantidade informada no pedido, criar uma mensagem: quantidade
da MIRO diferente da quantidade do pedido. Deseja alterar? Caso positivo, abrir uma tela para que o
usuário informe a quantidade correta dos itens. Caso negativo, realizar a MIRO sem alteração.
8.0
Produto:
Nota
Descrição
Informações Complementares
----------------------------------------------------------------------------------------------------
Nota Número 11357 Data: 26/07/2011 Hora: 16:41:36
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Nota Número : 11357
Categoria : Melhoria
Prioridade : Baixa
Versão PW.CE : 8.0
Pacote : 00008
Agrupamento : 00079
----------------------------------------------------------------------------------------------------
Referência às notas relacionadas:
Número - Ordem - Versão - Pacote - Descrição Breve
09713 - 00001 - 8.0 - 00002 - QUANTIDADE NA UNIDADE DE PREÇO PARA PEDIDO SEM MATERIAL
11113 - 00002 - 8.0 - 00007 - AO DAR ERRO NA BAPI DA MIRO, PROGRAMA NÃO REALIZAVA ROLLBACK.
----------------------------------------------------------------------------------------------------
RECEBIMENTO COM RATEIO QUANTITATIVO - DESENVOLVIMENTO ADICIONAL
----------------------------------------------------------------------------------------------------
Palavras Chave:
RECEBIMENTO - RATEIO QUANTITATIVO
----------------------------------------------------------------------------------------------------
Objetos da nota:
CUAD /PWS/SAPMZYCI017
DYNP /PWS/SAPMZYCI017 0113
REPS /PWS/MZYCI017F01
REPS /PWS/MZYCI017I01
REPS /PWS/MZYCI017O01
REPS /PWS/MZYCI017TOP
REPS /PWS/MZYCI017X01
REPT /PWS/SAPMZYCI017
TABL /PWS/ZYCIT510
----------------------------------------------------------------------------------------------------
Modificações efetuadas em CUAD /PWS/SAPMZYCI017
* Criar o Status GUI 0113 conforme abaixo:
STATUS: 0113
ATRIBUTOS DE STATUS
TEXTO BREVE: Distribuição Quantitativa
* Definir os códigos de funções abaixo:
TECLAS DE FUNÇÃO -> BARRA FERRAM.
ENTER
BACK
%EX
CANCEL
* Criar o Títs. GUI 0113 conforme abaixo:
TÍTS GUI
CODE TÍTULO: 0113
TÍTULO: Distribuição Quantitativa
----------------------------------------------------------------------------------------------------
Modificações efetuadas em DYNP /PWS/SAPMZYCI017 0113
INCLUIR CX.DIÁLOGO 0113
Descrição Distribuição Quantitativa
Tela seguinte 0113
Altura atual (linhas) 16
Largura atual (colunas) 145
INCLUIR CONTROLE DE TABELA "TC_DISTRI"
Altura 14
Comprimento Visível 144
Linha 1
Coluna 2
INCLUIR TEXTO "EKKN-EBELN" em tbl.contr./tabstr.
Altura 10
Comprimento Visível 15
Linha 1
Coluna 1
Formato CHAR
Texto Doc.compra
INCLUIR TEXTO "EKKN-EBELP" em tbl.contr./tabstr.
Altura 5
Comprimento Visível 15
Linha 1
Coluna 2
Formato CHAR
Texto Item
INCLUIR TEXTO "EKKN-ZEKKN" em tbl.contr./tabstr.
Altura 2
Comprimento Visível 15
Linha 1
Coluna 3
Formato CHAR
Texto Nº seq.ClCont
INCLUIR TEXTO "EKKN-MENGE" em tbl.contr./tabstr.
Altura 17
Comprimento Visível 15
Linha 1
Coluna 4
Formato CHAR
Texto Quantidade
INCLUIR TEXTO "EKKN-SAKTO" em tbl.contr./tabstr.
Altura 10
Comprimento Visível 15
Linha 1
Coluna 5
Formato CHAR
Texto Conta do Razão
INCLUIR TEXTO "EKKN-GSBER" em tbl.contr./tabstr.
Altura 4
Comprimento Visível 15
Linha 1
Coluna 6
Formato CHAR
Texto Divisão
INCLUIR TEXTO "EKKN-KOSTL" em tbl.contr./tabstr.
Altura 10
Comprimento Visível 15
Linha 1
Coluna 7
Formato CHAR
Texto Centro custo
INCLUIR TEXTO "EKKN-ANLN1" em tbl.contr./tabstr.
Altura 12
Comprimento Visível 15
Linha 1
Coluna 8
Formato CHAR
Texto Imobilizado
INCLUIR TEXTO "EKKN-ANLN2" em tbl.contr./tabstr.
Altura 4
Comprimento Visível 15
Linha 1
Coluna 9
Formato CHAR
Texto Subnº
INCLUIR TEXTO "EKKN-AUFNR" em tbl.contr./tabstr.
Altura 12
Comprimento Visível 15
Linha 1
Coluna 10
Formato CHAR
Texto Ordem
INCLUIR TEXTO "EKKN-PRCTR" em tbl.contr./tabstr.
Altura 10
Comprimento Visível 15
Linha 1
Coluna 11
Formato CHAR
Texto Centro de lucro
INCLUIR TEXTO "EKKN-PS_PSP_PNR" em tbl.contr./tabstr.
Altura 24
Comprimento Visível 15
Linha 1
Coluna 12
Formato CHAR
Texto Elemento PEP
INCLUIR TEXTO "EKKN-NPLNR" em tbl.contr./tabstr.
Altura 12
Comprimento Visível 15
Linha 1
Coluna 13
Formato CHAR
Texto Diag.rede
INCLUIR CAMPO TEXTO "EKKN-EBELN" em tbl.contr./tabstr.
Altura 10
Comprimento Visível 10
Linha 1
Coluna 1
Formato CHAR
Linhas mínimas 10
Texto __________
Código função
INCLUIR CAMPO TEXTO "EKKN-EBELP" em tbl.contr./tabstr.
Altura 5
Comprimento Visível 5
Linha 1
Coluna 2
Formato NUMC
Linhas mínimas 5
Texto _____
Código função
INCLUIR CAMPO TEXTO "EKKN-ZEKKN" em tbl.contr./tabstr.
Altura 2
Comprimento Visível 2
Linha 1
Coluna 3
Formato NUMC
Linhas mínimas 2
Texto __
INCLUIR CAMPO TEXTO "EKKN-MENGE" em tbl.contr./tabstr.
Altura 17
Comprimento Visível 17
Linha 1
Coluna 4
Formato QUAN
Campo referência EKPO-MEINS
Linhas mínimas 13
Colunas mínimas 3
Texto _.___.___.___,___
INCLUIR CAMPO TEXTO "EKKN-SAKTO" em tbl.contr./tabstr.
Altura 10
Comprimento Visível 10
Linha 1
Coluna 5
Formato CHAR
Linhas mínimas 10
Texto __________
Código função
INCLUIR CAMPO TEXTO "EKKN-GSBER" em tbl.contr./tabstr.
Altura 4
Comprimento Visível 4
Linha 1
Coluna 6
Formato CHAR
Linhas mínimas 4
Texto ____
Código função
INCLUIR CAMPO TEXTO "EKKN-KOSTL" em tbl.contr./tabstr.
Altura 10
Comprimento Visível 10
Linha 1
Coluna 7
Formato CHAR
Linhas mínimas 10
Texto __________
Código função
INCLUIR CAMPO TEXTO "EKKN-ANLN1" em tbl.contr./tabstr.
Altura 12
Comprimento Visível 12
Linha 1
Coluna 8
Formato CHAR
Linhas mínimas 12
Texto ____________
Código função
INCLUIR CAMPO TEXTO "EKKN-ANLN2" em tbl.contr./tabstr.
Altura 4
Comprimento Visível 4
Linha 1
Coluna 9
Formato CHAR
Linhas mínimas 4
Texto ____
Código função
INCLUIR CAMPO TEXTO "EKKN-AUFNR" em tbl.contr./tabstr.
Altura 12
Comprimento Visível 12
Linha 1
Coluna 10
Formato CHAR
Linhas mínimas 12
Texto ____________
Código função
INCLUIR CAMPO TEXTO "EKKN-PRCTR" em tbl.contr./tabstr.
Altura 10
Comprimento Visível 10
Linha 1
Coluna 11
Formato CHAR
Linhas mínimas 10
Texto __________
INCLUIR CAMPO TEXTO "EKKN-PS_PSP_PNR" em tbl.contr./tabstr.
Altura 24
Comprimento Visível 24
Linha 1
Coluna 12
Formato NUMC
Linhas mínimas 8
Texto ________________________
Código função
INCLUIR CAMPO TEXTO "EKKN-NPLNR" em tbl.contr./tabstr.
Altura 12
Comprimento Visível 12
Linha 1
Coluna 13
Formato CHAR
Linhas mínimas 12
Texto ____________
Código função
INCLUIR BOTÃO "V_OKAY"
Altura 4
Comprimento Visível 12
Linha 16
Coluna 2
Formato CHAR
Texto @0V@
Código função OKAY
INCLUIR BOTÃO "V_CANCEL"
Altura 4
Comprimento Visível 10
Linha 16
Coluna 7
Formato CHAR
Texto @0W@
Código função CANCEL
INCLUIR BOTÃO "V_DEL"
Altura 4
Comprimento Visível 9
Linha 16
Coluna 12
Formato CHAR
Texto @11@
Código função DEL
INCLUIR OKCODE ""
MODIFICAR LÓGICA DE PROCESSAMENTO TELA 0113
* >> Início da inclusão:
PROCESS BEFORE OUTPUT.
MODULE status_0113.
LOOP AT itab_ekkn_a WITH CONTROL tc_distri
CURSOR tc_distri-current_line.
MODULE alimenta_ekkn.
ENDLOOP.
PROCESS AFTER INPUT.
LOOP AT itab_ekkn_a.
MODULE alimenta_ekkn_a.
ENDLOOP.
MODULE user_command_0113.
* << Fim da inclusão
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCI017F01
...
FORM executar_evento.
CASE okcode.
* >> Início da inclusão: FORM EXECUTAR_EVENTO
WHEN 'DISTRI'.
IF gc_subscreen-prog = '0200'.
READ TABLE itab_zycit044 WITH KEY mark = 'X'.
IF sy-subrc EQ 0.
PERFORM distribuicao USING itab_zycit044-ebeln
itab_zycit044-ebelp.
ELSE.
MESSAGE w015 WITH text-266.
ENDIF.
ELSEIF gc_subscreen-prog = '0100'.
READ TABLE itab_zycit042 WITH KEY mark = 'X'.
IF sy-subrc EQ 0.
PERFORM distribuicao USING itab_zycit042-ebeln
itab_zycit042-ebelp.
ELSE.
MESSAGE w015 WITH text-266.
ENDIF.
ENDIF.
* << Fim da inclusão
...
...
WHEN 'RECEB'.
* >> Início da inclusão: FORM EXECUTAR_EVENTO
IF v_distribuicao EQ 'S'.
IF itab_ekkn_b[] IS INITIAL.
CLEAR: v_answer.
PERFORM popup_message USING text-271 text-272.
IF v_answer NE 'J'.
PERFORM executa_batch_input.
CLEAR v_modo_bi.
ENDIF.
ELSE.
PERFORM executa_batch_input.
CLEAR v_modo_bi.
ENDIF.
ELSE.
* << Fim da inclusão
PERFORM executa_batch_input.
CLEAR v_modo_bi.
* >> Início da inclusão: FORM EXECUTAR_EVENTO
ENDIF.
* << Fim da inclusão
WHEN 'MODO'.
DATA: v_autoriza ,
v_uname LIKE sy-uname.
CLEAR v_uname.
v_uname = sy-uname.
...
...
FORM fill_date_mr1m.
* >> Início da inclusão: FORM FILL_DATE_MR1M
DATA: lv_menge LIKE itab_itemdata-quantity.
* << Fim da inclusão
...
...
itab_zycit031-wrbtr = itab_custo_item-vlmov.
itab_zycit031-waers = itab_custo_item-waers_mov.
itab_zycit031-meins = itab_itens_nf-meins.
itab_zycit031-mwskz = wa_zycit000-iva.
APPEND itab_zycit031.
itab_zycie033-rmwwr = itab_custo_item-vlmov + itab_zycie033-rmwwr.
itab_zycie033-waers = itab_custo_item-waers_mov.
ENDLOOP.
APPEND itab_zycie033.
IF NOT itab_zycit031[] IS INITIAL.
* >> Início da exclusão: FORM FILL_DATE_MR1M
SELECT ebeln ebelp bprme twrkz bpumz bpumn
* << Fim da exclusão
* >> Início da inclusão: FORM FILL_DATE_MR1M
SELECT ebeln ebelp bprme twrkz bpumz bpumn vrtkz
* << Fim da inclusão
FROM ekpo INTO TABLE itab_ekpo
FOR ALL ENTRIES IN itab_zycit031
WHERE ebeln = itab_zycit031-ebeln
AND ebelp = itab_zycit031-ebelp.
ENDIF.
...
...
IF NOT v_xblnr IS INITIAL.
itab_itemdata-item_text = v_sgtxt.
ENDIF.
APPEND itab_itemdata.
ENDIF.
ENDLOOP.
LOOP AT itab_ekpo WHERE NOT twrkz IS initial.
ENDLOOP.
IF sy-subrc = 0.
IF NOT itab_ekpo[] IS INITIAL.
* >> Início da inclusão: FORM FILL_DATE_MR1M
CLEAR: itab_ekkn_mult[], itab_ekkn_mult.
* << Fim da inclusão
SELECT * FROM ekkn INTO TABLE itab_ekkn_mult
FOR ALL ENTRIES IN itab_ekpo
WHERE ebeln = itab_ekpo-ebeln AND
ebelp = itab_ekpo-ebelp.
* >> Início da inclusão: FORM FILL_DATE_MR1M
IF NOT itab_ekkn_mult[] IS INITIAL.
PERFORM trata_itab_ekkn_mult.
ENDIF.
CLEAR: itab_zycit510, itab_zycit510[].
* << Fim da inclusão
ENDIF.
LOOP AT itab_zycit031.
READ TABLE itab_ekpo WITH KEY ebeln = itab_zycit031-ebeln
ebelp = itab_zycit031-ebelp
twrkz = 'X'.
LOOP AT itab_ekpo WHERE ebeln = itab_zycit031-ebeln AND
ebelp = itab_zycit031-ebelp AND
NOT twrkz IS initial.
ENDLOOP.
IF sy-subrc EQ 0.
* >> Início da exclusão: FORM FILL_DATE_MR1M
CLEAR v_indice.
* << Fim da exclusão
* >> Início da inclusão: FORM FILL_DATE_MR1M
CLEAR: v_indice, lv_menge.
* << Fim da inclusão
LOOP AT itab_ekkn_mult WHERE ebeln = itab_zycit031-ebeln AND
ebelp = itab_zycit031-ebelp.
* >> Início da inclusão: FORM FILL_DATE_MR1M
lv_menge = lv_menge + itab_ekkn_mult-menge.
* << Fim da inclusão
v_indice = v_indice + 1.
ENDLOOP.
CLEAR: v_cont2, v_quantity, v_amount.
LOOP AT itab_ekkn_mult WHERE ebeln = itab_zycit031-ebeln AND
ebelp = itab_zycit031-ebelp.
v_cont2 = v_cont2 + 1.
READ TABLE itab_itemdata
WITH KEY po_number = itab_zycit031-ebeln
po_item = itab_zycit031-ebelp.
* >> Início da inclusão: FORM FILL_DATE_MR1M
READ TABLE itab_zycit003 WITH KEY ebeln = itab_zycit031-ebeln
ebelp = itab_zycit031-ebelp.
* << Fim da inclusão
IF v_cont2 = v_indice.
v_item_amount = itab_zycit031-wrbtr - v_amount.
itab_account-quantity = itab_zycit031-menge - v_quantity.
itab_account-item_amount = v_item_amount.
* >> Início da inclusão: FORM FILL_DATE_MR1M
IF itab_ekpo-vrtkz = '1'.
PERFORM preenche_zycit510.
ENDIF.
ELSE.
IF ( itab_zycit031-menge = itab_zycit003-menge AND
itab_ekpo-vrtkz = '1' ) OR
( itab_ekkn_mult-v_parcial = 'X' ).
itab_account-quantity = itab_ekkn_mult-menge.
v_item_amount2 = itab_zycit031-wrbtr
/ itab_zycit031-menge * itab_ekkn_mult-menge .
itab_account-item_amount = v_item_amount2.
PERFORM preenche_zycit510.
ELSE.
IF itab_ekpo-vrtkz = '1'.
IF itab_zycit031-menge = lv_menge.
itab_account-quantity = itab_ekkn_mult-menge.
v_item_amount2 = itab_zycit031-wrbtr
/ itab_zycit031-menge * itab_ekkn_mult-menge.
itab_account-item_amount = v_item_amount2.
* << Fim da inclusão
ELSE.
* >> Início da inclusão: FORM FILL_DATE_MR1M
itab_account-quantity = itab_zycit031-menge / v_indice.
IF itab_account-quantity > itab_ekkn_mult-menge.
itab_account-quantity = itab_ekkn_mult-menge.
* << Fim da inclusão
v_item_amount2 = itab_zycit031-wrbtr
* >> Início da inclusão: FORM FILL_DATE_MR1M
/ itab_zycit031-menge * itab_ekkn_mult-menge.
ELSE.
v_item_amount2 = itab_zycit031-wrbtr / v_indice.
ENDIF.
itab_account-item_amount = v_item_amount2.
ENDIF.
PERFORM preenche_zycit510.
ELSE.
itab_account-quantity = itab_zycit031-menge
* << Fim da inclusão
/ 100 * itab_ekkn_mult-vproz .
* >> Início da exclusão: FORM FILL_DATE_MR1M
itab_account-quantity = itab_zycit031-menge
* << Fim da exclusão
* >> Início da inclusão: FORM FILL_DATE_MR1M
v_item_amount2 = itab_zycit031-wrbtr
* << Fim da inclusão
/ 100 * itab_ekkn_mult-vproz .
* >> Início da inclusão: FORM FILL_DATE_MR1M
itab_account-item_amount = v_item_amount2.
ENDIF.
ENDIF.
* << Fim da inclusão
v_quantity = v_quantity + itab_account-quantity.
* >> Início da exclusão: FORM FILL_DATE_MR1M
itab_account-item_amount = v_item_amount2.
* << Fim da exclusão
v_amount = v_amount + itab_account-item_amount.
ENDIF.
itab_account-invoice_doc_item = itab_itemdata-invoice_doc_item.
itab_account-serial_no = itab_ekkn_mult-zekkn.
IF wa_zycit000-iva IS INITIAL.
SELECT SINGLE mwskz FROM ekpo
...
...
itemdata = itab_itemdata
accountingdata = itab_account
return = itab_return.
READ TABLE itab_return INTO wa_return INDEX 1.
IF sy-subrc EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
* >> Início da inclusão: FORM FILL_DATE_MR1M
IF NOT itab_zycit510[] IS INITIAL.
PERFORM grava_zycit510.
ENDIF.
* << Fim da inclusão
ENDIF.
PERFORM atualiza_dados_miro.
ENDFORM.
...
...
* >> Início da inclusão:
FORM distribuicao USING p_ebeln
p_ebelp.
DATA: v_vrtkz TYPE ekpo-vrtkz,
lv_tabix LIKE sy-tabix.
CLEAR: v_vrtkz.
SELECT SINGLE vrtkz FROM ekpo
INTO v_vrtkz
WHERE ebeln = p_ebeln
AND ebelp = p_ebelp.
IF sy-subrc EQ 0 AND v_vrtkz EQ 1.
CLEAR: itab_ekkn_a, itab_ekkn_a[], itab_zycit510, itab_zycit510[].
SELECT * FROM ekkn
INTO TABLE itab_ekkn_a
WHERE ebeln = p_ebeln
AND ebelp = p_ebelp.
IF v_existe_nfr EQ 'S'.
SELECT * FROM /pws/zycit510
INTO TABLE itab_zycit510
WHERE nrseqnf = /pws/zycie043-nrseq
AND nrseq = /pws/zycit001-nrseq
AND nfglobal = /pws/zycie043-nfglobal
AND nfremessa = /pws/zycie043-nfremessa
AND ebeln = p_ebeln
AND ebelp = p_ebelp.
ELSE.
SELECT * FROM /pws/zycit510
INTO TABLE itab_zycit510
WHERE nrseqnf = /pws/zycie041-nrseq
AND nrseq = /pws/zycit001-nrseq
AND nfglobal = /pws/zycie041-nfglobal
AND ebeln = p_ebeln
AND ebelp = p_ebelp.
ENDIF.
IF NOT itab_zycit510[] IS INITIAL.
LOOP AT itab_ekkn_a.
lv_tabix = sy-tabix.
READ TABLE itab_zycit510 WITH KEY zekkn = itab_ekkn_a-zekkn.
IF sy-subrc NE 0.
DELETE itab_ekkn_a INDEX lv_tabix.
ELSE.
itab_ekkn_a-menge = itab_zycit510-menge.
MODIFY itab_ekkn_a INDEX lv_tabix.
ENDIF.
ENDLOOP.
ELSE.
SELECT * FROM /pws/zycit510
INTO TABLE itab_zycit510
WHERE ebeln = p_ebeln
AND ebelp = p_ebelp.
IF NOT itab_zycit510[] IS INITIAL.
LOOP AT itab_zycit510.
IF v_existe_nfr EQ 'S' AND
itab_zycit510-nrseq = /pws/zycit001-nrseq AND
itab_zycit510-nfremessa IS INITIAL.
DELETE FROM /pws/zycit510 WHERE
nrseqnf = itab_zycit510-nrseqnf
AND nrseq = itab_zycit510-nrseq
AND nfglobal = itab_zycit510-nfglobal
AND nfremessa = itab_zycit510-nfremessa
AND ebeln = itab_zycit510-ebeln
AND ebelp = itab_zycit510-ebelp.
IF sy-subrc EQ 0.
COMMIT WORK AND WAIT.
ENDIF.
DELETE itab_zycit510 WHERE
nrseqnf = itab_zycit510-nrseqnf
AND nrseq = itab_zycit510-nrseq
AND nfglobal = itab_zycit510-nfglobal
AND nfremessa = itab_zycit510-nfremessa
AND ebeln = itab_zycit510-ebeln
AND ebelp = itab_zycit510-ebelp.
CONTINUE.
ENDIF.
READ TABLE itab_ekkn_a WITH KEY zekkn = itab_zycit510-zekkn.
IF sy-subrc EQ 0.
lv_tabix = sy-tabix.
itab_ekkn_a-menge = itab_ekkn_a-menge - itab_zycit510-menge.
MODIFY itab_ekkn_a INDEX lv_tabix.
ENDIF.
ENDLOOP.
DELETE itab_ekkn_a WHERE menge = '0.000'.
ENDIF.
ENDIF.
IF NOT itab_ekkn_a[] IS INITIAL.
CLEAR: itab_ekkn_a, itab_ekkn_c, itab_ekkn_c[].
itab_ekkn_c[] = itab_ekkn_a[].
CALL SCREEN '0113' STARTING AT 10 2.
ENDIF.
ELSE.
MESSAGE w015 WITH text-270.
ENDIF.
ENDFORM.
FORM alimenta_itab_ekkn_b.
CLEAR: itab_zycit510, itab_zycit510[].
DELETE itab_ekkn_b WHERE ebeln = itab_ekkn_a-ebeln
AND ebelp = itab_ekkn_a-ebelp.
LOOP AT itab_ekkn_a.
itab_ekkn_b = itab_ekkn_a.
APPEND itab_ekkn_b.
CHECK NOT itab_ekkn_a-menge IS INITIAL.
IF v_existe_nfr EQ 'S'.
itab_zycit510-nrseqnf = /pws/zycie043-nrseq.
itab_zycit510-nrseq = /pws/zycit001-nrseq.
itab_zycit510-nfglobal = /pws/zycie043-nfglobal.
itab_zycit510-nfremessa = /pws/zycie043-nfremessa.
itab_zycit510-ebeln = itab_ekkn_a-ebeln.
itab_zycit510-ebelp = itab_ekkn_a-ebelp.
itab_zycit510-zekkn = itab_ekkn_a-zekkn.
itab_zycit510-menge = itab_ekkn_a-menge.
ELSE.
itab_zycit510-nrseqnf = /pws/zycie041-nrseq.
itab_zycit510-nrseq = /pws/zycit001-nrseq.
itab_zycit510-nfglobal = /pws/zycie041-nfglobal.
itab_zycit510-ebeln = itab_ekkn_a-ebeln.
itab_zycit510-ebelp = itab_ekkn_a-ebelp.
itab_zycit510-zekkn = itab_ekkn_a-zekkn.
itab_zycit510-menge = itab_ekkn_a-menge.
ENDIF.
APPEND itab_zycit510.
ENDLOOP.
IF NOT itab_zycit510[] IS INITIAL.
DELETE FROM /pws/zycit510 WHERE nrseqnf = itab_zycit510-nrseqnf
AND nrseq = itab_zycit510-nrseq
AND nfglobal = itab_zycit510-nfglobal
AND nfremessa = itab_zycit510-nfremessa
AND ebeln = itab_zycit510-ebeln
AND ebelp = itab_zycit510-ebelp.
MODIFY /pws/zycit510 FROM TABLE itab_zycit510.
COMMIT WORK AND WAIT.
ENDIF.
ENDFORM.
FORM deletar_registros.
DELETE itab_ekkn_b WHERE ebeln = itab_ekkn_a-ebeln
AND ebelp = itab_ekkn_a-ebelp.
IF v_existe_nfr EQ 'S'.
DELETE FROM /pws/zycit510 WHERE nrseqnf = /pws/zycie043-nrseq
AND nrseq = /pws/zycit001-nrseq
AND nfglobal = /pws/zycie043-nfglobal
AND nfremessa = /pws/zycie043-nfremessa
AND ebeln = itab_ekkn_a-ebeln
AND ebelp = itab_ekkn_a-ebelp.
ELSE.
DELETE FROM /pws/zycit510 WHERE nrseqnf = /pws/zycie041-nrseq
AND nrseq = /pws/zycit001-nrseq
AND nfglobal = /pws/zycie041-nfglobal
AND ebeln = itab_ekkn_a-ebeln
AND ebelp = itab_ekkn_a-ebelp.
ENDIF.
COMMIT WORK AND WAIT.
LEAVE TO SCREEN 0.
ENDFORM.
FORM preenche_zycit510.
CHECK itab_ekpo-vrtkz = '1'.
IF v_existe_nfr EQ 'S'.
itab_zycit510-nrseqnf = /pws/zycie043-nrseq.
itab_zycit510-nrseq = /pws/zycit001-nrseq.
itab_zycit510-nfglobal = /pws/zycie043-nfglobal.
itab_zycit510-nfremessa = /pws/zycie043-nfremessa.
itab_zycit510-ebeln = itab_ekkn_mult-ebeln.
itab_zycit510-ebelp = itab_ekkn_mult-ebelp.
itab_zycit510-zekkn = itab_ekkn_mult-zekkn.
itab_zycit510-menge = itab_account-quantity.
ELSE.
itab_zycit510-nrseqnf = /pws/zycie041-nrseq.
itab_zycit510-nrseq = /pws/zycit001-nrseq.
itab_zycit510-nfglobal = /pws/zycie041-nfglobal.
itab_zycit510-ebeln = itab_ekkn_mult-ebeln.
itab_zycit510-ebelp = itab_ekkn_mult-ebelp.
itab_zycit510-zekkn = itab_ekkn_mult-zekkn.
itab_zycit510-menge = itab_account-quantity.
ENDIF.
APPEND itab_zycit510.
ENDFORM.
FORM grava_zycit510.
LOOP AT itab_zycit510.
DELETE FROM /pws/zycit510 WHERE nrseqnf = itab_zycit510-nrseqnf
AND nrseq = itab_zycit510-nrseq
AND nfglobal = itab_zycit510-nfglobal
AND nfremessa = itab_zycit510-nfremessa
AND ebeln = itab_zycit510-ebeln
AND ebelp = itab_zycit510-ebelp.
ENDLOOP.
MODIFY /pws/zycit510 FROM TABLE itab_zycit510.
COMMIT WORK AND WAIT.
ENDFORM.
FORM trata_itab_ekkn_mult.
DATA: lv_tabix LIKE sy-tabix.
CLEAR: itab_zycit510, itab_zycit510[].
IF v_existe_nfr EQ 'S'.
SELECT * FROM /pws/zycit510
INTO TABLE itab_zycit510
FOR ALL ENTRIES IN itab_ekkn_mult
WHERE nrseqnf = /pws/zycie043-nrseq
AND nrseq = /pws/zycit001-nrseq
AND nfglobal = /pws/zycie043-nfglobal
AND nfremessa = /pws/zycie043-nfremessa
AND ebeln = itab_ekkn_mult-ebeln
AND ebelp = itab_ekkn_mult-ebelp
AND zekkn = itab_ekkn_mult-zekkn.
ELSE.
SELECT * FROM /pws/zycit510
INTO TABLE itab_zycit510
FOR ALL ENTRIES IN itab_ekkn_mult
WHERE nrseqnf = /pws/zycie041-nrseq
AND nrseq = /pws/zycit001-nrseq
AND nfglobal = /pws/zycie041-nfglobal
AND ebeln = itab_ekkn_mult-ebeln
AND ebelp = itab_ekkn_mult-ebelp
AND zekkn = itab_ekkn_mult-zekkn.
ENDIF.
IF NOT itab_zycit510[] IS INITIAL.
LOOP AT itab_ekkn_mult.
lv_tabix = sy-tabix.
READ TABLE itab_zycit510 WITH KEY ebeln = itab_ekkn_mult-ebeln
ebelp = itab_ekkn_mult-ebelp
zekkn = itab_ekkn_mult-zekkn.
IF sy-subrc NE 0.
READ TABLE itab_ekpo WITH KEY ebeln = itab_ekkn_mult-ebeln
ebelp = itab_ekkn_mult-ebelp.
IF itab_ekpo-vrtkz EQ '1'.
DELETE itab_ekkn_mult INDEX lv_tabix.
ENDIF.
ELSE.
itab_ekkn_mult-menge = itab_zycit510-menge.
itab_ekkn_mult-v_parcial = 'X'.
MODIFY itab_ekkn_mult INDEX lv_tabix.
ENDIF.
ENDLOOP.
ELSE.
SELECT * FROM /pws/zycit510
INTO TABLE itab_zycit510
FOR ALL ENTRIES IN itab_ekkn_mult
WHERE ebeln = itab_ekkn_mult-ebeln
AND ebelp = itab_ekkn_mult-ebelp.
IF NOT itab_zycit510[] IS INITIAL.
LOOP AT itab_zycit510.
IF v_existe_nfr EQ 'S' AND
itab_zycit510-nrseq = /pws/zycit001-nrseq AND
itab_zycit510-nfremessa IS INITIAL.
DELETE FROM /pws/zycit510 WHERE
nrseqnf = itab_zycit510-nrseqnf
AND nrseq = itab_zycit510-nrseq
AND nfglobal = itab_zycit510-nfglobal
AND nfremessa = itab_zycit510-nfremessa
AND ebeln = itab_zycit510-ebeln
AND ebelp = itab_zycit510-ebelp.
IF sy-subrc EQ 0.
COMMIT WORK AND WAIT.
ENDIF.
DELETE itab_zycit510 WHERE
nrseqnf = itab_zycit510-nrseqnf
AND nrseq = itab_zycit510-nrseq
AND nfglobal = itab_zycit510-nfglobal
AND nfremessa = itab_zycit510-nfremessa
AND ebeln = itab_zycit510-ebeln
AND ebelp = itab_zycit510-ebelp.
CONTINUE.
ENDIF.
READ TABLE itab_ekkn_mult WITH KEY ebeln = itab_zycit510-ebeln
ebelp = itab_zycit510-ebelp
zekkn = itab_zycit510-zekkn.
IF sy-subrc EQ 0.
lv_tabix = sy-tabix.
itab_ekkn_mult-menge =
itab_ekkn_mult-menge - itab_zycit510-menge.
MODIFY itab_ekkn_mult INDEX lv_tabix.
ENDIF.
ENDLOOP.
DELETE itab_ekkn_mult WHERE menge = '0.000'.
ENDIF.
ENDIF.
ENDFORM.
FORM verifica_item.
LOOP AT itab_ekkn_a.
READ TABLE itab_ekkn_c WITH KEY ebeln = itab_ekkn_a-ebeln
ebelp = itab_ekkn_a-ebelp
zekkn = itab_ekkn_a-zekkn.
IF sy-subrc EQ 0 AND itab_ekkn_a-menge > itab_ekkn_c-menge.
MESSAGE e015 WITH text-275 itab_ekkn_c-menge
text-276 itab_ekkn_a-zekkn.
ENDIF.
ENDLOOP.
ENDFORM.
* << Fim da inclusão
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCI017I01
...
WHEN '0050' OR '0100' OR '0200' .
* >> Início da inclusão: MODULE USER_COMMAND_EXIT
CLEAR: itab_ekkn_b, itab_ekkn_b[].
* << Fim da inclusão
...
...
* >> Início da inclusão:
MODULE alimenta_ekkn_a INPUT.
itab_ekkn_a = ekkn.
MODIFY itab_ekkn_a INDEX tc_distri-current_line.
ENDMODULE.
MODULE user_command_0113 INPUT.
DATA: lv_menge TYPE /pws/zycit003-qtd_iten,
lv_menge_a TYPE /pws/zycit044-qtd_item.
IF sy-ucomm EQ 'CANCEL'.
LEAVE TO SCREEN 0.
ELSEIF sy-ucomm EQ 'DEL'.
PERFORM deletar_registros.
ELSEIF sy-ucomm EQ 'OKAY'.
READ TABLE itab_zycit003 WITH KEY ebeln = itab_ekkn_a-ebeln
ebelp = itab_ekkn_a-ebelp.
IF sy-subrc EQ 0.
CLEAR: lv_menge, lv_menge_a.
LOOP AT itab_ekkn_a.
lv_menge = lv_menge + itab_ekkn_a-menge.
ENDLOOP.
lv_menge_a = lv_menge.
IF v_existe_nfr EQ 'S'.
READ TABLE itab_zycit044 WITH KEY ebeln = itab_ekkn_a-ebeln
ebelp = itab_ekkn_a-ebelp.
IF sy-subrc EQ 0.
IF lv_menge_a = itab_zycit044-qtd_item.
PERFORM verifica_item.
PERFORM alimenta_itab_ekkn_b.
LEAVE TO SCREEN 0.
ELSE.
MESSAGE w015 WITH text-273 text-274.
ENDIF.
ENDIF.
ELSE.
IF lv_menge = itab_zycit003-qtd_iten.
PERFORM verifica_item.
PERFORM alimenta_itab_ekkn_b.
LEAVE TO SCREEN 0.
ELSE.
MESSAGE w015 WITH text-273 text-274.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDMODULE.
* << Fim da inclusão
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCI017O01
...
MODULE status_0050 OUTPUT.
* >> Início da inclusão: MODULE STATUS_0050
DATA: BEGIN OF lt_ekpo OCCURS 0,
ebeln TYPE ekpo-ebeln,
ebelp TYPE ekpo-ebelp,
vrtkz TYPE ekpo-vrtkz,
END OF lt_ekpo.
CLEAR: lt_ekpo, lt_ekpo[], v_distribuicao, itab_pf_status,
itab_pf_status[].
* << Fim da inclusão
CASE gc_subscreen-prog.
WHEN '0200'.
IF sy-tcode EQ '/PWS/ZYCI017_E'
OR v_tcode = '/PWS/ZYCI017_E'.
READ TABLE itab_zycit044 WITH KEY serie = 'X'.
IF sy-subrc NE 0.
it_code-fcode = 'SERIE'. APPEND it_code.
ENDIF.
it_code-fcode = 'REPL'. APPEND it_code.
it_code-fcode = 'LOTE'. APPEND it_code.
it_code-fcode = 'ESTOR'. APPEND it_code.
it_code-fcode = 'RECEB'. APPEND it_code.
SET PF-STATUS '0200' EXCLUDING it_code.
SET TITLEBAR '0200'.
ELSE.
* >> Início da inclusão: MODULE STATUS_0050
IF NOT /pws/zycie043-belnr_mr1m IS INITIAL.
itab_pf_status-fcode = 'DISTRI'.
APPEND itab_pf_status.
ENDIF.
IF NOT itab_zycit044[] IS INITIAL.
SELECT ebeln ebelp vrtkz FROM ekpo
INTO TABLE lt_ekpo
FOR ALL ENTRIES IN itab_zycit044
WHERE ebeln = itab_zycit044-ebeln
AND ebelp = itab_zycit044-ebelp.
LOOP AT itab_zycit044.
READ TABLE lt_ekpo WITH KEY ebeln = itab_zycit044-ebeln
ebelp = itab_zycit044-ebelp.
READ TABLE itab_zycit003 WITH KEY ebeln = itab_zycit044-ebeln
ebelp = itab_zycit044-ebelp.
IF itab_zycit044-qtd_item <> itab_zycit003-menge AND
lt_ekpo-vrtkz = '1'.
v_distribuicao = 'S'.
ENDIF.
ENDLOOP.
IF v_distribuicao NE 'S'.
itab_pf_status-fcode = 'DISTRI'.
APPEND itab_pf_status.
ENDIF.
ENDIF.
* << Fim da inclusão
...
...
WHEN '0100'.
* >> Início da inclusão: MODULE STATUS_0050
IF NOT /pws/zycie041-belnr_mr1m IS INITIAL.
itab_pf_status-fcode = 'DISTRI'.
APPEND itab_pf_status.
ENDIF.
IF NOT itab_zycit042[] IS INITIAL.
SELECT ebeln ebelp vrtkz FROM ekpo
INTO TABLE lt_ekpo
FOR ALL ENTRIES IN itab_zycit042
WHERE ebeln = itab_zycit042-ebeln
AND ebelp = itab_zycit042-ebelp.
LOOP AT itab_zycit042.
READ TABLE lt_ekpo WITH KEY ebeln = itab_zycit042-ebeln
ebelp = itab_zycit042-ebelp.
READ TABLE itab_zycit003 WITH KEY ebeln = itab_zycit042-ebeln
ebelp = itab_zycit042-ebelp.
IF itab_zycit042-qtd_iten <> itab_zycit003-menge AND
lt_ekpo-vrtkz = '1'.
v_distribuicao = 'S'.
ENDIF.
ENDLOOP.
IF v_distribuicao NE 'S'.
itab_pf_status-fcode = 'DISTRI'.
APPEND itab_pf_status.
ENDIF.
ENDIF.
* << Fim da inclusão
...
...
* >> Início da inclusão:
MODULE alimenta_ekkn OUTPUT.
ekkn-ebeln = itab_ekkn_a-ebeln.
ekkn-ebelp = itab_ekkn_a-ebelp.
ekkn-zekkn = itab_ekkn_a-zekkn.
ekkn-menge = itab_ekkn_a-menge.
ekkn-sakto = itab_ekkn_a-sakto.
ekkn-gsber = itab_ekkn_a-gsber.
ekkn-kostl = itab_ekkn_a-kostl.
ekkn-anln1 = itab_ekkn_a-anln1.
ekkn-anln2 = itab_ekkn_a-anln2.
ekkn-aufnr = itab_ekkn_a-aufnr.
ekkn-prctr = itab_ekkn_a-prctr.
ekkn-ps_psp_pnr = itab_ekkn_a-ps_psp_pnr.
ekkn-nplnr = itab_ekkn_a-nplnr.
ENDMODULE.
MODULE status_0113 OUTPUT.
DESCRIBE TABLE itab_ekkn_a LINES tc_distri-lines.
SET PF-STATUS '0113'.
SET TITLEBAR '113'.
ENDMODULE.
* << Fim da inclusão
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCI017TOP
...
CONTROLS:
* >> Início da inclusão:
tc_distri TYPE TABLEVIEW USING SCREEN '0113',
* << Fim da inclusão
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCI017X01
TABLES:
* >> Início da inclusão:
ekkn,
/pws/zycit510,
* << Fim da inclusão
...
...
DATA: BEGIN OF itab_ekpo OCCURS 0,
ebeln LIKE ekpo-ebeln,
ebelp LIKE ekpo-ebelp,
bprme LIKE ekpo-bprme,
twrkz LIKE ekpo-twrkz,
bpumz TYPE ekpo-bpumz,
bpumn TYPE ekpo-bpumn,
* >> Início da inclusão:
vrtkz TYPE ekpo-vrtkz,
* << Fim da inclusão
END OF itab_ekpo.
...
...
* >> Início da exclusão:
DATA itab_ekkn_mult LIKE ekkn OCCURS 0 WITH HEADER LINE.
* << Fim da exclusão
* >> Início da inclusão:
DATA: BEGIN OF itab_ekkn_mult OCCURS 0.
INCLUDE STRUCTURE ekkn.
DATA: v_parcial.
DATA: END OF itab_ekkn_mult.
* << Fim da inclusão
...
...
* >> Início da inclusão:
DATA: v_distribuicao.
DATA: itab_ekkn_a LIKE ekkn OCCURS 0 WITH HEADER LINE,
itab_ekkn_b LIKE ekkn OCCURS 0 WITH HEADER LINE,
itab_ekkn_c LIKE ekkn OCCURS 0 WITH HEADER LINE,
itab_zycit510 LIKE /pws/zycit510 OCCURS 0 WITH HEADER LINE.
* << Fim da inclusão
DATA: END OF COMMON PART.
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPT /PWS/SAPMZYCI017
------------------------------------------------------------------------
Incluído símbolo de texto:
Idioma: PT
Símbolo: 270
Texto: (51 caracteres)
"Este Pedido/Item não tem distribuição quantitativa."
Comprimento máximo: 51
------------------------------------------------------------------------
Incluído símbolo de texto:
Idioma: PT
Símbolo: 271
Texto: (56 caracteres)
"Pedido possui Distribuição Quantitativa, deseja alterar?"
Comprimento máximo: 56
------------------------------------------------------------------------
Incluído símbolo de texto:
Idioma: PT
Símbolo: 272
Texto: (7 caracteres)
"Atenção"
Comprimento máximo: 7
------------------------------------------------------------------------
Incluído símbolo de texto:
Idioma: PT
Símbolo: 273
Texto: (37 caracteres)
"Distribuição quantitativa é diferente"
Comprimento máximo: 37
------------------------------------------------------------------------
Incluído símbolo de texto:
Idioma: PT
Símbolo: 274
Texto: (26 caracteres)
"da quantidade do embarque."
Comprimento máximo: 27
------------------------------------------------------------------------
Incluído símbolo de texto:
Idioma: PT
Símbolo: 275
Texto: (28 caracteres)
"Quantidade máxima permitida:"
Comprimento máximo: 41
------------------------------------------------------------------------
Incluído símbolo de texto:
Idioma: PT
Símbolo: 276
Texto: (22 caracteres)
"para o N° seq. ClCont:"
Comprimento máximo: 30
----------------------------------------------------------------------------------------------------
Modificações efetuadas em TABL /PWS/ZYCIT510
CRIAR TABELA TRANSPARENTE: /PWS/ZYCIT510
DESCRIÇÃO BREVE: Recebimento com rateio quantitativo
* CARACTERÍSTICAS
CATEGORIA DA TABELA: Tabela transparente
CLASSE DE ENTREGA: A - Tabela de aplicação (dados mestre e de movimento)
(X) - AUTUALIZAÇÃO DE TABELAS PERMITIDA
* CAMPOS NOVOS
CAMPOS: TP. CAMPO CHV.
MANDT MANDT X
NRSEQNF /PWS/ZYCIL001 X
NRSEQ /PWS/ZYCIL001 X
NFGLOBAL /PWS/ZYCIL105 X
NFREMESSA /PWS/ZYCIL107 X
EBELN EBELN X
EBELP EBELP X
ZEKKN DZEKKN X
MENGE MENGE_D
* OPÇÕES TÉCNICAS
TIPO DE DADOS: APPL1 - Dados de movimento, tabelas transparentes
CATEGOR. TAMANHO: 3 - Registros dados esperados: 160.000 Até 660.000
(X) - AR. BUFFER NÃO PERMITIDO
(X) - AR. BUFFER NÃO PERMITIDO
(X) - AR. BUFFER NÃO PERMITIDO
(X) - AR. BUFFER NÃO PERMITIDO
(X) - AR. BUFFER NÃO PERMITIDO
(X) - AR. BUFFER NÃO PERMITIDO
(X) - AR. BUFFER NÃO PERMITIDO
(X) - AR. BUFFER NÃO PERMITIDO