Saturday, June 14, 2008

SAP BAPI Sales Order Simulate

SAP BAPI Sales Order Simulate

In SAP before creating a sales order there is a way to simulate it using a BAPI.  This can be done using the following BAPI.

SAP ABAP BAPI to Simulate a Sales Order.

BAPI_SALESORDER_SIMULATE

This is very useful in case you want to check the Availability and Pricing. The parameters obtained are given below.

BAPIITEMEX                     Communication Fields: Issue SD Document Item: WWW
BAPISDHEDU                    Struture of VBEP (Sales Document: Schedule Line Data)
BAPICOND                       Communication Fields for Maintaining Conditions in the Order
BAPIINCOMP                    Communication Fields: Incompletion


Find the code below.

Note: This is very similar to Sales Order Create BAPI 'BAPI_SALESORDER_CREATEFROMDAT1' but in this case the actual Sales Order is not created instead a simulation is carried out.

REPORT ZEX_SALORDSIMULATE.


*-------------------------Data Declaration-----------------------------*
Data: st_BAPISDHEAD like BAPISDHEAD, " Sales Order Header Data
      ta_BAPIITEMIN like BAPIITEMIN occurs 0 with header line, " Ln item
      ta_BAPIPARTNR like BAPIPARTNR occurs 0 with header line, " Partner
      int_BAPIITEMEX like BAPIITEMEX occurs 0 with header line,
      int_BAPISDHEDU like BAPISDHEDU occurs 0 with header line,
      int_BAPICOND like BAPICOND occurs 0 with header line,
      int_BAPIINCOMP like BAPIINCOMP occurs 0 with header line,
      d_BAPIRETURN1 like BAPIRETURN.          " Bapi return msg

* Move the data to create sales order in the repective parameters------*
move: 'TA' to st_BAPISDHEAD-DOC_TYPE,     " Sales document type
      '15493'     to st_BAPISDHEAD-PURCH_NO_C,
      '00010'     to ta_BAPIITEMIN-ITM_NUMBER,
      'Y-351'     to ta_BAPIITEMIN-MATERIAL,
      '1100'      to ta_BAPIITEMIN-PLANT,
      '1'         to ta_BAPIITEMIN-REQ_QTY,
      'AG'        to ta_BAPIPARTNR-PARTN_ROLE,  " Sold to Party
      '0000007777'   to ta_BAPIPARTNR-PARTN_NUMB.
* Append the internal tables-------------------------------------------*
       append ta_BAPIPARTNR.
       clear ta_BAPIPARTNR.
       append ta_BAPIITEMIN.
       clear ta_BAPIITEMIN.
* Move ship to party---------------------------------------------------*
       move: 'RG'    to ta_BAPIPARTNR-PARTN_ROLE, " Ship to party
             '0000007777'   to ta_BAPIPARTNR-PARTN_NUMB.
* Append the internal tables-------------------------------------------*
       append ta_BAPIPARTNR.
       clear ta_BAPIPARTNR.

* Call BAPI to SIMULATE the Order

      CALL FUNCTION 'BAPI_SALESORDER_SIMULATE'
        EXPORTING
          ORDER_HEADER_IN           = st_BAPISDHEAD
*         CONVERT_PARVW_AUART       = ' '
       IMPORTING
*         SALESDOCUMENT             =
*         SOLD_TO_PARTY             =
*         SHIP_TO_PARTY             =
*         BILLING_PARTY             =
         RETURN                    = d_BAPIRETURN1
        TABLES
         ORDER_ITEMS_IN            = ta_BAPIITEMIN
         ORDER_PARTNERS            = ta_BAPIPARTNR
*         ORDER_SCHEDULE_IN         =
         ORDER_ITEMS_OUT           = int_BAPIITEMEX
*         ORDER_CFGS_REF            =
*         ORDER_CFGS_INST           =
*         ORDER_CFGS_PART_OF        =
*         ORDER_CFGS_VALUE          =
*         ORDER_CFGS_BLOB           =
*         ORDER_CCARD               =
*         ORDER_CCARD_EX            =
         ORDER_SCHEDULE_EX         = int_BAPISDHEDU
         ORDER_CONDITION_EX        = int_BAPICOND
         ORDER_INCOMPLETE          = int_BAPIINCOMP
*         MESSAGETABLE              =
*         EXTENSIONIN               =
*         PARTNERADDRESSES          =
                .

IF SY-SUBRC = 0.

ENDIF.