Application Development Blog Posts
Learn and share on deeper, cross technology development topics such as integration and connectivity, automation, cloud extensibility, developing at scale, and security.
Showing results for 
Search instead for 
Did you mean: 


  The Main objective of this paper is to

  • Brief about PROACT IDoc.
  • Brief the procedure of extending/customizing PROACT IDoc to inform vendors about the stock situation and forecast and to trigger it from Custom code.

Introduction to PROACT IDoc

PROACT IDoc is used to transfer demand and stock data to SAP Supply Network Collaboration (SAP SNC) and SAP Inventory Collaboration Hub (SAP ICH) so that a supplier can see it and plan deliveries accordingly. The standard report to trigger IDoc are RSMIPROACT and RSMIPROACT02. Its reads/packs stock and demand data in  ERP system to be send to the SAP SNC/ICH system.

The business scenarios PROACT IDoc can be used are:

●  Supplier Managed Inventory (SMI)

●  Release Processing (RP)

●  Dynamic Replenishment (DR)

The IDoc generated are on the basis of vendors so if 50 materials with seven vendors as sources, it creates seven PROACT01 IDocs containing the demand and stock data for the number of materials of each vendor. The system takes account of which vendor is the source for which material when it creates the IDocs.

Now we are going to focus on extending/customizing the IDoc to send additional/Custom information.

Procedure to extend PROACT IDoc

The method we will use to extend the PROACT IDoc is implementing a Business Add-In (BADI) in the standard Function Module which is used to create the IDoc.

The process will be as follows:

  1. Create the Custom Segment with the field you want to add in WE31 and release the segment by using “SET RELEASE”. 
  2. Create an Extended IDoc type and Link it to Standard Basic IDoc type “PROACT01” using WE30.
  3. Add the custom segment to the Extended IDoc type and release the same by using “SET RELEASE”.
  4. Create a second entry for message type “PROACT” in WE82 with basic IDoc type as “PROACT01” and Extended IDoc type name.
  5. Implement the BADI “SMI_IDOC_PROACT_OUT”/method “CHANGE_BEFORE_SEND” to fill the custom segment.The BADI has been provided as an exit to Function Module “SMI_MASTERIDOC_CREATE_PROACT”.
  6. Data for the custom segment can be fetched inside the BADI. The only passing parameter to BADI are the IDoc item and header data table ,so data in the standard segments can be used fetch custom data.

For example

a) e1adrm1-partner_id contains Plant info when e1adrm1-partner_q = _WE.

b) e1adrm1-partner_id contains Vendor info when e1adrm1-  partner_q = _LF.

                        c) e1edp19-idtnr contains MATNR.

But if you want to trigger the IDoc from a custom program the additional method which needs to be followed are as follows:

Copy the Perform “idoc_create_proact” from the standard program RSMIPROACT2 (Include SMIPRF01) .The perform sorts and sends the IDoc based on vendor. The perform has many checkbox variables which are not mandatory and can be passed based on the requirement.

The passing parameter for the perform are Vendor list, Material source data and Plant ,its collects data and breaks them down into several Internal tables (which are the passing parameter for the FM 'SMI_MASTERIDOC_CREATE_PROACT')

The maximum number of material number which can be send for a vendor is capped at 200.



pi_supplier                = l_supplier             " Vendor

pi_logsys                  = fp_g_logsys         " Logical system

pi_plant                     = fp_g_werk           " Plant

pi_mat_source           = li_mat_source      " Product Source table

pi_articles                  = li_product_cap    " Capped Materials List table

pi_labst_items           = li_labst          " Unrestricted-use stock (Total Area) table

pi_klabst_items         = li_klabst        " Unrestricted-use stock (consignment)table

pi_slabst_items         = li_slabst         " Unrestricted-use stock (equity) table

pi_insme_items         = li_insme         " Quality inspection (Total Area)table

pi_kinsme_items       = li_kinsme       " Inspection stock (consignment)table

pi_sinsme_items       = li_sinsme        " Inspection stock (equity) table

pi_speme_items        = li_speme         " Blocked Stock (Total Area) table

pi_kspeme_items      = li_kspeme       " Blocked Stock (consignment) table

pi_sspeme_items       = li_sspeme       " Blocked Stock (equity) table

pi_umlme_items       = li_umlme        " Stock in Transfer table

pi_demand_items     = li_demand       " Demand data (SMI) table

pi_docnum                = l_idoc_temfp_id   " Doc Number

pi_koneig_flag          = c_true            " Flag

pi_labst_flag             = c_true            " Flag

pi_insme_flag           = c_true            " Flag

pi_speme_flag           = c_true            " Flag

pi_umlme_flag = l_stockintransfer " Flag

iv_dependent_ind     = l_ms              " Flag (SPACE)



pe_idoc_header_item = lw_idoc_header_item   "IDoc Header Data


pe_idoc_data_items  = li_idoc_data_items.         "IDoc item Data

1 Comment