Módulo: DRAWBACK
Funcionalidade: Entrada de NF Mercado Interno
Data/Hora da Publicação: 05/09/2008 00:00:00
Data/Hora Última Alteração: 17/02/2011 15:28:30
Descrição da Nota: AJUSTE NA VINCULAÇÃO E ESTORNO DA VINCULAÇÃO AO ATO CONCESSÓRIO
Sintoma
Ao desvincular o ato concessório e eliminar a entrada de nota fiscal o programa não devolve o saldo
disponivel para vinculação para o item do ato concessório.
Solução
Atualização do programa de nota fiscal para ao salvar ou excluir a entrada de nota fiscal o programa
retorne o saldo para o registro gravado no banco de dados.
7.0
Produto:
Nota
Descrição
Informações Complementares
----------------------------------------------------------------------------------------------------
Nota Número 07261 Data: 05/09/2008 Hora: 10:30:47
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Nota Número : 07261
Categoria : Erro de Programa
Prioridade : Média
Versão PW.CE : 7.0
Pacote : 00006
Agrupamento : 00063
----------------------------------------------------------------------------------------------------
Referência às notas relacionadas:
Número - Ordem - Versão - Pacote - Descrição Breve
07060 - 00001 - 7.0 - 00006 - ENTRADA DE NOTAS NOS ATOS CONCESSÓRIOS DO TIPO SUSPENSÃO
----------------------------------------------------------------------------------------------------
AJUSTE NA VINCULAÇÃO E ESTORNO DA VINCULAÇÃO AO ATO CONCESSÓRIO
----------------------------------------------------------------------------------------------------
Palavras Chave:
VINCULAÇÃO - DESVINCULAÇÃO - SALDO - ENTRADA - NOTA - FISCAL - ATO
CONCESSÓRIO - /PWS/SAPMZYCI052
----------------------------------------------------------------------------------------------------
Objetos da nota:
REPS /PWS/MZYCI052F01
REPS /PWS/MZYCI052I01
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCI052F01
...
FORM salvar_dados.
* >> Início da inclusão: FORM SALVAR_DADOS
CLEAR: itab_zycit245, itab_zycit330.
LOOP AT itab_zycit330 WHERE nrseqd EQ space.
MESSAGE e104 WITH text-016.
EXIT.
ENDLOOP.
IF NOT itab_zycit330 IS INITIAL.
EXIT.
ENDIF.
* << Fim da inclusão
MODIFY /pws/zycit329 FROM /pws/zycie329.
REFRESH: itab_zycit330_des.
SELECT * FROM /pws/zycit330 INTO TABLE itab_zycit330_des
WHERE docnum = /pws/zycie329-docnum.
REFRESH itab_zycit245_des.
IF NOT itab_zycit330_des[] IS INITIAL.
SELECT * FROM /pws/zycit245 INTO TABLE itab_zycit245_des
FOR ALL ENTRIES IN itab_zycit330_des
WHERE nrseqd EQ itab_zycit330_des-nrseqd.
* >> Início da inclusão: FORM SALVAR_DADOS
REFRESH itab_zycit279_d.
SELECT * FROM /pws/zycit279 INTO TABLE itab_zycit279_d
FOR ALL ENTRIES IN itab_zycit330_des
WHERE docnum EQ itab_zycit330_des-docnum
AND buzei EQ itab_zycit330_des-buzei.
* << Fim da inclusão
ENDIF.
IF v_tcode EQ '/PWS/ZYCI052_A'.
DELETE FROM /pws/zycit330 WHERE docnum = /pws/zycie329-docnum.
ENDIF.
MODIFY /pws/zycit330 FROM TABLE itab_zycit330.
IF NOT itab_zycit330[] IS INITIAL.
SELECT ebeln ebelp matnr FROM ekpo INTO TABLE itab_ekpo
FOR ALL ENTRIES IN itab_zycit330
WHERE ebeln = itab_zycit330-ebeln AND
ebelp = itab_zycit330-ebelp.
SELECT * FROM j_1bnflin INTO TABLE itab_j_1bnflin
WHERE docnum EQ /pws/zycie329-docnum.
REFRESH itab_zycit245.
SELECT * FROM /pws/zycit245 INTO TABLE itab_zycit245
FOR ALL ENTRIES IN itab_zycit330
WHERE nrseqd EQ itab_zycit330-nrseqd
AND nritem EQ itab_zycit330-nritem.
* >> Início da inclusão: FORM SALVAR_DADOS
ENDIF.
IF v_tcode EQ '/PWS/ZYCI052_C' OR
v_tcode EQ '/PWS/ZYCI052_A'.
IF NOT itab_zycit279_d[] IS INITIAL.
LOOP AT itab_zycit279_d.
READ TABLE itab_zycit330_des
WITH KEY docnum = itab_zycit279_d-docnum
buzei = itab_zycit279_d-buzei.
READ TABLE itab_zycit245_des
WITH KEY nrseqd = itab_zycit330_des-nrseqd
nritem = itab_zycit330_des-nritem.
itab_zycit245_des-vlvinc = itab_zycit245_des-vlvinc -
itab_zycit279_d-vltot.
IF /pws/zycit321-apr_imp IS INITIAL OR
itab_zycit244-tipo EQ 'F'.
itab_zycit245_des-vinculado =
itab_zycit245_des-vinculado - itab_zycit279_d-menge.
ENDIF.
IF itab_zycit245_des-vinculado <= 0.
itab_zycit245_des-vinculado = 0.
ENDIF.
IF itab_zycit245_des-vlvinc <= 0.
itab_zycit245_des-vlvinc = 0.
ENDIF.
MODIFY itab_zycit245_des TRANSPORTING vinculado vlvinc
WHERE nrseqd EQ itab_zycit330_d-nrseqd
AND nritem EQ itab_zycit330_d-nritem.
itab_zycit245 = itab_zycit245_des.
MODIFY itab_zycit245 TRANSPORTING vinculado vlvinc
WHERE nrseqd EQ itab_zycit330_d-nrseqd
AND nritem EQ itab_zycit330_d-nritem.
UPDATE /pws/zycit245
SET vlvinc = itab_zycit245_des-vlvinc
vinculado = itab_zycit245_des-vinculado
WHERE nrseqd EQ itab_zycit245_des-nrseqd
AND nritem EQ itab_zycit245_des-nritem.
ENDLOOP.
DELETE /pws/zycit279 FROM TABLE itab_zycit279_d.
* << Fim da inclusão
ENDIF.
* >> Início da exclusão: FORM SALVAR_DADOS
IF v_tcode EQ '/PWS/ZYCI052_C'.
* << Fim da exclusão
REFRESH: itab_zycit279.
LOOP AT itab_zycit330.
READ TABLE itab_ekpo WITH KEY ebeln = itab_zycit330-ebeln
ebelp = itab_zycit330-ebelp.
IF sy-subrc EQ 0.
MOVE itab_ekpo-matnr TO /pws/zycit279-matnr.
...
...
/pws/zycit279-vlfrete = itab_j_1bnflin-netfre.
/pws/zycit279-vlseg = itab_j_1bnflin-netins.
/pws/zycit279-um_base = /pws/zycit279-meins.
PERFORM converte_um_base USING /pws/zycit279-matnr
CHANGING /pws/zycit279-um_base
/pws/zycit279-qtd_iten.
DELETE FROM /pws/zycit279 WHERE docnum EQ itab_zycit330-docnum
AND buzei EQ itab_zycit330-buzei.
MODIFY /pws/zycit279 FROM /pws/zycit279.
APPEND /pws/zycit279 TO itab_zycit279.
* >> Início da exclusão: FORM SALVAR_DADOS
CLEAR: itab_zycit330_des.
READ TABLE itab_zycit330_des WITH KEY
docnum = itab_zycit330-docnum
buzei = itab_zycit330-buzei .
IF sy-subrc EQ 0 AND
itab_zycit330_des-nrseqd EQ itab_zycit330-nrseqd.
CONTINUE.
ELSE.
CLEAR: itab_zycit245_des.
READ TABLE itab_zycit245_des WITH KEY
nrseqd = itab_zycit330-nrseqd
nritem = itab_zycit330-nritem.
IF sy-subrc EQ 0.
itab_zycit245_des-vlvinc = itab_zycit245_des-vlvinc -
/pws/zycit279-vltot.
itab_zycit245_des-vinculado = itab_zycit245_des-vinculado -
itab_zycit330-menge.
UPDATE /pws/zycit245
SET vlvinc = itab_zycit245_des-vlvinc
vinculado = itab_zycit245_des-vinculado
WHERE nrseqd EQ itab_zycit245_des-nrseqd
AND nritem EQ itab_zycit245_des-nritem.
MODIFY itab_zycit245_des TRANSPORTING vlvinc vinculado
WHERE nrseqd EQ itab_zycit245_des-nrseqd
AND nritem EQ itab_zycit245_des-nritem.
READ TABLE itab_zycit245 WITH KEY
nrseqd = itab_zycit245_des-nrseqd
nritem = itab_zycit245_des-nritem.
IF sy-subrc EQ 0.
itab_zycit245-vlvinc = itab_zycit245_des-vlvinc.
itab_zycit245-vinculado = itab_zycit245_des-vinculado.
MODIFY itab_zycit245 TRANSPORTING vlvinc vinculado
WHERE nrseqd EQ itab_zycit245_des-nrseqd
AND nritem EQ itab_zycit245_des-nritem.
ENDIF.
ENDIF.
ENDIF.
* << Fim da exclusão
CLEAR: itab_zycit245.
IF /pws/zycit321-apr_imp IS INITIAL OR itab_zycit244-tipo EQ 'F'.
READ TABLE itab_zycit245 WITH KEY
nrseqd = itab_zycit330-nrseqd
nritem = itab_zycit330-nritem.
ELSE.
READ TABLE itab_zycit245 WITH KEY
nrseqd = itab_zycit330-nrseqd.
ENDIF.
IF sy-subrc EQ 0.
...
...
itab_zycit330-menge.
ENDIF.
UPDATE /pws/zycit245
SET vlvinc = itab_zycit245-vlvinc
vinculado = itab_zycit245-vinculado
WHERE nrseqd EQ itab_zycit245-nrseqd
AND nritem EQ itab_zycit245-nritem.
MODIFY itab_zycit245 TRANSPORTING vlvinc vinculado
WHERE nrseqd EQ itab_zycit245-nrseqd
AND nritem EQ itab_zycit245-nritem.
* >> Início da exclusão: FORM SALVAR_DADOS
ENDIF.
ENDLOOP.
IF NOT itab_zycit279_d[] IS INITIAL.
LOOP AT itab_zycit279_d.
READ TABLE itab_zycit330_d WITH KEY docnum = itab_zycit279_d-docnum
buzei = itab_zycit279_d-buzei.
READ TABLE itab_zycit245 WITH KEY nrseqd = itab_zycit330_d-nrseqd
nritem = itab_zycit330_d-nritem.
itab_zycit245-vlvinc = itab_zycit245-vlvinc - itab_zycit279_d-vltot.
IF /pws/zycit321-apr_imp IS INITIAL.
itab_zycit245-vinculado =
itab_zycit245-vinculado - itab_zycit279_d-menge.
* << Fim da exclusão
ENDIF.
* >> Início da exclusão: FORM SALVAR_DADOS
IF itab_zycit245-vinculado <= 0.
itab_zycit245-vinculado = 0.
ENDIF.
IF itab_zycit245-vlvinc <= 0.
itab_zycit245-vlvinc = 0.
ENDIF.
MODIFY itab_zycit245 TRANSPORTING vinculado vlvinc
WHERE nrseqd EQ itab_zycit330_d-nrseqd
AND nritem EQ itab_zycit330_d-nritem.
UPDATE /pws/zycit245
SET vlvinc = itab_zycit245-vlvinc
vinculado = itab_zycit245-vinculado
WHERE nrseqd EQ itab_zycit245-nrseqd
AND nritem EQ itab_zycit245-nritem.
* << Fim da exclusão
ENDLOOP.
* >> Início da exclusão: FORM SALVAR_DADOS
DELETE /pws/zycit279 FROM TABLE itab_zycit279_d.
ENDIF.
ELSEIF v_tcode EQ '/PWS/ZYCI052_A'.
IF NOT itab_zycit279_d[] IS INITIAL.
LOOP AT itab_zycit279_d.
READ TABLE itab_zycit330_d WITH KEY docnum = itab_zycit279_d-docnum
buzei = itab_zycit279_d-buzei.
READ TABLE itab_zycit245 WITH KEY nrseqd = itab_zycit330_d-nrseqd
nritem = itab_zycit330_d-nritem.
itab_zycit245-vlvinc = itab_zycit245-vlvinc - itab_zycit279_d-vltot.
IF /pws/zycit321-apr_imp IS INITIAL.
itab_zycit245-vinculado =
itab_zycit245-vinculado - itab_zycit279_d-menge.
ENDIF.
IF itab_zycit245-vinculado <= 0.
itab_zycit245-vinculado = 0.
ENDIF.
IF itab_zycit245-vlvinc <= 0.
itab_zycit245-vlvinc = 0.
ENDIF.
MODIFY itab_zycit245 TRANSPORTING vinculado vlvinc
WHERE nrseqd EQ itab_zycit330_d-nrseqd
AND nritem EQ itab_zycit330_d-nritem.
UPDATE /pws/zycit245
SET vlvinc = itab_zycit245-vlvinc
vinculado = itab_zycit245-vinculado
WHERE nrseqd EQ itab_zycit245-nrseqd
AND nritem EQ itab_zycit245-nritem.
ENDLOOP.
DELETE /pws/zycit279 FROM TABLE itab_zycit279_d.
ENDIF.
* << Fim da exclusão
ENDIF.
COMMIT WORK AND WAIT.
MESSAGE i017 WITH /pws/zycie329-docnum.
MOVE /pws/zycie329 TO wa_zycie329.
MOVE itab_zycit330[] TO itab_zycit330_aux[].
ENDFORM.
...
...
answer = v_answer.
IF v_answer = '1'.
IF NOT itab_zycit279[] IS INITIAL.
LOOP AT itab_zycit279.
IF itab_zycit279-menge <> itab_zycit279-slqtde.
MESSAGE i013 WITH text-014 space text-015.
LEAVE SCREEN.
ENDIF.
ENDLOOP.
CLEAR itab_zycit245_des. REFRESH itab_zycit245_des.
* >> Início da inclusão: FORM EXCLUIR_REGISTRO
SELECT * FROM /pws/zycit330 INTO TABLE itab_zycit330_des
WHERE docnum = /pws/zycie329-docnum.
IF sy-subrc EQ 0.
* << Fim da inclusão
SELECT * FROM /pws/zycit245 INTO TABLE itab_zycit245_des
* >> Início da exclusão: FORM EXCLUIR_REGISTRO
FOR ALL ENTRIES IN itab_zycit330
WHERE nrseqd = itab_zycit330-nrseqd
AND nritem = itab_zycit330-nritem.
* << Fim da exclusão
* >> Início da inclusão: FORM EXCLUIR_REGISTRO
FOR ALL ENTRIES IN itab_zycit330_des
WHERE nrseqd = itab_zycit330_des-nrseqd
AND nritem = itab_zycit330_des-nritem.
ENDIF.
* << Fim da inclusão
CLEAR itab_zycit282. REFRESH itab_zycit282.
SELECT * FROM /pws/zycit282 INTO
TABLE itab_zycit282
FOR ALL ENTRIES IN itab_zycit279
WHERE nrseqimp = itab_zycit279-nrseq
AND ebeln = itab_zycit279-ebeln
AND ebelp = itab_zycit279-ebelp
AND docnumimp = itab_zycit279-docnum.
IF sy-subrc NE 0.
DELETE FROM /pws/zycit330 WHERE docnum = /pws/zycie329-docnum.
LOOP AT itab_zycit279.
DELETE FROM /pws/zycit279 WHERE
ebeln = itab_zycit279-ebeln AND
ebelp = itab_zycit279-ebelp AND
docnum = itab_zycit279-docnum.
* >> Início da exclusão: FORM EXCLUIR_REGISTRO
READ TABLE itab_zycit330 WITH KEY ebeln = itab_zycit279-ebeln
* << Fim da exclusão
* >> Início da inclusão: FORM EXCLUIR_REGISTRO
READ TABLE itab_zycit330_des
WITH KEY ebeln = itab_zycit279-ebeln
* << Fim da inclusão
ebelp = itab_zycit279-ebelp.
IF /pws/zycit321-apr_imp IS INITIAL.
READ TABLE itab_zycit245_des WITH KEY
* >> Início da exclusão: FORM EXCLUIR_REGISTRO
nrseqd = itab_zycit330-nrseqd
nritem = itab_zycit330-nritem.
* << Fim da exclusão
* >> Início da inclusão: FORM EXCLUIR_REGISTRO
nrseqd = itab_zycit330_des-nrseqd
nritem = itab_zycit330_des-nritem.
* << Fim da inclusão
ELSE.
READ TABLE itab_zycit245_des WITH KEY
nrseqd = itab_zycit330-nrseqd.
ENDIF.
IF sy-subrc EQ 0.
itab_zycit245_des-vlvinc = itab_zycit245_des-vlvinc -
itab_zycit279-vltot.
itab_zycit245_des-vinculado = itab_zycit245_des-vinculado -
itab_zycit279-menge.
IF itab_zycit245_des-vlvinc <= 0.
...
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCI052I01
...
WHEN 'VINC'.
READ TABLE itab_vinc WITH KEY mark = 'X'.
IF sy-subrc EQ 0
AND itab_vinc-icon EQ '@5B@'.
itab_zycit330-nrseqd = itab_vinc-nrseqd.
itab_zycit330-nratoc = itab_vinc-nratoc.
itab_zycit330-nritem = itab_vinc-nritem.
MODIFY itab_zycit330 TRANSPORTING nrseqd nratoc nritem
WHERE docnum EQ itab_zycit330-docnum
AND buzei EQ itab_zycit330-buzei.
* >> Início da exclusão: MODULE USER_COMMAND_0200
DELETE FROM /pws/zycit279 WHERE docnum EQ itab_zycit330-docnum
AND buzei EQ itab_zycit330-buzei.
* << Fim da exclusão
LEAVE TO SCREEN 100.
ELSE.
MESSAGE i015 WITH text-022.
ENDIF.
ENDCASE.
ENDMODULE.