BAPI_SALESORDER_CREATEFROMDAT2--VA01

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

你可能感兴趣的:(create)