1. Order Entry
This is first stage, When the order is entered in the system, it creates a record in order headers and Order Lines table.
This is first stage, When the order is entered in the system, it creates a record in order headers and Order Lines table.
- Enter header details: Once you enter details on the order header and save it or move it to lines, record goes to one table oe_order_headers_all flow_status_code = ENTERED, booked_flag = N), Primary key=HEADER_ID
- No record exist in any other table for this order till now.
- Enter Line details for this order: Enter different item numbers, quantity and other details in line tab. When the record gets saved, it goes to one table. Order header details will be linked with line details by order HEADER_ID. oe_order_lines_all (flow_status_code = ENTERED, booked_flag = N, open_flag = Y) Primary key= LINE_ID
2.Order Booking
This is next stage, when Order is booked then the Flow status changed from Entered to Booked. At this stage, these below table get affected.
This is next stage, when Order is booked then the Flow status changed from Entered to Booked. At this stage, these below table get affected.
- oe_order_headers_alL (flow_status_code as BOOKED, booked_flag updated to Y)
- oe_order_lines_all (flow_status_code as AWAITING_SHIPPING, booked_flag updated Y)
- wsh_delivery_details (DELIVERY_DETAIL_ID is assigned here, released_status ‘R’ ready to release, LINE_ID comes as SOURCE_LINE_ID)
- wsh_delivery_assignments (DELIVERY_ASSIGNMENT_ID is assigned for DELIVERY_DETAIL_ID present in wsh_delivery_details, DELIVERY_ID remains blank till this stage)
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.
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 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:
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’)
- MTL_TXN_REQUEST_HEADERS
- MTL_TXN_REQUEST_LINES (LINE_ID goes as TXN_SOURCE_LINE_ID)
- (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)
- oe_order_lines_all (flow_status_code ‘PICKED’ )
- MTL_MATERIAL_TRANSACTIONS (LINE_ID goes as TRX_SOURCE_LINE_ID)
- mtl_transaction_accounts
- wsh_delivery_details (released_status becomes ‘Y’ => ‘Released’ )
- wsh_delivery_assignments
- MTL_ONHAND_QUANTITIES
- 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.
Here ship confirm interface program runs in background.
The items on the delivery gets shipped to customer at this stage.
- oe_order_lines_all (flow_status_code ‘shipped’)
- wsh_delivery_details (released_status ‘C’ ‘Shipped’, SERIAL_NUMBER if quantity is ONE)
- WSH_SERIAL_NUMBERS (records gets inserted with the DELIVERY_DETAIL_ID reference, only in case of shipped quantity is two or more)
- mtl_transaction_interface
- mtl_material_TRANSACTIONS (linked through Transaction source header id)
- mtl_transaction_accounts
- 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')
After shipping the order the order lines gets eligible to get transfered to RA_INTERFACE_LINES_ALL. Workflow background engine picks those records and post it to RA_INTERFACE_LINES_ALL. This is also called Receivables interface, that mean information moved to accounting area for invoicing details. Invoicing workflow activity transfers shipped item information to Oracle Receivables. At the same time records also goes in the table RA_INTERFACE_SALESCREDITS_ALL which hold details of sales credit for the particular order.
ra_interface_lines_all (interface table into which the data is transferred from order management) Then Autoinvoice program imports data from this table which get affected into this stage are receivables base table. At the same time records goes in
ra_customer_trx_all (cust_trx_id is primary key to link it to trx_lines table and trx_number is the invoice number)
ra_customer_trx_lines_all (line_attribute_1 and line_attribute_6 are linked to order number and line_id of the orders)
ra_customer_trx_lines_all (line_attribute_1 and line_attribute_6 are linked to order number and line_id of the orders)
8.Complete Line
In this stage order line level table get updated with Flow status and open flag.
oe_order_lines_all (flow_status_code ‘shipped’, open_flag “N”)
In this stage order line level table get updated with Flow status and open flag.
oe_order_lines_all (flow_status_code ‘shipped’, open_flag “N”)
9.Close Order
This is last step of Order Processing. In this stage only oe_order_lines_all table get updated. These are the table get affected in this step.
oe_order_lines_all (flow_status_code ‘closed’, open_flag “N”)
This is last step of Order Processing. In this stage only oe_order_lines_all table get updated. These are the table get affected in this step.
oe_order_lines_all (flow_status_code ‘closed’, open_flag “N”)
oe_order_HEADERS_all
----------------------------------------------------------------------------------------------
Few more very good documents on this topic:
http://erpschools.com/Apps/oracle-applications/Articles/General/Order-to-Cash-Cycle/index.aspx
http://www.oracleappshub.com/om/understanding-data-flow-for-standard-order
http://erpschools.com/Apps/oracle-applications/Articles/General/Order-to-Cash-Cycle/index.aspx
http://www.oracleappshub.com/om/understanding-data-flow-for-standard-order
excellent... they way you delivered helped both a functional as well as Technical guys to understand the basic flow. Can you please update more on different business cases and setups.
ReplyDeleteThanks
Kaushik
hey there,
ReplyDeletejust want to say that this is an excellent blog.. thanks!
hey i just want to say that this is an excellent blog~
ReplyDeleteWonderful job, very nice. exactly i am looking for this.
ReplyDeleteHow About if backordered, please update.
ReplyDeleteThanks DEVendra Gulve for the wonderful blog.
Hi Khaled,
ReplyDeleteFollowing are the changes which will happen if you backorder the line/s
1. In WSH_DELIVERY_DETAILS table:
MOVE_ORDER_LINE_ID becomes NULL as mover order gets canceled
RELEASED_STATUS becomes 'B' from 'Y'
2. In WSH_DELIVERY_ASSIGNMENTS table:
DELIVERY_ID becomes NULL
3. In WSH_NEW_DELIVERIES table:
STATUS_CODE becomes 'CL' from 'OP'
4. Record/s from MTL_RESERVATIONS table gets deleted
This is not all... there would be other changes also in table MTL_ONHAND_QUANTITIES, also if the item is serial controlled then there would be changes in those tables also.
Keep searching...
Thanks
Devendra
Hi,
ReplyDeleteCan you please explain me in detail about step 3,( which conc. program is used to do reservations)
Cheers
Ramana
Excellent one. This will be very helpful for both functional and technical guys
ReplyDeleteThat was a brilliant article I have ever found on O2C cycle, great work.....
ReplyDeleteVipin
Great post! Thanks...
ReplyDeletegood one
ReplyDeletesrikanth
Excellent work dude.
ReplyDeleteSrikanth.
Excellent work dude
ReplyDeleteSrikanth
Nice Article.
ReplyDeleteHi Dev,
ReplyDeleteI need to know what the meaningof different values in apps.wsh_delivery_details.inv_interfaced_flag
Since inventory handles shipping updates, these flags get populated by the
ReplyDeleteShipping Transactions function, and are also usually a part of the
WSH_DELIVERY_DETAILS status as well. In any case, these are the normal
definitions applied to those single letter abbreviations:
'Y','Y=Staged',
'R','R=Ready to Release',
'S','S=Rel to Warehouse',
'B','B=Backorder',
'P','P=Pending Inv',
'C','C=Shipped',
'N','N=Not Ready',
'D','D=Cancelled',
'X','X=Not Applicable
NULL indicates either the record is still in some early state and not ready
to commit a record or is not a shippable or transactable item. (It can also
mean a missing record, if it has appropriate attributes and has progressed
to where a workflow activity should have provided a status).
For details check out doc ID 207780.1 on metalink
Hi Dev,
ReplyDeleteThanks for the GR8 article. Can you go further beyond OM and give the details of the Cash Cycle as well.
Thanks Again.
Anas MS.
This is really good one.. keep it up..
ReplyDeleteVijay
Greate Itis very useful in understanging the flow
ReplyDeletethanks
can we have the same kind of data flow of procure to purchase
ReplyDeletehai devendra..great work..
ReplyDeletekeep it up.. I expect more
articles like this fro you...
HI,
ReplyDeleteGreat job, Can you please send me different accounting entries generated in O2C cycle.
Thanks,
Sasikala
Very Nice article.
ReplyDeleteAshish wakale
This is an excellent article...something so brief and yet informative is very hard to find. Thanks
ReplyDeleteWow, this is a master piece… mind blowing article I have to say.
ReplyDeleteIts our (readers') privilege to have such kind of document which gives so much of information in such a concise manner and simplest way.
Christina
Dev,
ReplyDeleteyour blog is very helpful.
Thanks allot.
Excellent.. In R12, Can you explain me where ct. acceptance comes into picture and also when revenue is recognized i.e., whether we are considering ct. acceptance before generating Invoice or after generating invoice? Please explain to me.
ReplyDeleteHi Deva,
ReplyDeleteExcellent document for O2C.I need one clarification.From which statge , Move order is created? What is difference bet move order and transction move order? Kindly explain.
Thanks and Regards
Senthil
Hi Senthil,
ReplyDeleteWhen we try to do Pick Release, we basically do two steps:
1. Request required material to be transferred from stored to shipping area (or Staging sub-inventory). This is done by raising a Move Order. Mover order is a document based on which store keeper transfers the material.
2. Actual/Physical movement of the requested material. When the material is issued on the basis of Move Order and shifted to staging sub-inventory then this transaction should be registered in system, which is done by doing Transact Move Order.
Hope this answers are query.
Thanks
Devendra
Thanks Davendra.so these 2 steps are done in Pick release stage.
ReplyDeleteRegards
Senthil
Can you please provide the detail steps in both technical & functional aspects when :-
ReplyDelete1.Drop shipment occured
2.In case of RMA
can anyone help in writing the query for internal orders status. whertein i require two feilds.
ReplyDelete"Location_A_IO_Transit" it should show the Sum of qty that is shipped from any other locations for location_A and that is not delivered(or taken into inventory)
"Location_A_IO_Reserved" it should show the Sum of qty that is reserved from any other locations for location_A and that is not shipped(or reserve qty for the Locatio_A from any other locations)
Amazing Article Sir .. greatest detail possible .. ! :) Thank you very much for such a beautiful writing ...
ReplyDeleteVenki
Hi Devendra,
ReplyDeleteI am having a situation where sales credit information is not exsiting in some transactions. Now revenue accounting is faling for no sales credit in RA_CUST_TRX_LINE_SALESREPS. Is there a way you can insert lines into this table after the fact the invoice is transferred to GL. definitely it will be back end update.
Thanks,
Piyush
Very nice document for technical persons
ReplyDeleteAn order was created with both source and destination org as the same - 'US'. The destination org should ahve been Columbus. I tried fixing by doing the following:
ReplyDelete- Updated PO_REQUISITION_LINES_ALL with the correct destination org.
- Update mtl_transactions_interface with transfer_subinventory and transfer_locator.
I am still getting the error "|Transaction failed to transfer reservation|INV_XFR_RSV_FAILURE|Failed to update reservation|Update Reservation failed.|Warning: For Delivery Detail 1"
Has anyone come across this error?
Has anyone come across the error in MTI table
ReplyDelete"|Transaction failed to transfer reservation|INV_XFR_RSV_FAILURE|Failed to update reservation|Update Reservation failed.|Warning: For Delivery Detail 1"
Please help me resolve this error in mtl_transactions_interface table
Great post!!
ReplyDeleteMany Thanks.
I have an issue.
One order has file linse, Order header is booked and all 4 lines are closed except one. One line status showing "Picked".
As far as I know, once the order get booked then it also insert the value in WSH delivery details table. all the 4 lines are available in this table except one.
Can someone assist?
Great post!!
ReplyDeleteMany Thanks.
I have an issue.
One order has file linse, Order header is booked and all 4 lines are closed except one. One line status showing "Picked".
As far as I know, once the order get booked then it also insert the value in WSH delivery details table. all the 4 lines are available in this table except one.
Can someone assist?
I believe, you are not able to find record in WSH for the line with 'Picked' status.
ReplyDeleteIt is not possible to pick the line with out having record in WSH tables, please check whether anybody has access to delete it manually or not. If nobody has access, then Oracle support will be the best people to help you in this.
Thanks
Devendra
Hello,
ReplyDeleteLooking for some assistance. I have 3 consumer swap orders, lines status of the order is showing shipped instead of closed. Workflow for the line is complete.
Can you assist?
Hi Neeraj,
ReplyDeleteCheck out status of interface trip stop program for this order. or try running it again for this delivery or STOP_ID.
Id these are inventory item also check INV_INTERFACED_FLAG in wsh_delivery_details table, this flag shall be 'Y' or 'X' (X for phantom item).
Hi Devendra,
ReplyDeleteIn Ship Confirm step, data never deleted from wsh_new_deliveries table.Could you please check and remove this clause from article? It can misguide to anyone.
Thanks,
Anand Jaisawal
Hello Anand,
ReplyDeleteThanks a lot for your suggestion, I removed the line now.
Thanks
Devendra
Some of my order lines are not in WSH_DELIVERY_DETAILS even though the order is booked..??
ReplyDeletePlease check whether those lines are eligible for shipping? Also check their status in Shipping Transactions form.
ReplyDeleteThanks
Devendra
Excellent Post. Thanks.
ReplyDeleteSankar.N
This is awesome, Could you please do the same for P2P cycle in R12 please.
ReplyDeleteKeep it up..God bless you friend..
wonderful work, really appreciate the efforts you put to arrange such important information,
ReplyDeleteThanks,
Hi I went through this document and it is simply awesome .. everything has been explained very clearly
ReplyDeleteHowever I have one doubt ... I have lines in booked status in OM but still they are getting picked up when i m using api WSH_PICKING_BATCHES_PUB.CREATE_BATCH and subsequently releasing using WSH_PICKING_BATCHES_PUB.RELEASE_BATCH... how is this possible that we are able to pick lines which are still not in awaiting shipping status in OM
Hi Deva ,
ReplyDeleteExcellent Work ..
Keep It Up.
Thanks
Hi Deva.
ReplyDeleteI have DELIVERY_ID. With the help of that id how can i retrieve excise data?
Please help
Rahul
Hi Rahul,
ReplyDeleteGet DELIVERY_DETAIL_ID which is associated with DELIVERY_ID from table WSH_DELIVERY_ASSIGNMENTS.
Get order line ID (SOURCE_LINE_ID)associated with DELIVERY_DETAIL_ID from table WSH_DELIVERY_DETAILS. Then based on Order line ID search for Order and look for excise details.
Hope this answers your question.
Thanks
Devendra
hi devendra,
ReplyDeletewht the knowledge u sahre with us is always keeps u in my mind.nice work.u have to share a lot.please give me the interview related question on o2c
Dear Dev,
ReplyDeleteReally good work, you have out done the other article on same subject.
I have one question.
If i need to know that in past lets say 6 months before what was my onhand/available quantity for an item at that time?
1. Is it possible to know the onhand/available quantity 6 months before??
2. If Yes, Could you provide table/column level info/query to calculate it.
Regards
SMSA
Hi SMSA,
ReplyDeleteTry this report "Transaction historical summary" from Inventory.
Thanks
Devendra Gulve
Hi it a very useful naration to functional people. Thank u Dev
ReplyDeleteHey DEVendra, very nice article, but I am not clear about step 7 and 8.... which program is updating these values. oe_order_lines_all.Flow_Status_Code = Shipped is already done in step 6 wat happens in step 8 then?
ReplyDeleteany information on ITS - which tables gets affected after it is completed?
Thanking you in anticipation. Hope you will answer ASAP
Pia
Hey Devendra,
ReplyDeleteThanks a lot for this blog. It is very useful to me who is a newcomes to the Oracle EBS world. I have a question about PICK CONFIRM DATE. What is the query to get the PICK CONFIRM DATE ? Appreciate your response.
Hi Devendra,
ReplyDeleteIs there a way to do partial pick release.
Basically what I need to achieve.
If the required quantity is 10 for a specific Item and there is only 8 available then it should get pick relesaed for 8 and the remaning 2 should get back ordered.
If so what are the steps to achieve the same.
Thanks
Jin
You can certainly split the delivery and specify qty as 8 at the time of pick release.
ReplyDeleteElse same can be done at the time of Pick Confirm (transact Move Order)
Thanks
Devendra
Hi Devendra,
ReplyDeleteWe have a requirement to pull the lot numbers for which pick release has happened. But we are unable to find any lot_number details in the WSH_DELIVERY_DETAILS , MTL_RESERVATIONS or in any other table which gets affected once pick release is done. Can you let me know if there's any other table that might have the lot_number detail post pick release. Thanks in advance.
Regards,
Karthik.
Hi Devendra,
ReplyDeleteWe have a requirement to pull the lot numbers for which pick release has happened. But we are unable to find any lot_number details in the WSH_DELIVERY_DETAILS , MTL_RESERVATIONS or in any other table which gets affected once pick release is done. Can you let me know if there's any other table that might have the lot_number detail post pick release. Thanks in advance.
Regards,
Karthik.
Hi Karthik,
ReplyDeleteCheck in MTL_TRANSACTION_LOT_NUMBERS in reference of TRANSACTION_ID.
Thanks
Devendra Gulve
Good Job
ReplyDeleteHi Devendra,
ReplyDeleteThanks alot for the info and your time. Let me try it out and get back to you with my feedback.
Regards,
Karthik.
Hi Devendra,
ReplyDeleteFor the previous question from Karthik, you had said that lot_numbers can be pulled from MTL_TRANSACTION_LOT_NUMBERS in reference of TRANSACTION_ID. But WSH_DELIVERY_DETAILS table is giving many transaction_id for one particular source_header_id. In this case how do i get the lot_number of an order/delivery that has been pick released,pick confirmed and ship confirmed. Thanks.
Hey, nice site you have here! Keep up the excellent work!
ReplyDeleteWonderful article on same subject at below link
ReplyDeletehttp://amaralam.blogspot.in/2013/06/order-to-cash-cycle-in-oracle-apps.html