Wednesday, 5 March 2014
Order to Cash Technical Flow
Order Entry
Sales Order entry consists of two parts, Order header and Order lines.Order Header
As order header information is entered and saved a record is created in OE_ORDER_HEADERS_ALL only and this record will be linked to many other tables and we shall discuss about those dependent tables now.
Transaction Type:
Transaction type is used to select the workflow path/process and it also defaults many other fields on the sales order. This transaction type is associated with a sequence which is responsible for providing the sales order number for the sales order.
--Transaction Type SELECT oha.order_number , oha.order_type_id , ott.name , ott.description FROM oe_order_headers_all oha, oe_transaction_types_tl ott WHERE 1 = 1 AND oha.order_number = '&ur_order#' AND oha.order_type_id=ott.transact |
Price List:
Price list information is stored in QP_LIST_HEADERS_B table but we need to refer to its multilingual table QP_LIST_HEADERS_TL
--Price List SELECT oha.order_number , oha.price_list_id , qlht.name , qlht.description FROM oe_order_headers_all oha, qp_list_headers_tl qlht WHERE 1 = 1 AND oha.order_number = '&ur_order#' AND oha.price_list_id=qlht.list_ |
--Sales Person SELECT oha.order_number , jrre.source_name , jrre.source_email FROM oe_order_headers_all oha, jtf_rs_salesreps jrs , jtf_rs_resource_extns jrre WHERE 1 = 1 AND oha.order_number = '&ur_order#' AND oha.salesrep_id =jrs.salesrep_id AND jrs.resource_id = jrre.resource_id; |
--Header Status SELECT oha.order_number, flv.lookup_type , flv.lookup_code , flv.meaning , flv.description FROM fnd_lookup_values flv, oe_order_headers_all oha WHERE 1 = 1 AND oha.order_number = '&ur_order#' AND oha.flow_status_code = flv.lookup_code AND lookup_type = 'FLOW_STATUS' AND LANGUAGE = 'US'; |
--Payment terms SELECT oha.order_number, name , description FROM oe_order_headers_all oha, ra_terms rt WHERE 1 = 1 AND oha.order_number = '&ur_order#' AND rt.term_id = oha.payment_term_id ; |
--Shipping Method SELECT oha.order_number, wcsm.service_level FROM oe_order_headers_all oha, wsh_carrier_ship_methods wcsm WHERE 1 = 1 AND oha.order_number = '&ur_order#' AND oha.shipping_method_code= wcsm.ship_method_code AND wcsm.organization_id = oha.ship_from_org_id; |
Order Lines
Order lines consists of item ordered as part of the sales order.
On Hand Quantity of Item:
--On Hand Quantity SELECT oha.order_number, ool.line_number , ool.ordered_item , SUM(moq.transaction_quantity) FROM oe_order_headers_all oha, oe_order_lines_all ool , mtl_onhand_quantities moq WHERE 1 = 1 AND oha.order_number = '&ur_order#' AND oha.header_id = ool.header_id AND ool.ship_from_org_id = moq.organization_id GROUP BY oha.order_number, ool.line_number , ool.ordered_item; |
Things to notice after entering the order
You can notice that the values of the following column in line and headers table as follows
flow_status_code = ENTERED, booked_flag = N, open_flag = Y |
Order Booking
Once the order is booked from the application, following are the changes occurred in the backed- 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)
- Since the order is now booked, delivery details of the order are created in WSH_DELIVERY_DETAILS table. WSH_DELIVERY_DETAILS has delivery lines and LPNs.
OE_ORDER_LINES_ALL.line_id = WSH_DELIVERY_DETAILS.source_
line_id - These delivery details information can been viewed form ‘Shipping Transactions Form’ and the delivery status in the application will be as ‘Ready to Release’
- WSH_DELIVERY_DETAILS.released_
status =’R’ - WSH_DELIVERY_DETAILS.Release_
Status can have any of the below valid values - Execute the below query to see lookup values
SELECT lookup_type, lookup_code, meaning, description FROM fnd_lookup_values WHERE lookup_type = 'PICK_STATUS' AND LANGUAGE = 'US';
- WSH_DELIVERY_ASSIGNMENTS assigns delivery details to a delivery and/or a parent delivery detail (LPN).
WSH_DELIVERY_ASSIGNMENTS.deliv
ery_detail_id = WSH_DELIVERY_DETAILS.delivery_ detail_id - WSH_DELIVERY_ASSIGNMENTS.
delivery_id will be NULL as still pick release operation is not performed as final delivery is not yet created. - At the same time when order is booked ‘Demand interface program‘ is triggered in the background and demand of the item with specified quantity is created and these demand information is stored in MTL_DEMAND
MTL_DEMAND.demand_source_line = OE_ORDER_LINES_ALL.line_id
Reservations
This step is required for doing reservations SCHEDULE ORDER PROGRAM runs in the background(if scheduled) and quantities are reserved. Once this program get successfully get completed, the MTL_DEMAND and MTL_RESERVATIONS tables are updated. OE_ORDER_LINES_ALL.line_id = MTL_RESERVATIONS.demand_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 Selection List Generation – 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 material resveration is not done then MTL_RESERVATIONS gets updated now.
- A new record is created in WSH_NEW_DELIVERIES with status_code = ‘OP’ (Open). WSH_NEW_DELIVERIES has the delivery records.
WSH_DELIVERY_ASSIGNMENTS.deliv
ery_id = WSH_NEW_DELIVERIES.delivery_id - WSH_DELIVERY_DETAILS.released_
status changes to ‘S’ (‘submitted for release’) - A move order is created in Pick Release process which is used to pick and move the goods to staging area (here move order is just created but not transacted). MTL_TXN_REQUEST_HEADERS, MTL_TXN_REQUEST_LINES are move order tables
- MTL_MATERIAL_TRANSACTIONS_TEMP (link to above tables through move_order_header_id/line_id, this table holds the record temporally)
Pick Confirm
Pick Confirm is to transact the move order created in Pick Release process. In 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 is updated with Sales Order Pick Transaciton
MTL_MATERIAL_TRANSACTIONS.trx_
source_line_id = OE_ORDER_LINES_ALL.line_id - MTL_TRANSACTION_ACCOUNTS is updated with accounting information
- WSH_DELIVERY_DETAILS. released_status=‘Y’ (‘Released’)
- WSH_DELIVERY_ASSIGNMENTS, MTL_ONHAND_QUANTITIES are updated accordingly
Ship Confirm
Shipping execution of the order starts here. The goods are picked from staging area and given to shipping. “Interface Trip Stop” program runs in the backend.- OE_ORDER_LINES_ALL .flow_status_code =‘SHIPPED’
- WSH_DELIVERY_DETAILS. released_status=‘C’ (‘Shipped’)
- Data from MTL_TRANSACTIONS_INTERFACE is moved to MTL_MATERIAL_TRANACTIONS and MTL_MATERIAL_TRANSACTIONS is updated with Sales Order Issue transaction.
- Data is deleted from MTL_DEMAND, MTL_RESERVATIONS and WSH_NEW_DELIVERIES
- Item deducted from MTL_ONHAND_QUANTITIES
- MTL_TRANSACTION_ACCOUNTS is updated with accounting information.
Generating Invoice
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.OE_ORDER_LINES_ALL.invoice_
ra_interface_lines_all (interface table into which the data is transferred from order management) Then Auto invoice program imports data from this table which get affected into this stage are receivables base table (especially ra_customer_trx_all and ra_customer_trx_lines_all).
RA_CUSTOMER_TRX_LINES_ALL.line |
Close Order
Last step of the process is to close the order which happens automatically once the goods are shippedOE_ORDER_LINES_ALL.flow_
OE_ORDER_LINES_ALL.open_flag = ‘N’
Header is closed in the month end, its general oracle standard process
WITH Class
Definition:
In Oracle PL/SQL, the WITH clause is a subquery factoring clause which is used to create a named subquery block. This block acts as a virtual table or an inline view for a SQL statement. It was first introduced in Oracle 9.2. It reduces the overhead of multiple references of a table alias in a query. The scope of the WITH clause subquery block is the SELECT query with which is is associated.
Example Syntax:
With query_name As
(
SQL query
)
SELECT * FROM query_name;
--------------------------
WITH [NAME] as
(
SELECT statements
)
SELECT [column list]
FROM [NAME]
---------------------------
Example Usage:
SQL> WITH C AS
(SELECT 1 N FROM DUAL UNION ALL
SELECT 2 FROM DUAL UNION ALL
SELECT 5 FROM DUAL UNION ALL
SELECT 20 FROM DUAL UNION ALL
SELECT 29 FROM DUAL UNION ALL
SELECT 40 FROM DUAL)
SELECT * FROM C;
N
----------
1
2
5
20
29
40
6 rows selected.
Oracle With Clause Example
WITH CNT_DEPT AS
(
SELECT DEPARTMENT_ID,
COUNT(1) NUM_EMP
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
)
SELECT EMPLOYEE_ID,
SALARY/NUM_EMP
FROM EMPLOYEES E,
CNT_DEPT C
WHERE E.DEPARTMENT_ID = C.DEPARTMENT_ID;
In Oracle PL/SQL, the WITH clause is a subquery factoring clause which is used to create a named subquery block. This block acts as a virtual table or an inline view for a SQL statement. It was first introduced in Oracle 9.2. It reduces the overhead of multiple references of a table alias in a query. The scope of the WITH clause subquery block is the SELECT query with which is is associated.
Example Syntax:
With query_name As
(
SQL query
)
SELECT * FROM query_name;
--------------------------
WITH [NAME] as
(
SELECT statements
)
SELECT [column list]
FROM [NAME]
---------------------------
Example Usage:
SQL> WITH C AS
(SELECT 1 N FROM DUAL UNION ALL
SELECT 2 FROM DUAL UNION ALL
SELECT 5 FROM DUAL UNION ALL
SELECT 20 FROM DUAL UNION ALL
SELECT 29 FROM DUAL UNION ALL
SELECT 40 FROM DUAL)
SELECT * FROM C;
N
----------
1
2
5
20
29
40
6 rows selected.
Oracle With Clause Example
WITH CNT_DEPT AS
(
SELECT DEPARTMENT_ID,
COUNT(1) NUM_EMP
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
)
SELECT EMPLOYEE_ID,
SALARY/NUM_EMP
FROM EMPLOYEES E,
CNT_DEPT C
WHERE E.DEPARTMENT_ID = C.DEPARTMENT_ID;
Subscribe to:
Posts (Atom)