SAP SD DELIVERY UPDATE PICKING

From SapWiki
FUNCTION z_sd_picking.
*"----------------------------------------------------------------------
*"*"Interfase local
*"  IMPORTING
*"     REFERENCE(I_VBELN) TYPE  LIKP-VBELN
*"     REFERENCE(I_VBELN_FACTURA) TYPE  VBRK-VBELN
*"  EXPORTING
*"     REFERENCE(E_RETURN) TYPE  BAPIRET2_T
*"----------------------------------------------------------------------

*  PERFORM clear_entrega  USING  i_vbeln i_vbeln_factura CHANGING e_return[].
*  LOOP AT e_return TRANSPORTING NO FIELDS WHERE type = 'E' OR type = 'A'.
*  ENDLOOP.
*  IF sy-subrc = 0.
*    ROLLBACK WORK.
*  ENDIF.

  PERFORM f_picking USING i_vbeln i_vbeln_factura CHANGING e_return[].

ENDFUNCTION.


FORM f_picking USING p_vbeln p_vbeln_factura CHANGING p_return TYPE bapiret2_t.
  DATA lt_lips TYPE TABLE OF lips.
  DATA lt_prott TYPE TABLE OF prott WITH HEADER LINE.
  DATA ls_lips TYPE lips.
  DATA ls_vbkok TYPE vbkok.
  DATA ls_return TYPE bapiret2.
  DATA lt_vbpok TYPE TABLE OF vbpok.
  DATA ls_vbpok LIKE LINE OF lt_vbpok.

  SELECT * INTO TABLE lt_lips FROM lips
  WHERE vbeln = p_vbeln.

  LOOP AT lt_lips INTO ls_lips.
    ls_vbkok-vbeln_vl = ls_lips-vbeln.
    ls_vbkok-vbeln    =  ls_lips-vbelv.

    SELECT SINGLE vbelv posnv INTO (ls_vbpok-vbeln,ls_vbpok-posnn) FROM vbfa WHERE vbeln = ls_lips-vbeln
                                                        AND vbtyp_v = 'H'
                                                        AND vbtyp_n = 'T'
                                                        AND posnn = ls_lips-posnr.
    ls_vbpok-vbeln_vl  = ls_lips-vbeln.
    ls_vbpok-posnr_vl  = ls_lips-posnr.
*    ls_vbpok-vbeln     = ls_lips-vbelv.
*    ls_vbpok-posnn     = ls_lips-posnv.
    ls_vbpok-matnr     = ls_lips-matnr. "MATERIAL(CBARRA)
*  ls_VBPOK-CHARG     = ls_lips-charg. "LOTE(CBARRA)

*    PERFORM buscar_lote USING p_vbeln_factura ls_lips CHANGING ls_vbpok-charg.  "!!!!!

    ls_vbpok-lfimg     = ls_lips-lfimg.
    APPEND ls_vbpok TO lt_vbpok.
  ENDLOOP.

  CALL FUNCTION 'SD_DELIVERY_UPDATE_PICKING'
    EXPORTING
      vbkok_wa      = ls_vbkok
*     SYNCHRON      = 'X'
*     NO_MESSAGES_UPDATE           = ' '
      nicht_sperren = 'X'
      aufrufer_t    = 'X'
*     IF_ERROR_MESSAGES_SEND       = 'X'
    TABLES
      vbpok_tab     = lt_vbpok
      prot          = lt_prott
    EXCEPTIONS
      error_message = 99
      OTHERS        = 01.
  IF sy-subrc <> 0.
    ROLLBACK WORK.
    MESSAGE ID sy-msgid
    TYPE sy-msgty
    NUMBER sy-msgno
    WITH sy-msgv1
    sy-msgv2
    sy-msgv3
    sy-msgv4
    INTO ls_return-message.
    ls_return-type = 'E'.
    APPEND ls_return TO p_return.
    EXIT.
  ELSE.

* error occurred.
    LOOP AT lt_prott WHERE msgty = 'E' OR msgty = 'A'.
      MOVE lt_prott-msgid TO ls_return-id.
      MOVE lt_prott-msgty TO ls_return-type.
      MOVE lt_prott-msgno TO ls_return-number.
      MOVE lt_prott-msgv1  TO ls_return-message_v1.
      MOVE lt_prott-msgv2  TO ls_return-message_v2.
      MOVE lt_prott-msgv3  TO ls_return-message_v3.
      MOVE lt_prott-msgv4  TO ls_return-message_v4.

      MESSAGE ID lt_prott-msgid TYPE lt_prott-msgty NUMBER lt_prott-msgno
      WITH lt_prott-msgv1 lt_prott-msgv2 lt_prott-msgv3 lt_prott-msgv4
      INTO ls_return-message.

      APPEND ls_return TO p_return.
    ENDLOOP.
    IF sy-subrc <> 0.
      COMMIT WORK AND WAIT.
*    MESSAGE s000(0K) WITH 'Picking procesado con  xto' into p_mensaje.

    ENDIF.
  ENDIF.
ENDFORM.                    "f_picking