quarta-feira, 16 de julho de 2014

Estorno de Saída de mercadoria VL09 sem batch input

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
*"----------------------------------------------------------------------

  DATAlt_mesg TYPE TABLE OF mesg.

  DATA lw_mesg TYPE mesg.

  DATAl_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 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