1. 程式人生 > >交貨單批次拆分(BAPI_OUTB_DELIVERY_CHANGE )並更改揀配數量,發貨過賬(WS_DELIVERY_UPDATE)

交貨單批次拆分(BAPI_OUTB_DELIVERY_CHANGE )並更改揀配數量,發貨過賬(WS_DELIVERY_UPDATE)

*&---------------------------------------------------------------------*
*& Report  ZVL02N_CHARGE
*&
*&---------------------------------------------------------------------*
*&  先呼叫 BAPI_OUTB_DELIVERY_CHANGE 對批次進行拆分(前提是 要拆分的 外向交貨單 行專案 批次為 空)
*&  然後 呼叫 WS_DELIVERY_UPDATE 更新 交貨數量和揀配數量

*&---------------------------------------------------------------------*

REPORT ZVL02N_CHARGE.


DATA : HEADER_DATA LIKE BAPIOBDLVHDRCHG. "Delivery header
DATA : HEADER_CONTROL LIKE BAPIOBDLVHDRCTRLCHG. "delivery header control
DATA : I_DELIVERY_NO LIKE BAPIOBDLVHDRCHG-DELIV_NUMB. "deliver number
DATA : TECHN_CONTROL LIKE
 BAPIDLVCONTROL. "TECHN_CONTROL


DATA : ITEM_DATA LIKE BAPIOBDLVITEMCHG OCCURS 0 WITH HEADER LINE"ITEM_DATA delivery item
DATA : ITEM_CONTROL LIKE BAPIOBDLVITEMCTRLCHG OCCURS 0 WITH HEADER LINE"ITEM_CONTROL
DATA : RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE"Return



*Set Delivery Header data

I_DELIVERY_NO = '0080249529'
.
HEADER_DATA-DELIV_NUMB = I_DELIVERY_NO.
TECHN_CONTROL-UPD_IND = 'U'.
HEADER_CONTROL-DELIV_NUMB = I_DELIVERY_NO.



ITEM_DATA-DELIV_NUMB = I_DELIVERY_NO.
ITEM_DATA-DELIV_ITEM = '900001'.
ITEM_DATA-HIERARITEM = '40'.            "The batch split record below delivery item hierary
ITEM_DATA-USEHIERITM = '1'.
ITEM_DATA-MATERIAL = 'W065B0X030601002'.
ITEM_DATA-BATCH = 'BCFA2907'.
ITEM_DATA-DLV_QTY = 4.

*ITEM_DATA-DLV_QTY_IMUNIT = 1000.

ITEM_DATA-FACT_UNIT_NOM = 1.
ITEM_DATA-FACT_UNIT_DENOM = 1.
APPEND ITEM_DATA.
CLEAR ITEM_DATA.


ITEM_DATA-DELIV_NUMB = I_DELIVERY_NO.
ITEM_DATA-DELIV_ITEM = '900002'.       "The batch split record below delivery item hierary
ITEM_DATA-HIERARITEM = '40'.
ITEM_DATA-USEHIERITM = '1'.
ITEM_DATA-MATERIAL = 'W065B0X030601002'.
ITEM_DATA-BATCH = 'BCFC1802'.
ITEM_DATA-DLV_QTY = 4.

ITEM_DATA-FACT_UNIT_NOM = 1.
ITEM_DATA-FACT_UNIT_DENOM = 1.
APPEND ITEM_DATA.

CLEAR ITEM_DATA.


ITEM_CONTROL-DELIV_NUMB = I_DELIVERY_NO.
ITEM_CONTROL-DELIV_ITEM = '40'.
ITEM_CONTROL-CHG_DELQTY = 'X'.
APPEND ITEM_CONTROL.
CLEAR ITEM_CONTROL.



ITEM_CONTROL-DELIV_NUMB = I_DELIVERY_NO.
ITEM_CONTROL-DELIV_ITEM = '900001'.
ITEM_CONTROL-CHG_DELQTY = 'X'.
APPEND ITEM_CONTROL.
CLEAR ITEM_CONTROL.



ITEM_CONTROL-DELIV_NUMB = I_DELIVERY_NO.
ITEM_CONTROL-DELIV_ITEM = '900002'.
ITEM_CONTROL-CHG_DELQTY = 'X'.
APPEND ITEM_CONTROL.
CLEAR ITEM_CONTROL.



CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
  EXPORTING
    HEADER_DATA    = HEADER_DATA
    HEADER_CONTROL = HEADER_CONTROL
    DELIVERY       = I_DELIVERY_NO
    TECHN_CONTROL  = TECHN_CONTROL
  TABLES
    ITEM_DATA      = ITEM_DATA
    ITEM_CONTROL   = ITEM_CONTROL
    RETURN         = RETURN.
IF SY-SUBRC EQ 0.
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      WAIT = 'X'.
ENDIF.


DATA : I_VBKOK LIKE VBKOK. "Delivery header
DATA : I_VBPOK LIKE VBPOK  OCCURS 0 WITH HEADER LINE"Delivery Picking
DATA : V_ERROR.


I_VBKOK-VBELN_VL = '0080000066'.
I_VBKOK-WABUC = 'X'"Post Good Issue Automatic

I_VBPOK-VBELN_VL = I_VBKOK-VBELN_VL. "Delivery NO
I_VBPOK-POSNR_VL = '900001'"Delivery Item
I_VBPOK-VBELN = '1000000325'"Sales Order            "You must assign Sales order & Item number
I_VBPOK-POSNN = '10'.       "Sales Order item
I_VBPOK-MATNR = 'WY-F-001'.
I_VBPOK-CHARG =  '0000000001'.
I_VBPOK-LFIMG = 5.     "Actual quantity delivered (in sales units)
I_VBPOK-LGMNG = 5.     "Actual quantity delivered in stockkeeping units
APPEND I_VBPOK.


I_VBPOK-VBELN_VL = I_VBKOK-VBELN_VL. "Delivery NO
I_VBPOK-POSNR_VL = '900002'"Delivery Item
I_VBPOK-VBELN = '1000000325'"Sales Order
I_VBPOK-POSNN = '10'.       "Sales Order item
I_VBPOK-MATNR = 'WY-F-001'.
I_VBPOK-CHARG =  '0000000002'.
I_VBPOK-LFIMG = 5.     "Actual quantity delivered (in sales units)
I_VBPOK-LGMNG = 5.     "Actual quantity delivered in stockkeeping units

APPEND I_VBPOK.


CALL FUNCTION 'WS_DELIVERY_UPDATE'
  EXPORTING
    VBKOK_WA                  = I_VBKOK
    DELIVERY                  = I_VBKOK-VBELN_VL
    UPDATE_PICKING            = 'X'         "Update Picking data
  IMPORTING
    EF_ERROR_IN_GOODS_ISSUE_0 = V_ERROR
  TABLES
    VBPOK_TAB                 = I_VBPOK.


IF SY-SUBRC EQ 0.

  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

endif.