BAPI 建立含 BOM 的銷售訂單

来源:互联网 发布:淘宝批量修改发货地 编辑:程序博客网 时间:2024/06/10 06:38

使用 BAPI 建立含 BOM 的銷售訂單,重點在於先使用 BAPI_SALESORDER_SIMULATE 算出所有的 item no, 另外就是呼叫 BAPI_SALESORDER_CREATEFROMDAT2 時要使用 Exporting 參數 int_number_assignment = 'X'

BAPI Define:

DATA: gw_si_header          LIKE bapisdhead,      gw_si_return          LIKE bapireturn,      gt_si_items_in        LIKE bapiitemin  OCCURS 0 WITH HEADER LINE,      gt_si_items_out       LIKE bapiitemex  OCCURS 0 WITH HEADER LINE,      gt_si_schedules_ex    LIKE bapisdhedu  OCCURS 0 WITH HEADER LINE,      gt_si_condition_ex    LIKE bapicond    OCCURS 0 WITH HEADER LINE,      gt_si_partners        LIKE bapipartnr  OCCURS 0 WITH HEADER LINE.DATA: gw_so_header          LIKE bapisdhd1,      gw_so_headerx         LIKE bapisdhd1x,      gv_so_doc_num         TYPE bapivbeln-vbeln,      gt_so_return2         TYPE bapiret2,      gt_so_partners        TYPE bapiparnr  OCCURS 0 WITH HEADER LINE,      gt_so_items_in        TYPE bapisditm  OCCURS 0 WITH HEADER LINE,      gt_so_items_inx       TYPE bapisditmx OCCURS 0 WITH HEADER LINE,      gt_so_schedules_in    TYPE bapischdl  OCCURS 0 WITH HEADER LINE,      gt_so_schedules_inx   TYPE bapischdlx OCCURS 0 WITH HEADER LINE,      gt_so_return1         TYPE bapiret2   OCCURS 0 WITH HEADER LINE,      gt_so_conditions_in   TYPE bapicond   OCCURS 0 WITH HEADER LINE,      gt_so_conditions_inx  TYPE bapicondx  OCCURS 0 WITH HEADER LINE.

GT_ITAB contents so data:

LOOP AT gt_itab WHERE value = 'X' AND                      rfstk = 'A'.  lv_count1 = lv_count1 + 1.  MOVE gt_itab TO lw_itab.  AT NEW pos_no.*   Customer    CLEAR: gt_so_partners, gt_so_partners[],           gt_si_partners, gt_si_partners[].    gt_so_partners-partn_role  = 'AG'.    gt_so_partners-partn_numb  = lw_itab-store_no.    gt_si_partners-partn_role  = 'AG'.    gt_si_partners-partn_numb  = lw_itab-store_no.    APPEND: gt_so_partners, gt_si_partners.    gt_so_partners-partn_role  = 'WE'.    gt_si_partners-partn_role  = 'WE'.    APPEND: gt_so_partners, gt_si_partners.*   Header    CLEAR: gw_so_header, gt_so_items_in[], gt_so_schedules_in[],           gt_so_conditions_in[], gt_so_conditions_inx[],           gw_si_header, gw_si_return, gt_si_items_in[].    gw_so_header-doc_type   = lw_itab-fodtype.    gw_so_header-sales_org  = '1000'.    gw_so_header-distr_chan = lw_itab-cha_no.    gw_so_header-division   = lw_itab-sal_no.    gw_so_header-purch_no_c = lw_itab-pos_no.    REPLACE ALL OCCURRENCES OF '/' IN lw_itab-pos_date WITH ''.    gw_so_header-purch_date = lw_itab-pos_date.    IF lw_itab-fodtype+3(1) EQ 'U' OR       lw_itab-fodtype+3(1) EQ 'V'.      gw_so_header-ord_reason = lw_itab-bktype.    ENDIF.    MOVE-CORRESPONDING gw_so_header TO gw_si_header.  ENDAT.* Items*-------------------  CLEAR: gt_so_items_in, gt_so_schedules_in,         gt_si_items_in, gt_so_schedules_inx.  gt_so_items_in-itm_number    = lw_itab-item_no.  gt_so_items_in-po_itm_no     = lw_itab-item_no.  gt_so_items_in-material      = lw_itab-plu_no.  gt_so_items_in-target_qty    = lw_itab-pos_qty.  IF lw_itab-fodtype+3(1) NE 'S'.    gt_so_items_in-batch       = lw_itab-charg.  ENDIF.  gt_so_items_in-plant         = lw_itab-wh_no.  gt_so_items_in-ship_point    = lw_itab-bk_no.  MOVE-CORRESPONDING gt_so_items_in TO gt_si_items_in.  APPEND: gt_so_items_in, gt_si_items_in.* Prices  IF lw_itab-fodtype+3(1) = 'T'.  " consign    gt_so_conditions_in-itm_number = lw_itab-item_no.    gt_so_conditions_in-cond_type  = 'PR01'.    gt_so_conditions_in-cond_value = lw_itab-pos_prc.    gt_so_conditions_in-currency   = 'TWD'.    APPEND gt_so_conditions_in.    gt_so_conditions_inx-itm_number = lw_itab-item_no.    gt_so_conditions_inx-cond_type  = 'PR01'.    gt_so_conditions_inx-updateflag = 'I'.    gt_so_conditions_inx-cond_value = 'X'.    gt_so_conditions_inx-currency   = 'X'.    APPEND gt_so_conditions_inx.  ENDIF.* Scheduling*-------------------  gt_so_schedules_in-itm_number   = lw_itab-item_no.  gt_so_schedules_in-req_qty      = lw_itab-pos_qty.  APPEND gt_so_schedules_in.* Creating SO*-------------------  AT END OF pos_no.*    CLEAR:   gt_si_items_out, gt_si_schedules_ex,             gv_so_doc_num.    REFRESH: gt_si_items_out, gt_si_schedules_ex.    IF lw_itab-fodtype+3(1) EQ 'U'.      CALL FUNCTION 'BAPI_CUSTOMERRETURN_CREATE'        EXPORTING          return_header_in      = gw_so_header          int_number_assignment = 'X'        IMPORTING          salesdocument         = gv_so_doc_num        TABLES          return                = gt_so_return1          return_items_in       = gt_so_items_in          return_partners       = gt_so_partners          return_schedules_in   = gt_so_schedules_in.    ELSE.      CALL FUNCTION 'BAPI_SALESORDER_SIMULATE'        EXPORTING          order_header_in    = gw_si_header        IMPORTING          return             = gw_si_return        TABLES          order_items_in     = gt_si_items_in          order_partners     = gt_si_partners          order_schedule_in  = gt_so_schedules_in          order_items_out    = gt_si_items_out          order_schedule_ex  = gt_si_schedules_ex          order_condition_ex = gt_si_condition_ex.*      IF gw_si_return-type = 'E'.        gt_itab-rfstk = 'B'.        gt_itab-rmark = gw_si_return-message.        MODIFY gt_itab TRANSPORTING rfstk rmark            WHERE pos_no = lw_itab-pos_no.      ELSE.        REFRESH: gt_so_items_in,  gt_so_schedules_in,                 gt_so_items_inx, gt_so_schedules_inx.        LOOP AT gt_si_items_out.          IF gt_si_items_out-po_itm_no <> ''.*           update items            MOVE-CORRESPONDING gt_si_items_out TO gt_so_items_in.            gt_so_items_inx-itm_number = gt_so_items_in-itm_number.            APPEND: gt_so_items_in, gt_so_items_inx.*           update conditions            LOOP AT gt_so_conditions_in                WHERE itm_number = gt_si_items_out-po_itm_no.              gt_so_conditions_in-itm_number = gt_so_items_in-itm_number.              MODIFY gt_so_conditions_in.            ENDLOOP.            LOOP AT gt_so_conditions_inx                WHERE itm_number = gt_si_items_out-po_itm_no.              gt_so_conditions_inx-itm_number = gt_so_items_in-itm_number.              MODIFY gt_so_conditions_inx.            ENDLOOP.          ENDIF.*         Schedules          READ TABLE gt_si_schedules_ex              WITH KEY itm_number = gt_si_items_out-itm_number.          MOVE-CORRESPONDING gt_si_schedules_ex TO gt_so_schedules_in.          gt_so_schedules_inx-itm_number = gt_si_schedules_ex-itm_number.          gt_so_schedules_inx-req_qty    = 'X'.          APPEND: gt_so_schedules_in, gt_so_schedules_inx.        ENDLOOP.*        CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'          EXPORTING            order_header_in       = gw_so_header            int_number_assignment = 'X'          IMPORTING            salesdocument         = gv_so_doc_num          TABLES            return                = gt_so_return1            order_items_in        = gt_so_items_in            order_partners        = gt_so_partners            order_schedules_in    = gt_so_schedules_in            order_conditions_in   = gt_so_conditions_in            order_conditions_inx  = gt_so_conditions_inx.      ENDIF.    ENDIF.  ENDAT.ENDLOOP.
原创粉丝点击