Aproveitando o tópico que fiz sobre a rotina de estorno da NFe, estou aproveitando para postar essa rotina para estorno de saída de mercadoria, como não existe bapi para tal e não queria usar o batch input optei por uma função interna do standard, e criei uma função para o processo.
FUNCTION zfsd_cancela_saida_mercadoria.
*"----------------------------------------------------------------------
*"*"Interface local:
*" IMPORTING
*" REFERENCE(I_VBELN) TYPE VBELN_VL
*" TABLES
*" IT_RETURN STRUCTURE BAPIRET2
*" EXCEPTIONS
*" ERROR_MESSAGE
*"----------------------------------------------------------------------
DATA: lt_mesg TYPE TABLE OF mesg.
DATA lw_mesg TYPE mesg.
DATA: l_garg TYPE seqg3-garg,
l_subrc TYPE sy-subrc.
SELECT COUNT( * )
FROM vbuk
WHERE vbeln EQ i_vbeln
AND wbstk EQ 'C'.
CHECK sy-subrc = 0.
CONCATENATE sy-mandt i_vbeln INTO l_garg.
PERFORM verifica_bloqueio USING 'LIKP' l_garg
CHANGING l_subrc.
IF l_subrc = 0.
CLEAR lt_mesg[].
CALL FUNCTION 'WS_REVERSE_GOODS_ISSUE'
EXPORTING
i_vbeln = i_vbeln
i_budat = sy-datum
i_tcode = 'VL09'
i_vbtyp = 'J'
TABLES
t_mesg = lt_mesg
EXCEPTIONS
error_reverse_goods_issue = 1
OTHERS = 2.
IF sy-subrc = 0.
COMMIT WORK.
DO 100 TIMES.
SELECT COUNT( * )
FROM vbuk
WHERE vbeln EQ i_vbeln
AND wbstk NE 'C'.
IF sy-subrc = 0.
EXIT.
ENDIF.
WAIT UP TO 1 SECONDS.
ENDDO.
IF sy-dbcnt = 0.
PERFORM monta_mensagem TABLES it_return
USING 'E' 'ZSD' '216'
i_vbeln '' '' ''.
RAISE error_message.
ENDIF.
ELSE.
LOOP AT lt_mesg INTO lw_mesg.
PERFORM monta_mensagem TABLES it_return
USING lw_mesg-msgty lw_mesg-arbgb
lw_mesg-txtnr
lw_mesg-msgv1
lw_mesg-msgv2
lw_mesg-msgv3
lw_mesg-msgv4.
ENDLOOP.
RAISE error_message.
ENDIF.
ELSE.
PERFORM monta_mensagem TABLES it_return
USING 'E' 'ZSD' '213'
i_vbeln '' '' ''.
RAISE error_message.
ENDIF.
ENDFUNCTION.
Nenhum comentário:
Postar um comentário