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