实例1:
REPORT Z_ORDER_CREATE_SPA_HBR.
*----------------------------------------------------------------------*
* Parameters
*----------------------------------------------------------------------*
Parameters: P_order like vbak-vbeln.
Parameters: P_quote like BAPIVBELN-VBELN.
Parameters: P_new   like BAPIVBELN-VBELN.
*
* We need to create a new order number P_New from an existing order P_order
* linked to an existing quotation P_quote
*----------------------------------------------------------------------*
* Tables
*----------------------------------------------------------------------*
Tables: VBAK,
        VBAP,
        VBKD. "Sales Document: Business Data
 
*----------------------------------------------------------------------*
* Data and internal table
*----------------------------------------------------------------------*
 
DATA: order_header_in1       LIKE BAPISDHD1.
DATA: order_header_intX      like BAPISDHD1X.
DATA : SALESDOCUMENT1         TYPE BAPIVBELN-VBELN.
DATA : RETURN2                TYPE BAPIRET2.
DATA: order_partners1        type BAPIPARNR occurs 0 with header line.
DATA: ORDER_ITEMS_IN1        type BAPISDITM occurs 0 with header line.
DATA: ORDER_ITEMS_IN1X       type BAPISDITMX occurs 0 with header line.
DATA: ORDER_SCHEDULES_IN1    type BAPISCHDL occurs 0 with header line.
DATA: ORDER_SCHEDULES_IN1X   type BAPISCHDLX occurs 0 with header line.
DATA : RETURN1                TYPE BAPIRET2   OCCURS 0 with header line.
 
Start-of-selection.
 
 Select single * from vbak where vbeln = p_quote.
 
 if not sy-subrc = 0.
    write:/ text-e02.
    exit.
 endif.
 
 Select single * from vbak where vbeln = p_order.
 
 if not sy-subrc = 0.
    write:/ text-e01.
    exit.
 endif.
 
 Select single * from vbkd where vbeln = p_order.
 
 if not sy-subrc = 0.
    write:/ text-e03.
    exit.
 endif.
 
 order_header_in1-doc_type   = 'TA'.
 order_header_in1-sales_org = vbak-vkorg.
 order_header_in1-distr_chan = vbak-vtweg.
 order_header_in1-division   = vbak-spart.
 order_header_in1-REQ_DATE_H = sy-datum + 20.
 order_header_in1-PURCH_NO_C = 'HBR_Commande'.
 order_header_in1-REF_1      = 'E-DISTR'.
 order_header_in1-SD_DOC_CAT = 'C'.
 order_header_in1-REF_DOC    = P_quote.
 order_header_in1-REF_DOC_L = P_quote.
 order_header_in1-REFDOC_CAT = 'B'.
 order_header_in1-INCOTERMS1 = vbkd-inco1.
 order_header_in1-INCOTERMS2 = vbkd-inco2.
 order_header_in1-PMNTTRMS   = vbkd-zterm.
 order_header_in1-SALES_OFF = vbak-vkbur.
 
 select * from vbap where vbeln = vbak-vbeln.
    clear ORDER_ITEMS_IN1.
    ORDER_ITEMS_IN1-PO_ITM_NO        = vbap-posnr.
    ORDER_ITEMS_IN1-material         = vbap-MATNR.
    ORDER_ITEMS_IN1-TARGET_QU        = vbap-zieme.
    ORDER_ITEMS_IN1-REF_DOC          = P_quote.
    ORDER_ITEMS_IN1-REF_DOC_IT       = vbap-posnr.
    ORDER_ITEMS_IN1-REF_DOC_CA       = 'B'.
    append ORDER_ITEMS_IN1.
*
    clear ORDER_SCHEDULES_IN1.
    ORDER_SCHEDULES_IN1-ITM_NUMBER   = vbap-posnr.
    ORDER_SCHEDULES_IN1-REQ_DATE     = sy-datum + 20.
    ORDER_SCHEDULES_IN1-REQ_QTY      = vbap-KWMENG.
    append ORDER_SCHEDULES_IN1.
*
 endselect.
 
 order_partners1-PARTN_ROLE         = 'WE'.
 order_partners1-PARTN_NUMB         = vbak-KUNNR.
 APPEND order_partners1.
 
 order_partners1-PARTN_ROLE         = 'AG'.
 APPEND order_partners1.
 
 
 Perform call_function.
 
*&---------------------------------------------------------------------*
*& Form call_function
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form call_function .
 
 
 CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
    EXPORTING
    SALESDOCUMENTIN               = P_new
    ORDER_HEADER_IN               = order_header_in1
*   ORDER_HEADER_INX              = order_header_intX
*   SENDER                        =
*   BINARY_RELATIONSHIPTYPE       =
*   INT_NUMBER_ASSIGNMENT         =
*   BEHAVE_WHEN_ERROR             =
*   LOGIC_SWITCH                  =
*   TESTRUN                       =
*   CONVERT                       = ' '
 IMPORTING
    SALESDOCUMENT                 = SALESDOCUMENT1
 TABLES
    RETURN                        = RETURN1
    ORDER_ITEMS_IN                = ORDER_ITEMS_IN1
*   ORDER_ITEMS_INX               = ORDER_ITEMS_IN1X
    ORDER_PARTNERS                = order_partners1
    ORDER_SCHEDULES_IN            = ORDER_SCHEDULES_IN1
*   ORDER_SCHEDULES_INX           = ORDER_SCHEDULES_IN1X
*   ORDER_CONDITIONS_IN           =
*   ORDER_CONDITIONS_INX          =
*   ORDER_CFGS_REF                =
*   ORDER_CFGS_INST               =
*   ORDER_CFGS_PART_OF            =
*   ORDER_CFGS_VALUE              =
*   ORDER_CFGS_BLOB               =
*   ORDER_CFGS_VK                 =
*   ORDER_CFGS_REFINST            =
*   ORDER_CCARD                   =
*   ORDER_TEXT                    =
*   ORDER_KEYS                    =
*   EXTENSIONIN                   =
*   PARTNERADDRESSES              =
            .
 
*
 
 IF NOT SALESDOCUMENT1 IS INITIAL.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT   = 'X'
      IMPORTING
        RETURN = RETURN2.
 ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
 ENDIF.
endform.                    "call_function
 
 实例2
REPORT z_bapi_salesorder_create.
 
* Parameters
* Sales document type
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 2(20) v_text FOR FIELD p_auart.
PARAMETERS: p_auart TYPE auart OBLIGATORY.
SELECTION-SCREEN END OF LINE.
 
* Sales organization
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 2(20) v_text1 FOR FIELD p_vkorg.
PARAMETERS: p_vkorg TYPE vkorg OBLIGATORY.
SELECTION-SCREEN END OF LINE.
 
* Distribution channel
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 2(20) v_text2 FOR FIELD p_vtweg.
PARAMETERS: p_vtweg TYPE vtweg OBLIGATORY.
SELECTION-SCREEN END OF LINE.
 
* Division.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 2(20) v_text3 FOR FIELD p_spart.
PARAMETERS: p_spart TYPE spart OBLIGATORY.
SELECTION-SCREEN END OF LINE.
 
SKIP 1.
 
* Sold-to
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 2(20) v_text4 FOR FIELD p_sold.
PARAMETERS: p_sold TYPE kunnr OBLIGATORY.
SELECTION-SCREEN END OF LINE.
 
* Ship-to
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 2(20) v_text5 FOR FIELD p_ship.
PARAMETERS: p_ship TYPE kunnr OBLIGATORY.
SELECTION-SCREEN END OF LINE.
 
SKIP 1.
 
* Material
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 2(20) v_text6 FOR FIELD p_matnr.
PARAMETERS: p_matnr TYPE matnr   OBLIGATORY.
SELECTION-SCREEN END OF LINE.
 
* Quantity.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 2(20) v_text7 FOR FIELD p_menge.
PARAMETERS: p_menge TYPE kwmeng OBLIGATORY.
SELECTION-SCREEN END OF LINE.
 
* Plant
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 2(20) v_text9 FOR FIELD p_plant.
PARAMETERS: p_plant TYPE werks_d OBLIGATORY.
SELECTION-SCREEN END OF LINE.
 
* Data declarations.
DATA: v_vbeln            LIKE vbak-vbeln.
DATA: header             LIKE bapisdhead1.
DATA: headerx            LIKE bapisdhead1x.
DATA: item               LIKE bapisditem OCCURS 0 WITH HEADER LINE.
DATA: itemx              LIKE bapisditemx OCCURS 0 WITH HEADER LINE.
DATA: partner            LIKE bapipartnr OCCURS 0 WITH HEADER LINE.
DATA: return             LIKE bapiret2    OCCURS 0 WITH HEADER LINE.
DATA: lt_schedules_inx   TYPE STANDARD TABLE OF bapischdlx
                         WITH HEADER LINE.
DATA: lt_schedules_in    TYPE STANDARD TABLE OF bapischdl
                         WITH HEADER LINE.
 
* Initialization.
INITIALIZATION.
v_text   = 'Order type'.
v_text1 = 'Sales Org'.
v_text2 = 'Distribution channel'.
v_text3 = 'Division'.
v_text4 = 'Sold-to'.
v_text5 = 'Ship-to'.
v_text6 = 'Material'.
v_text7 = 'Quantity'.
v_text9 = 'Plant'.
 
* Start-of-selection.
START-OF-SELECTION.
 
* Header data
 
* Sales document type
 header-doc_type = p_auart.
 headerx-doc_type = 'X'.
 
* Sales organization
 header-sales_org = p_vkorg.
 headerx-sales_org = 'X'.
 
* Distribution channel
 header-distr_chan = p_vtweg.
 headerx-distr_chan = 'X'.
 
* Division
 header-division = p_spart.
 headerx-division = 'X'.
 
 headerx-updateflag = 'I'.
 
* Partner data
* Sold to
 partner-partn_role = 'AG'.
 partner-partn_numb = p_sold.
 APPEND partner.
 
* Ship to
 partner-partn_role = 'WE'.
 partner-partn_numb = p_ship.
 APPEND partner.
 
* ITEM DATA
 itemx-updateflag = 'I'.
 
* Line item number.
 item-itm_number = '000010'.
 itemx-itm_number = 'X'.
 
* Material
 item-material = p_matnr.
 itemx-material = 'X'.
 
* Plant
 item-plant    = p_plant.
 itemx-plant   = 'X'.
 
* Quantity
 item-target_qty = p_menge.
 itemx-target_qty = 'X'.
 
 APPEND item.
 APPEND itemx.
 
*   Fill schedule lines
 lt_schedules_in-itm_number = '000010'.
 lt_schedules_in-sched_line = '0001'.
 lt_schedules_in-req_qty    = p_menge.
 APPEND lt_schedules_in.
 
*   Fill schedule line flags
 lt_schedules_inx-itm_number = '000010'.
 lt_schedules_inx-sched_line = '0001'.
 lt_schedules_inx-updateflag = 'X'.
 lt_schedules_inx-req_qty     = 'X'.
 APPEND lt_schedules_inx.
 
* Call the BAPI to create the sales order.
 CALL FUNCTION 'BAPI_SALESDOCU_CREATEFROMDATA1'
       EXPORTING
            sales_header_in     = header
            sales_header_inx    = headerx
       IMPORTING
            salesdocument_ex    = v_vbeln
       TABLES
            return              = return
            sales_items_in      = item
            sales_items_inx     = itemx
            sales_schedules_in = lt_schedules_in
            sales_schedules_inx = lt_schedules_inx
            sales_partners      = partner.
 
* Check the return table.
 LOOP AT return WHERE type = 'E' OR type = 'A'.
    EXIT.
 ENDLOOP.
 
 IF sy-subrc = 0.
 
    WRITE: / 'Error in creating document'.
 
 ELSE.
 
* Commit the work.
    COMMIT WORK AND WAIT.
 
    WRITE: / 'Document ', v_vbeln, ' created'.
 
 ENDIF.