1. 程式人生 > 其它 >ABAP 外向交貨單拆分批次 BAPI

ABAP 外向交貨單拆分批次 BAPI

前臺事務碼:VL02N
程式使用BAPI對交貨單進行批次拆分,並且賦值庫位。
使用BAPI: BAPI_OUTB_DELIVERY_CHANGE

使用BAPI_OUTB_DELIVERY_CHANGE建立批次,在引數正確的情況下,依舊報錯,可能導致的原因是庫位賦值不上。

程式碼分成兩部的情況下依舊出錯,需考慮前臺配置。

程式碼案例如下:

"頭資訊
  ls_header_data-deliv_numb    = gs_code_scll-vbeln .     "交貨單號
  ls_header_control-deliv_numb = gs_code_scll-vbeln .     "交貨單號
                   lv_delivery = gs_code_scll-vbeln .     "交貨單號
*  ls_techn_control-upd_ind     = 'U'.

"修改原來行專案的數量
  CLEAR lt_item_data.
  lt_item_data-deliv_numb = gs_code_scll-vbeln.
  lt_item_data-deliv_item = gs_code_scll-posnr.
*  lt_item_data-material   = gs_code_scll-matnr.         "物料
*  lt_item_data-batch      = ''.                        "批次為空
*  lt_item_data-usehieritm = '1'.
  lt_item_data-dlv_qty    = 0.
  lt_item_data-dlv_qty_imunit = 0.                         "數量為0 
  lt_item_data-fact_unit_nom = 1.
  lt_item_data-fact_unit_denom = 1.
  lt_item_data-base_uom       =  gs_code_scll-meins.    "基本單位
  lt_item_data-sales_unit     = gs_code_scll-meins.    "銷售單位
  APPEND lt_item_data.

  CLEAR : lt_item_control.
  lt_item_control-deliv_numb = gs_code_scll-vbeln.
  lt_item_control-deliv_item = gs_code_scll-posnr.
  lt_item_control-chg_delqty = 'X'.
  APPEND lt_item_control.

CLEAR lt_item_data.
CLEAR : lt_item_control.
"新拆分的批次   **行專案(根據自己的情況進行修改)**
  LOOP AT gt_code_scll INTO DATA(ls_code_scll) WHERE zbarcode IS NOT INITIAL AND vbeln IS NOT INITIAL .
    lv_num = lv_num + 1 .
    lt_item_data-deliv_numb = ls_code_scll-vbeln.
    lt_item_data-deliv_item = 900000 +  lv_num.           "交貨單行專案
*    lt_item_data-material   = ls_code_scll-matnr.         "物料
    lt_item_data-batch      = ls_code_scll-charg.         "批次
    lt_item_data-hieraritem = ls_code_scll-posnr.         "專案層次中的高階專案
    lt_item_data-usehieritm = '1'.
    lt_item_data-dlv_qty    = ls_code_scll-erfmg.         "數量
    lt_item_data-dlv_qty_imunit    = ls_code_scll-erfmg.         "數量

    lt_item_data-fact_unit_nom = 1.
    lt_item_data-fact_unit_denom = 1.
    lt_item_data-base_uom       = ls_code_scll-meins.    "基本單位
    lt_item_data-sales_unit     = ls_code_scll-meins.    "銷售單位
    APPEND lt_item_data.

    lt_item_control-deliv_numb = gs_code_scll-vbeln.
    lt_item_control-deliv_item = 900000 + lv_num.         "拆分後的新專案
    lt_item_control-chg_delqty = 'X'.                     "數量修改標誌
    APPEND lt_item_control.
  ENDLOOP.

"第一次呼叫 進行批次拆分
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
  EXPORTING
    header_data                   = ls_header_data
    header_control                = ls_header_control
    delivery                      = lv_delivery
    TECHN_CONTROL                 = ls_techn_control
*   HEADER_DATA_SPL               =
*   HEADER_CONTROL_SPL            =
*   SENDER_SYSTEM                 =
  TABLES
*   HEADER_PARTNER                =
*   HEADER_PARTNER_ADDR           =
*   HEADER_DEADLINES              =
   ITEM_DATA                     = lt_item_data
   ITEM_CONTROL                  = lt_item_control
*   ITEM_SERIAL_NO                =
*   SUPPLIER_CONS_DATA            =
*   EXTENSION1                    =
*   EXTENSION2                    =
    return                        = lt_return
*   TOKENREFERENCE                =
   ITEM_DATA_SPL                 = lt_item_data_spl
*   COLLECTIVE_CHANGE_ITEMS       =
*   NEW_ITEM_DATA                 =
*   NEW_ITEM_DATA_SPL             =
*   NEW_ITEM_ORG                  =
*   ITEM_DATA_DOCU_BATCH          =
*   CWM_ITEM_DATA                 =
          .
"批次拆分沒問題 再給拆分批次的庫位進行賦值
賦值庫位
  LOOP AT gt_code_scll INTO DATA(ls_code_scll1) WHERE zbarcode IS NOT INITIAL AND vbeln IS NOT INITIAL.
    lt_item_data_spl-deliv_numb = ls_code_scll1-vbeln.
    lt_item_data_spl-deliv_item = 900000 + lv_num.
    lt_item_data_spl-stge_loc   = ls_code_scll1-lgort.
    APPEND lt_item_data_spl.
  ENDLOOP.

    CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
      EXPORTING
        header_data                   = ls_header_data
        header_control                = ls_header_control
        delivery                      = lv_delivery
        TECHN_CONTROL                 = ls_techn_control
*       HEADER_DATA_SPL               =
*       HEADER_CONTROL_SPL            =
*       SENDER_SYSTEM                 =
      TABLES
*       HEADER_PARTNER                =
*       HEADER_PARTNER_ADDR           =
*       HEADER_DEADLINES              =
       ITEM_DATA                     = lt_item_data
       ITEM_CONTROL                  = lt_item_control
*       ITEM_SERIAL_NO                =
*       SUPPLIER_CONS_DATA            =
*       EXTENSION1                    =
*       EXTENSION2                    =
        return                        = lt_return
*       TOKENREFERENCE                =
       ITEM_DATA_SPL                 = lt_item_data_spl.
*       COLLECTIVE_CHANGE_ITEMS       =
*       NEW_ITEM_DATA                 =
*       NEW_ITEM_DATA_SPL             =
*       NEW_ITEM_ORG                  =
*       ITEM_DATA_DOCU_BATCH          =
*       CWM_ITEM_DATA                 =