|
<< Click to Display Table of Contents >> Navigation: All About ABAP Technique > English > ABAP Tutorial > ABAP Workbench Tools > Enhancement > Business Add-Ins (BADI) > Business Add-Ins (BADI) Examples > ZE_SHP_GOODSMOVEMENT > CHANGE_INPUT_HEADER_AND_ITEMS |
METHOD if_ex_le_shp_goodsmovement~change_input_header_and_items .
************************************************************
** The following Business add-in is needed for filling in
** number of container required by QM module. Number of container
** is not supported by inbound delivery, therefore here we
** use the field "Ext.item" as a workaround.
** Functional need to pay attention on this area during upgrade.
**
** Validation for inspection for inbound delivery, user cannot
** post goods receipt if UD has not been entered
**
************************************************************
DATA zlipsvb TYPE lipsvb.
DATA zimsegvb TYPE imsegvb.
DATA zshp_badi_error_log TYPE shp_badi_error_log.
DATA zqals TYPE qals.
DATA zqave TYPE qave.
DATA zqinf TYPE qinf.
DATA zqmat TYPE qmat.
*->constant for inspection quantity (koli) !!!
DATA zgebeh TYPE imsegvb-gebeh VALUE 'INS'.
break sol_bintang.
break abap07.
*->BAdi only inbound delivery
LOOP AT it_xlips INTO zlipsvb.
IF zlipsvb-pstyv <> 'ELN'.
EXIT.
ENDIF.
*Check delivery has inspection lot, give error if UD is not accept.
*Delivery has Inspection lot (inspection lot for inbound del/HU)
IF zlipsvb-qplos <> ''.
SELECT * FROM qals INTO zqals WHERE prueflos = zlipsvb-qplos AND
stat35 = 'X'.
ENDSELECT.
*Inspection lot has UD
IF sy-subrc = 0.
SELECT * FROM qave INTO zqave WHERE prueflos = zlipsvb-qplos.
ENDSELECT.
CASE zqave-vcode.
WHEN 'A'.
*UD accept means no message
WHEN 'A2'.
*UD partial accept means Warning during GR
MESSAGE w001(vl)
WITH 'Usage Decision partial recpt ! '.
WHEN OTHERS.
*UD reject and others means Error during GR
zshp_badi_error_log-vbeln = zlipsvb-vbeln.
zshp_badi_error_log-posnr = zlipsvb-posnr.
zshp_badi_error_log-msgty = 'E'.
zshp_badi_error_log-msgid = 'VL'.
zshp_badi_error_log-msgno = '001'.
zshp_badi_error_log-msgv1 =
'Usage Decision reject. Unpack and return item ! '.
APPEND zshp_badi_error_log TO ct_log.
ENDCASE.
ELSE.
*UD is not yet entered for inbound delivery inspection
zshp_badi_error_log-vbeln = zlipsvb-vbeln.
zshp_badi_error_log-posnr = zlipsvb-posnr.
*used to be error
zshp_badi_error_log-msgty = 'E'.
zshp_badi_error_log-msgid = 'QA'.
zshp_badi_error_log-msgno = '145'.
APPEND zshp_badi_error_log TO ct_log.
ENDIF.
ENDIF.
*->validation for 'no of containers' if inspection active
SELECT * FROM qmat INTO zqmat WHERE
matnr = zlipsvb-matnr AND
werks = zlipsvb-werks AND
art IN ('01','0101','12') AND
aktiv = 'X'.
ENDSELECT.
IF sy-subrc = 0.
*check field 'ext delivery item'
IF zlipsvb-lifexpos = '' OR zlipsvb-lifexpos = '0'.
zshp_badi_error_log-vbeln = zlipsvb-vbeln.
zshp_badi_error_log-posnr = zlipsvb-posnr.
zshp_badi_error_log-msgty = 'E'.
zshp_badi_error_log-msgid = 'VL'.
zshp_badi_error_log-msgno = '170'.
zshp_badi_error_log-msgv1 =
'. Ext.item di deliv.item harus diisi jumlah inspeksi koli mis. 10 '.
APPEND zshp_badi_error_log TO ct_log.
ELSE.
*when data is valid, update transfer data to Inventory management
LOOP AT ct_ximseg INTO zimsegvb
WHERE vbeln = zlipsvb-vbeln AND
posnr = zlipsvb-posnr.
zimsegvb-anzgeb = zlipsvb-lifexpos.
zimsegvb-gebeh = zgebeh.
MODIFY ct_ximseg FROM zimsegvb INDEX sy-tabix.
ENDLOOP.
ENDIF.
ENDIF.
ENDLOOP.
* inbound delivery for Purchasing document
* DATA lv_ponum TYPE zta_m_poexchgrt.
* DATA lv_kufix TYPE kufix.
* DATA lv_ebeln TYPE ebeln.
*
* READ TABLE it_xlips INDEX 1 INTO zlipsvb.
*
** check if this 1st delivery
* SELECT SINGLE ebeln INTO lv_ebeln FROM ekbe
* WHERE ebeln = zlipsvb-vgbel.
*
** continue if this is 1st delivery
* IF sy-subrc <> 0.
*
* IF zlipsvb-vgtyp = 'V'. "purchase order
** check fix exchage rate <> 'X'
* CLEAR lv_ponum.
*
* SELECT SINGLE kufix waers FROM ekko
* INTO (lv_kufix,lv_ponum-waers)
* WHERE ebeln = zlipsvb-vgbel.
*
* IF lv_kufix = '' AND lv_ponum-waers <> 'IDR'.
** keep PO number and running date of VL32N
*
* lv_ponum-ebeln = zlipsvb-vgbel.
* lv_ponum-rundt = sy-datum.
* lv_ponum-uname = sy-uname.
*
** check existing data
* SELECT SINGLE * INTO zlipsvb
* FROM zta_m_poexchgrt
* WHERE ebeln = lv_ponum-ebeln.
*
* IF sy-subrc <> 0.
*
** check currency in PO
* SELECT SINGLE waers FROM ekko
* INTO lv_ponum-waers
* WHERE ebeln = lv_ponum-ebeln.
*
* INSERT INTO zta_m_poexchgrt VALUES lv_ponum.
* ENDIF.
*
** call background processing
* CALL FUNCTION 'BP_EVENT_RAISE'
* EXPORTING
* eventid = 'ZMM_PO_EXCHGRT'
** EVENTPARM = ' '
** TARGET_INSTANCE = ' '
** EXCEPTIONS
** BAD_EVENTID = 1
** EVENTID_DOES_NOT_EXIST = 2
** EVENTID_MISSING = 3
** RAISE_FAILED = 4
** OTHERS = 5
* .
* IF sy-subrc <> 0.
** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
** WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
* ENDIF.
*
* ENDIF.
* ENDIF.
*
* ENDIF.
ENDMETHOD.