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