CHANGE_INPUT_HEADER_AND_ITEMS

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