Monday, February 11, 2013

Order to Cash - Technical Flow in R12

 1. Order Entry
Step 1  Enter header detail, Once after entering the header details on the order header tab , click on the save button or move to lines tab. The order header gets saved and a record will insert into OE_ORDER_HEADERS_ALL with FLOW_STATUS_CODE as ENTERED , OPEN_FLAG as Y and BOOKED_FLAG as N . Header is the primary key in OE_ORDER_HEADERS_ALL
·         In the Lines tab of the order Enter item name / number, quantity and other details in line tab. Click on the Save button. After saving the line, the line data get inserts into OE_ORDER_LINES_ALL  with FLOW_STATUS_CODE = ENTERED, BOOKED_FLAG = N, OPEN_FLAG = Y  and also records will be inserted into OE_SETS with ship set details of the order.
         Primary key is the LINE_ID in OE_ORDER_LINES_ALL and the HEADER_ID is the join between OE_ORDER_HEADERS_ALL and OE_ORDER_LINES_ALL.
        SHIP_SET_ID is the join between OE_ORDER_LINES_ALL(SHIP_SET_ID) and OE_SETS(SET_ID).
     SET_ID is the primary column in OE_SETS.

2.Order Booking

Step 2 , when Order is booked then the Flow status changed from Entered to Booked. At this stage, these below table are updated.
·         WSH_DELIVERY_DETAILS (DELIVERY_DETAIL_ID is assigned here, RELEASED_STATUS ‘R’ ready to release, LINE_ID comes as SOURCE_LINE_ID)
*In shipping transaction form order status remains "Ready to Release".
At the same time, Demand interface program runs in background And insert into inventory tables MTL_DEMAND, here LINE_ID come as a reference in DEMAND_SOURCE_LINE
3. Reservation

This step is required for doing reservations SCHEDULE ORDER PROGRAM runs in the background and quantities are reserved. Once this program get successfully get completed, the MTL_DEMAND and MTL_RESERVATIONS table get updated. LINE_ID gets updated in DEMAND_SOURCE_LINE_ID in both the tables.
4. Pick Release
Pick Release is the process of putting reservation on on-hand quantity available in the inventory and pick them for particular sales order.
Pick release can be done from 'Release Sales Order' form or 'Pick release SRS' program can be scheduled in background. In both of these cases all lines of the order gets pick released depending on the Picking rule used. If specific line/s needs to be pick release it can be done from 'Shipping Transaction form. For this case Pick Release is done from 'Release Sales Order' form with Pick Confirm=NO.
Once pick release is done these are the tables get affected:
·         If step 3 is not done then MTL_RESERVATIONS gets updated now.
·         WSH_NEW_DELIVERIES (one record gets inserted with SOURCE_HEADER_ID= order header ID, STATUS_CODE=OP =>open)
·         WSH_DELIVERY_ASSIGNMENTS (DELIVERY_ID gets assigned which comes from WSH_NEW_DELIVERIES)
·         WSH_DELIVERY_DETAILS (RELEASED_STATUS ‘S’ ‘submitted for release’)
·         (move order tables. Here request is generated to move item from Source (RM or FG) sub-inventory to staging sub-inventory)
·         MTL_MATERIAL_TRANSACTIONS_TEMP (link to above tables through MOVE_ORDER_HEADER_ID/LINE_ID, this table holds the record temporally)
·         MTL_SERIAL_NUMBERS_TEMP (if item is serial controlled at receipt then record goes in this table)
·         MTL_SERIAL_NUMBERS (enter value in GROUP_MARK_ID )
*In shipping transaction form order status remains "Released to Warehouse" and all the material still remains in source sub-inventory. We need to do Move Order Transaction for this order. Till this no material transaction has been posted to MTL_MATERIAL_TRANSACTIONS
5.Pick Confirm/ Move Order Transaction
Items are transferred from source sub-inventory to staging Sub-inventory. Here material transaction occurs.
Order line status becomes 'Picked' on Sales Order and 'Staged/Pick Confirmed' on Shipping Transaction Form.
·         MTL_MATERIAL_TRANSACTIONS_TEMP (Record gets deleted from here and gets posted to MTL_MATERIAL_TRANSACTIONS)
·         WSH_DELIVERY_DETAILS (RELEASED_STATUS becomes ‘Y’ => ‘Released’ )
·         MTL_SERIAL_NUMBERS_TEMP (record gets inserted after putting details for the item which are serial controlled at 'Sales order issue')
·         MTL_SERIAL_NUMBERS (record gets inserted after putting details for the item which are serial controlled at 'Sales order issue')
* This step can be eliminated if we set Pick Confirm=YES at the time of Pick Release

6.Ship Confirm

Here ship confirm interface program runs in background. Data removed from WSH_NEW_DELIVERIES.
The items on the delivery gets shipped to customer at this stage.
·         WSH_SERIAL_NUMBERS (records gets inserted with the DELIVERY_DETAIL_ID reference, only in case of shipped quantity is two or more)
·         MTL_MATERIAL_TRANSACTIONS (linked through Transaction source header id)
·         Data deleted from MTL_DEMAND, MTL_RESERVATIONS
·         Item deducted from MTL_ONHAND_QUANTITIES
·         MTL_SERIAL_NUMBERS_TEMP (records gets deleted from this table)
·         MTL_SERIAL_NUMBERS (Serial number stauts gets updated CURRENT_STATUS=4 , 'Issued out of store')

7.Enter Invoice
After shipping the order lines is eligible for Invoice. The Workflow background engine picks the Invoice eligible records and post it to the below interface tables.

RA_INTERFACE_LINES_ALL  -- Sale order and order line information.
RA_INTERFACE_SALESCREDITS_ALL --This table contains all sales credit information for the sales order
RA_INTERFACE_DISTRIBUTIONS_ALL --This table contains accounting distributions to be used by the transactions defined in RA_INTERFACE_LINES_ALL.

Then Autoinvoice concurrent program imports data from the above interface tables to the RA_CUSTOMER_TRX_ALL
TRX_NUMBER is the invoice number
 CUST_TRX_ID is the key to link to TRX_LINES table 
LINE_ATTRIBUTE_1 stores the order number 
LINE_ATTRIBUTE_6  stores teh LINE_ID of the order

8.Complete Line
After pushing the data  to AR interface tables the workflow back ground engine updates the lines flow status and the open flag 

9.Close Order
  Once all the lines of the sales order is closed then at the last day of the month the workflow back ground engine update the flow status code of the order to Closed and open flag to N.


  1. This comment has been removed by the author.

    1. hi,
      when will be order header(status) closed.

    2. Order Header Status will be closed after the end of month

    3. This is depends on work flow... we can customize... go through below note
      Note:284799.1 Order Header Won't Close Auntomatically After Lines Are All Closed

      Application works as designed in this case....this is not a defect.
      From your screenshots I see that the workflow is at a WAIT function.
      The activity attribute Wait Mode is set to 'Day of Month' & the attribute Day of Month is set to 'Last' (this is seeded)

  2. This comment has been removed by the author.

  3. Hi,

    Nice article. Would like to know, is it possible to alter Sales Order Pick Date to Schedule ship date instead of SYSDATE?


  4. This is a nice article .Can you let me know ,what is the process who changes the flow status code for line to 'Awaiting_shiping 'at the time of book thew order,first it should be 'booked' then changed to 'Awaiting_shiping '