0% found this document useful (0 votes)
150 views6 pages

Bapi VL

This document contains an ABAP method that processes delivery orders and goods issues. It summarizes the key steps as: 1. It retrieves delivery order item data from the VBAP and VBEP tables and builds a request structure to call the BAPI_DELIVERYPROCESSING_EXEC function to generate shipments. 2. Any errors from the BAPI call are handled by rolling back the transaction and raising exceptions. 3. If no errors, it retrieves the created shipment number. 4. Optionally, it can generate picking documents by retrieving item data from the LIPS table and building a structure for a WS_DELIVERY_UPDATE_2 function call. 5. This function is

Uploaded by

Max Dos Anjos
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
150 views6 pages

Bapi VL

This document contains an ABAP method that processes delivery orders and goods issues. It summarizes the key steps as: 1. It retrieves delivery order item data from the VBAP and VBEP tables and builds a request structure to call the BAPI_DELIVERYPROCESSING_EXEC function to generate shipments. 2. Any errors from the BAPI call are handled by rolling back the transaction and raising exceptions. 3. If no errors, it retrieves the created shipment number. 4. Optionally, it can generate picking documents by retrieving item data from the LIPS table and building a structure for a WS_DELIVERY_UPDATE_2 function call. 5. This function is

Uploaded by

Max Dos Anjos
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

METHOD call_bapi_vl.

DATA: lt_vbap TYPE SORTED TABLE OF mty_vbap WITH UNIQUE KEY vbe
ln posnr
, lt_vbep TYPE SORTED TABLE OF mty_vbep WITH UNIQUE KEY vbe
ln posnr etenr
, lt_lips TYPE SORTED TABLE OF mty_lips WITH UNIQUE KEY vbe
ln posnr
, lt_request TYPE TABLE OF bapideliciousrequest
, lt_created TYPE TABLE OF bapideliciouscreateditems
, lt_return TYPE TABLE OF bapiret2
, lt_vbpok TYPE TABLE OF vbpok
.
DATA: ls_request LIKE LINE OF lt_request
, ls_vbkok TYPE vbkok
, ls_header TYPE bapiobdlvhdrcon
, ls_header_control TYPE bapiobdlvhdrctrlcon
, ls_vbpok LIKE LINE OF lt_vbpok
.
DATA: ld_error TYPE c
, ld_vbeln TYPE vbeln_va
, ld_has_er TYPE abap_bool VALUE abap_false
.
DATA: lo_exc TYPE REF TO zcx_general_exceptions
.

FIELD-SYMBOLS: <ls_vbap> LIKE LINE OF lt_vbap


, <ls_created> LIKE LINE OF lt_created
, <ls_return> LIKE LINE OF lt_return
, <ls_vbep> LIKE LINE OF lt_vbep
, <ls_lips> LIKE LINE OF lt_lips
.

CREATE OBJECT lo_exc


EXPORTING
textid = zcx_general_exceptions=>general_erros.

IF id_vbeln_va IS INITIAL .
lo_exc->param = 'Ordem não informada'.
RAISE EXCEPTION lo_exc.
ENDIF.

IF id_post_goods_issue EQ 'X' AND id_volum IS INITIAL.


lo_exc->param = 'Volume não infomado'.
RAISE EXCEPTION lo_exc.
ENDIF.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'


EXPORTING
input = id_vbeln_va
IMPORTING
output = ld_vbeln.
IF cd_vbeln_vl IS INITIAL.
SELECT vbeln
posnr
kwmeng
matnr
werks
lgort
INTO TABLE lt_vbap
FROM vbap
WHERE vbeln = ld_vbeln
AND abgru = space.

IF sy-subrc NE 0.
lo_exc->param = 'Não há itens para esta ordem'.
RAISE EXCEPTION lo_exc.
ENDIF.

"Somente o que tem remessa


SELECT vbeln
posnr
etenr
edatu
bmeng
INTO TABLE lt_vbep
FROM vbep
FOR ALL ENTRIES IN lt_vbap
WHERE vbeln EQ lt_vbap-vbeln
AND posnr EQ lt_vbap-posnr.

IF sy-subrc NE 0.
lo_exc->param = 'Não há itens para esta ordem'.
RAISE EXCEPTION lo_exc.
ENDIF.

LOOP AT lt_vbap ASSIGNING <ls_vbap>.


CLEAR ls_request.
LOOP AT lt_vbep ASSIGNING <ls_vbep> WHERE vbeln EQ <ls_vbap>-
vbeln
AND posnr EQ <ls_vbap>-
posnr
AND edatu LE sy-datum.

ls_request-quantity_sales_uom = ls_request-
quantity_sales_uom + <ls_vbep>-bmeng.
ENDLOOP.

IF ls_request-quantity_sales_uom LE 0.
CONTINUE.
ENDIF.

ls_request-quantity_sales_uom = ls_request-quantity_sales_uom.
ls_request-document_numb = <ls_vbap>-vbeln.
ls_request-document_item = <ls_vbap>-posnr.
ls_request-quantity_base__uom = ls_request-quantity_sales_uom.
ls_request-id = 1.
ls_request-document_type = 'A'.
ls_request-delivery_date = sy-datum.
ls_request-material = <ls_vbap>-matnr.
ls_request-plant = <ls_vbap>-werks.
ls_request-stge_loc = <ls_vbap>-lgort.

* ls_request-sales_unit = <ls_vbap>-vrkme.

ls_request-date = sy-datum.
ls_request-goods_issue_date = sy-datum.
ls_request-goods_issue_time = sy-uzeit.
APPEND ls_request TO lt_request.

ENDLOOP.

CALL FUNCTION 'BAPI_DELIVERYPROCESSING_EXEC'


TABLES
request = lt_request
createditems = lt_created
return = lt_return.

ld_has_er = space.
LOOP AT lt_return ASSIGNING <ls_return> WHERE type CA 'AEX'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ld_has_er = 'X'.

lo_exc->param = 'Erro ao gerar Remessa:'.


MESSAGE
ID <ls_return>-id
TYPE <ls_return>-type
NUMBER <ls_return>-number
WITH <ls_return>-message_v1
<ls_return>-message_v2
<ls_return>-message_v3
<ls_return>-message_v4
INTO lo_exc->param2
.
lo_exc->param3 = '#Continue o processo de forma STANDARD'.

RAISE EXCEPTION lo_exc.


ENDLOOP.

IF ld_has_er EQ space.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
READ TABLE lt_created
ASSIGNING <ls_created>
INDEX 1.

IF <ls_created> IS NOT ASSIGNED.


lo_exc->param = 'Remessa não foi criada'.
lo_exc->param2 = 'Continue o processo de forma STANDARD'.
RAISE EXCEPTION lo_exc.
ENDIF.

cd_vbeln_vl = <ls_created>-document_numb.
cd_vbtyp_vl = <ls_created>-document_category_sd.
ENDIF.

**********************************************************************
**
* Picking
**********************************************************************
**
IF id_do_picking EQ abap_true.

SELECT vbeln
posnr
matnr
lfimg
umvkz
umvkn
INTO TABLE lt_lips
FROM lips
WHERE vbeln EQ cd_vbeln_vl.

IF sy-subrc NE 0.
lo_exc->param = 'Remessa'.
lo_exc->param2 = cd_vbeln_vl.
lo_exc->param3 = 'não existe!'.
lo_exc->param4 = 'Continue o processo de forma STANDARD'.
RAISE EXCEPTION lo_exc.
ENDIF.

LOOP AT lt_lips ASSIGNING <ls_lips>.


CLEAR ls_vbpok.
ls_vbpok-vbeln_vl = <ls_lips>-vbeln.
ls_vbpok-posnr_vl = <ls_lips>-posnr.
ls_vbpok-vbeln = <ls_lips>-vbeln.
ls_vbpok-posnn = <ls_lips>-posnr.
ls_vbpok-matnr = <ls_lips>-matnr.
ls_vbpok-pikmg = ( <ls_lips>-lfimg * <ls_lips>-
umvkz ) / <ls_lips>-umvkn.

APPEND ls_vbpok TO lt_vbpok.


ENDLOOP.

ENDIF.

*
************Post goods issue.
IF id_post_goods_issue EQ abap_true
OR id_do_picking EQ abap_true
OR id_volum IS NOT INITIAL.

CLEAR ls_vbkok.
ls_vbkok-vbeln_vl = cd_vbeln_vl.
ls_vbkok-vbtyp_vl = cd_vbtyp_vl.
ls_vbkok-anzpk = id_volum.

ls_vbkok-kzapk = 'X'.
ls_vbkok-wabuc = id_post_goods_issue.

CALL FUNCTION 'WS_DELIVERY_UPDATE_2'


EXPORTING
vbkok_wa = ls_vbkok
update_picking = id_do_picking
synchron = 'X'
if_error_messages_send = space
delivery = cd_vbeln_vl
IMPORTING
ef_error_any = ld_error
TABLES
vbpok_tab = lt_vbpok
EXCEPTIONS
error_message = 4.

IF sy-subrc EQ 0 AND ld_error IS INITIAL.


CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
lo_exc->param = 'Erro ao registrar SM/EM:'.
lo_exc->param2 = cd_vbeln_vl.

CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.


MESSAGE
ID sy-msgid
TYPE sy-msgty
NUMBER sy-msgno
WITH sy-msgv1
sy-msgv2
sy-msgv3
sy-msgv4
INTO lo_exc->param3.

lo_exc->param4 = 'Continue o processo de forma STANDARD'.


RAISE EXCEPTION lo_exc.

ENDIF.
ENDIF.

FREE lo_exc.

ENDMETHOD.

You might also like