This Post is about Oracle applications RFQ to Receipt Cycle.In this Post I will explain the Cycle from RFQ to PO Receipt with screen shots.

High -Lights of this Cycle is  to Create:

  • RFQ
  • Quote
  • Purchase Order
  • Receive against PO.

Once RFQ is created , Submit concurrent job “Request to Print the RFQ” for a supplier. On completion this job will increment print count for that supplier as shown below.

In below  Oracle Apps UIs we can see
  1. RFQ # 308,
  2. Supplier Info from Supplier List and
  3. Price Breaks.
 
Print RFQ for all the Suppliers by means of Concurrent Program available in Oracle Apps


Once we print the RFQ , status of RFQ become Printed , and print count will increment for all suppliers .Since we got response from the Office Supplier , Inc Site – OFFICESUPPLIER , Responded field populated for this supplier only . 

  
 
From the RFQ , Select Tools > Copy Doc .It will Create Quotations as shown below.
  1. Enter the Supplier Name for whom you want to create Quote.
  2. Press OK and it will Create Quotation.
  1.  Query for Quotation # 502.
  2. Create Purchase Order Agreement from Quotation by selected Tools > Copy Doc
  3. Press Ok and it will Create Purchase Order Agreement. 
 Query for PO Agreement and Approve it
Once Oracle Purchase agreement got approved , creates the releases for Blanket PO Agreement .In our example PO Agreement Release we have item Test001 , BUT Item Test001 has restricted to be ordered from supplier from “Approval Supplier list”, and as  our Supplier is not part of any Approve Supplier list , system will throw Error.
 
For my test , I just remove the Item Test001 and Approve the Oracle Purchase Order Release and finally did the receipt against PO.
Product family
Product Code
Step No
Step name






1
Order Management (OM):




Order Management
ONT
1.1
Complete the sales orders
Order Management
ONT
1.2
Import Sales Order
Order Management
ONT
1.3
Pre-Billing Acceptance
Shipping
WSH
1.4
Complete the shipping transactions
Order Management
ONT
1.5
Prepare the link with AR




Order Management
ONT
1.5.1
Check run of Workflow background engine
Receivables
AR
1.5.2
Run the Invoice Interface/Autoinvoice
Receivables
AR
1.5.3
Verify the Autoinvoice Exceptions






2
Receivables (AR):




Receivables
AR
2.1
Complete all Receivables transactions for the period being closed
Subledger Accounting
SLA
2.2
Create accounting
Subledger Accounting
SLA
2.3
Transfer to GL
Receivables
AR
2.4
Manage the Receivables Period






3
Purchasing (PO):




Purchasing
PO
3.1
Complete all transactions for Oracle Purchasing
Subledger Accounting
SLA
3.2
Create accounting for Payables
Subledger Accounting
SLA
3.3
Transfer to GL
Purchasing/Payables
PO/AP
3.4
Purchasing Period management




Payables
AP
3.4.1
Close the Payables period
Purchasing
PO
3.4.2
Run the Receipt Accruals – Period-End Report
Purchasing
PO
3.4.3
Manage the PO Periods
Payables
AP
3.4.4
Open next AP Period






4
Transactions control:






4.1
Enter all transactions in eBS:




Inventory
INV
4.1.1
Enter the pending cycle counts
Inventory
INV
4.1.2
Check run of the Material Transaction Manager
Inventory
INV
4.1.3
Check run of the Move Transaction Manager 
Inventory
INV
4.1.4
Check run of the Lot Move Transaction Manager    
Inventory
INV
4.1.5
Check run of the Cost manager (mandatory)




Inventory
INV
4.2
Check the pending or in error transactions
Inventory
INV
4.3
Unprocessed Material (resolution required)
Inventory
INV
4.4
Uncosted material transactions (resolution required)
Costing
CST
4.5
Pending LCM Interface Transactions (resolution required)
Work In Process
WIP
4.6
Pending WIP Costing transactions (resolution required)
Shop Floor Management
WSM
4.7
Pending WSM interface (resolution required)






4.7.1
Run the Import WIP Lot Transactions


4.7.2
Run the (WSM) Pending Transactions Report




Shipping
WSH
4.8
Unprocessed Shipping Transactions (by default, resolution required)




Shipping
WSH
4.8.1
Search delivery line with the status Shipped
Shipping
WSH
4.8.2
Run the Interface Trip Stop SRS




Inventory
INV
4.9
Pending material transactions for this period (resolution recommended)
Work In process
WIP
4.10
Pending Shop Floor Move (resolution recommended)
Purchasing
PO
4.11
Pending Receiving Transactions (resolution recommended)
Project Manufacturing
PJM
4.12
Project Manudacturing – Cost Collector




Project Manufacturing
PJM
4.12.1
Run the Cost Collection Manager
Project Manufacturing
PJM
4.12.2
Import the transactions in Projects






5
Cost Management:




Costing
CST
5.1
Cost Of Goods Sold




Costing
CST
5.1.1
Record the Order Management Transactions
Costing
CST
5.1.2
Collect the Revenue Recognition information
Costing
CST
5.1.3
Generate the COGS Recognition events




Costing
CST
5.2
Create accounting
Costing
CST
5.3
Transfer to GL






6
 Inventory Open / Close period:




Inventory
INV
6.1
Open the next period
Inventory
INV
6.2
Close the period
Inventory
INV
6.3
Open or Close several periods in the same time




Inventory
INV
6.3.1
Hierarchy of Organizations
Costing
CST
6.3.2
Open several periods
Costing
CST
6.3.3
Close several periods
Here is the SQL Query for Link Between PO-RCV-XLA-AP.

SELECT DISTINCT
       A.PO_NO,
       A.LINE_NUM,
       A.DIST_NUM,
       A.ITEM_CATEGORY,
       A.IS_CAPITAL,
       A.SEGMENT2 PO_ACCT,
       A.ACCT PO_ACCT_DESC,
       A.UNIT_PRICE,
       A.AMOUNT_ORDERED,
       NVL (
          (SELECT TO_CHAR (RT.TRANSACTION_DATE, ‘yyyy-mm-dd’)
             FROM RCV_TRANSACTIONS RT
            WHERE     RT.PO_HEADER_ID = A.PO_HEADER_ID
                  AND RT.PO_LINE_ID = A.PO_LINE_ID
                  AND RT.PO_LINE_LOCATION_ID = A.LINE_LOCATION_ID
                  AND RT.PO_DISTRIBUTION_ID = A.PO_DISTRIBUTION_ID
                  AND RT.TRANSACTION_TYPE = ‘DELIVER’
                  AND ROWNUM = 1),
          ‘N’)
          RECIEVED_FLAG,
       B.SEGMENT2 SLA_ACCT,
       B.ACCT SLA_ACCT_DESC,
       B.ENTERED_DR,
       B.ENTERED_CR,
       B.ACCOUNTED_DR,
       B.ACCOUNTED_CR,
       C.SEGMENT2 AP_ACCT,
       C.ACCT AP_ACCT_DESC,
       C.AMOUNT,
       A.SHIP_RECEIPT_FLAG,
       A.DIST_RECEIPT_FLAG
  FROM (SELECT POH.SEGMENT1 PO_NO,
               POL.LINE_NUM,
               POLL.LINE_LOCATION_ID,
               POL.PO_LINE_ID,
               POL.PO_HEADER_ID,
               POD.DISTRIBUTION_NUM DIST_NUM,
               POD.CODE_COMBINATION_ID,
               POD.PO_DISTRIBUTION_ID,
               POL.UNIT_PRICE,
               POD.AMOUNT_ORDERED,
               GCC.SEGMENT2,
               GL_FLEXFIELDS_PKG.GET_CONCAT_DESCRIPTION (
                  GCC.CHART_OF_ACCOUNTS_ID,
                  GCC.CODE_COMBINATION_ID,
                  ‘.’)
                  ACCT,
               NVL (POLL.ACCRUE_ON_RECEIPT_FLAG, ‘N’) SHIP_RECEIPT_FLAG,
               NVL (POD.ACCRUE_ON_RECEIPT_FLAG, ‘N’) DIST_RECEIPT_FLAG,
               (SELECT SEGMENT1
                  FROM MTL_CATEGORIES_B
                 WHERE CATEGORY_ID = POL.CATEGORY_ID AND ROWNUM = 1)
                  ITEM_CATEGORY,
               HL_PO_UTL_PKG.IS_CAPITAL (POL.CATEGORY_ID) IS_CAPITAL
          FROM PO_HEADERS_ALL POH,
               PO_LINES_ALL POL,
               PO_LINE_LOCATIONS_ALL POLL,
               PO_DISTRIBUTIONS_ALL POD,
               GL_CODE_COMBINATIONS GCC
         WHERE     POH.PO_HEADER_ID = POL.PO_HEADER_ID
               AND POH.PO_HEADER_ID = POD.PO_HEADER_ID
               AND POL.PO_LINE_ID = POD.PO_LINE_ID
               AND POH.PO_HEADER_ID = POLL.PO_HEADER_ID
               AND POL.PO_LINE_ID = POLL.PO_LINE_ID
               AND POLL.LINE_LOCATION_ID = POD.LINE_LOCATION_ID
               AND POD.CODE_COMBINATION_ID = GCC.CODE_COMBINATION_ID
               AND POL.ITEM_ID IS NULL /*AND poh.po_header_id IN
                                       (SELECT * FROM tmp_po_accrue_on_receipt_flag)*/
                                      ) A,
       (SELECT RT.PO_HEADER_ID,
               RT.PO_LINE_ID,
               RT.PO_LINE_LOCATION_ID,
               RT.PO_DISTRIBUTION_ID,
               RT.VENDOR_ID,
               RT.VENDOR_SITE_ID,
               SLA.*
          FROM (SELECT XTE.SOURCE_ID_INT_1,
                       XL.CODE_COMBINATION_ID,
                       XL.ENTERED_DR,
                       XL.ENTERED_CR,
                       XL.ACCOUNTED_DR,
                       XL.ACCOUNTED_CR,
                       GCC.SEGMENT2,
                       GL_FLEXFIELDS_PKG.GET_CONCAT_DESCRIPTION (
                          GCC.CHART_OF_ACCOUNTS_ID,
                          GCC.CODE_COMBINATION_ID,
                          ‘.’)
                          ACCT
                  FROM XLA.XLA_AE_HEADERS XH,
                       XLA.XLA_AE_LINES XL,
                       XLA.XLA_TRANSACTION_ENTITIES XTE,
                       XLA.XLA_EVENTS XEA,
                       GL.GL_CODE_COMBINATIONS GCC
                 WHERE     XH.AE_HEADER_ID = XL.AE_HEADER_ID
                       AND XTE.ENTITY_ID = XH.ENTITY_ID
                       AND XL.CODE_COMBINATION_ID = GCC.CODE_COMBINATION_ID
                       AND XEA.EVENT_ID = XH.EVENT_ID
                       AND XH.BALANCE_TYPE_CODE = ‘A’
                       AND XH.JE_CATEGORY_NAME = ‘Receiving’
                       AND XL.ACCOUNTED_DR IS NOT NULL) SLA,
               RCV_TRANSACTIONS RT
         WHERE RT.TRANSACTION_ID = SLA.SOURCE_ID_INT_1(+)
               AND RT.TRANSACTION_TYPE = ‘DELIVER’) B,
       (SELECT AID.DIST_CODE_COMBINATION_ID,
               POD.PO_DISTRIBUTION_ID,
               POD.PO_HEADER_ID,
               POD.PO_LINE_ID,
               POD.LINE_LOCATION_ID,
               GCC.SEGMENT2,
               GL_FLEXFIELDS_PKG.GET_CONCAT_DESCRIPTION (
                  GCC.CHART_OF_ACCOUNTS_ID,
                  GCC.CODE_COMBINATION_ID,
                  ‘.’)
                  ACCT,
               AID.AMOUNT
          FROM AP_INVOICE_DISTRIBUTIONS_ALL AID,
               PO_DISTRIBUTIONS_ALL POD,
               GL_CODE_COMBINATIONS GCC
         WHERE     AID.PO_DISTRIBUTION_ID = POD.PO_DISTRIBUTION_ID
               AND AID.DIST_CODE_COMBINATION_ID = GCC.CODE_COMBINATION_ID
               AND AID.LINE_TYPE_LOOKUP_CODE IN (‘ITEM’, ‘ACCRUAL’)) C
 WHERE     A.PO_HEADER_ID = B.PO_HEADER_ID(+)
       AND A.PO_LINE_ID = B.PO_LINE_ID(+)
       AND A.LINE_LOCATION_ID = B.PO_LINE_LOCATION_ID(+)
       AND A.PO_DISTRIBUTION_ID = B.PO_DISTRIBUTION_ID(+)
       AND A.PO_DISTRIBUTION_ID = C.PO_DISTRIBUTION_ID(+);

I had to provide data to auditors on the
  1. Internal & Purchase Requisitions created by users
  2. Purchase Orders created for the requisitions (inventory and non inventory items)
  3. Receiving transactions with PO and Requisition information
Purchase Requisition details

SELECT prh.segment1 “Req #”, prh.creation_date, prh.created_by, poh.segment1 “PO #”, ppx.full_name “Requestor Name”,prh.description “Req Description”, prh.authorization_status, prh.note_to_authorizer, prh.type_lookup_code, prl.line_num,prl.line_type_id, prl.item_description, prl.unit_meas_lookup_code, prl.unit_price, prl.quantity, prl.quantity_delivered,prl.need_by_date, prl.note_to_agent, prl.currency_code, prl.rate_type, prl.rate_date, prl.quantity_cancelled, prl.cancel_date,prl.cancel_reason
  FROM po_requisition_headers_all prh,
       po_requisition_lines_all prl,
       po_req_distributions_all prd,
       per_people_x ppx,
       po_headers_all poh,
       po_distributions_all pda
 WHERE prh.requisition_header_id = prl.requisition_header_id
   AND ppx.person_id = prh.preparer_id
   AND prh.type_lookup_code = ‘PURCHASE’
   AND prd.requisition_line_id = prl.requisition_line_id
   AND pda.req_distribution_id = prd.distribution_id
   AND pda.po_header_id = poh.po_header_id
   AND TO_CHAR (prh.creation_date, ‘YYYY’) IN (‘2010’, ‘2011’)
Internal Requisition details

SELECT prh.segment1 “Req #”, prh.creation_date, prh.created_by, poh.segment1 “PO #”, ppx.full_name “Requestor Name”,
       prh.description “Req Description”, prh.authorization_status, prh.note_to_authorizer, prl.line_num,
       prl.line_type_id, prl.source_type_code, prl.item_description, prl.unit_meas_lookup_code, prl.unit_price, prl.quantity, prl.quantity_delivered,
       prl.need_by_date, prl.note_to_agent, prl.currency_code, prl.rate_type, prl.rate_date, prl.quantity_cancelled, prl.cancel_date,
       prl.cancel_reason
  FROM po_requisition_headers_all prh,
       po_requisition_lines_all prl,
       po_req_distributions_all prd,
       per_people_x ppx,
       po_headers_all poh,
       po_distributions_all pda
 WHERE prh.requisition_header_id = prl.requisition_header_id
   AND ppx.person_id = prh.preparer_id
   AND prh.type_lookup_code = ‘INTERNAL’
   AND prd.requisition_line_id = prl.requisition_line_id
   AND pda.req_distribution_id (+) = prd.distribution_id
   AND pda.po_header_id = poh.po_header_id (+)
   AND TO_CHAR (prh.creation_date, ‘YYYY’) IN (‘2010’, ‘2011’)
Purchase Order details

SELECT
    ph.SEGMENT1 po_num
  , ph.CREATION_DATE
  , hou.name  “Operating Unit”
  , ppx.full_name “Buyer Name”
  , ph.type_lookup_code “PO Type”
  , plc.displayed_field “PO Status”
  , ph.COMMENTS
  , pl.line_num
  , plt.order_type_lookup_code “Line Type”
  , NULL “Item Code”
  , pl.item_description
  , pl.unit_meas_lookup_code “UOM”
  , pl.base_unit_price
  , pl.unit_price
  , pl.quantity
  , ood.organization_code “Shipment Org Code”
  , ood.organization_name “Shipment Org Name”
  , pv.vendor_name supplier
  , pvs.vendor_site_code
  , (pl.unit_price * pl.quantity) “Line Amount”
  , prh.segment1 req_num
  , prh.type_lookup_code req_method
  , ppx1.full_name “Requisition requestor”
FROM  po_headers_all ph
    , po_lines_all pl
    , po_distributions_all pda
    , po_vendors pv
    , po_vendor_sites_all pvs
    , po_distributions_all pd
    , po_req_distributions_all prd
    , po_requisition_lines_all prl
    , po_requisition_headers_all prh
    , hr_operating_units hou
    , per_people_x ppx
    , po_line_types_b plt
    , org_organization_definitions ood
    , per_people_x ppx1
    , po_lookup_codes plc
WHERE
  1=1
  AND TO_CHAR(ph.creation_date, ‘YYYY’) IN (2010, 2011)
  AND ph.vendor_id = pv.vendor_id
  AND ph.po_header_id = pl.po_header_id
  AND ph.vendor_site_id = pvs.vendor_site_id
  AND ph.po_header_id = pd.po_header_id
  and pl.po_line_id = pd.po_line_id
  AND pd.req_distribution_id = prd.distribution_id (+)
  AND prd.requisition_line_id = prl.requisition_line_id (+)
  AND prl.requisition_header_id = prh.requisition_header_id (+)
 and hou.organization_id = ph.org_id
 and ph.agent_id = ppx.person_id
 and pda.po_header_id = ph.po_header_id
 and pda.po_line_id = pl.po_line_id
 and pl.line_type_id = plt.line_type_id
 and ood.organization_id = pda.destination_organization_id
 and ppx1.person_id (+) = prh.preparer_id
 and plc.lookup_type = ‘DOCUMENT STATE’
 and plc.LOOKUP_CODE = ph.closed_code
 and pl.item_id is null
UNION
— Purchase Orders for inventory items
SELECT
    ph.SEGMENT1 po_num
  , ph.CREATION_DATE
  , hou.name  “Operating Unit”
  , ppx.full_name “Buyer Name”
  , ph.type_lookup_code “PO Type”
  , plc.displayed_field “PO Status”
  , ph.COMMENTS
  , pl.line_num
  , plt.order_type_lookup_code “Line Type”
  , msi.segment1 “Item Code”
  , pl.item_description
  , pl.unit_meas_lookup_code “UOM”
  , pl.base_unit_price
  , pl.unit_price
  , pl.quantity
  , ood.organization_code “Shipment Org Code”
  , ood.organization_name “Shipment Org Name”
  , pv.vendor_name supplier
  , pvs.vendor_site_code
  , (pl.unit_price * pl.quantity) “Line Amount”
  , prh.segment1 req_num
  , prh.type_lookup_code req_method
  , ppx1.full_name “Requisition requestor”
FROM  po_headers_all ph
    , po_lines_all pl
    , po_distributions_all pda
    , po_vendors pv
    , po_vendor_sites_all pvs
    , po_distributions_all pd
    , po_req_distributions_all prd
    , po_requisition_lines_all prl
    , po_requisition_headers_all prh
    , hr_operating_units hou
    , per_people_x ppx
    , mtl_system_items_b msi
    , po_line_types_b plt
    , org_organization_definitions ood
    , per_people_x ppx1
    , po_lookup_codes plc
WHERE
  1=1
  AND TO_CHAR(ph.creation_date, ‘YYYY’) IN (2010, 2011)
  AND ph.vendor_id = pv.vendor_id
  AND ph.po_header_id = pl.po_header_id
  AND ph.vendor_site_id = pvs.vendor_site_id
  AND ph.po_header_id = pd.po_header_id
  and pl.po_line_id = pd.po_line_id
  AND pd.req_distribution_id = prd.distribution_id (+)
  AND prd.requisition_line_id = prl.requisition_line_id (+)
  AND prl.requisition_header_id = prh.requisition_header_id (+)
 and hou.organization_id = ph.org_id
 and ph.agent_id = ppx.person_id
 and pda.po_header_id = ph.po_header_id
 and pda.po_line_id = pl.po_line_id
 and pl.line_type_id = plt.line_type_id
 and ood.organization_id = pda.destination_organization_id
 and ppx1.person_id (+) = prh.preparer_id
 and pda.destination_organization_id = msi.organization_id (+)
 and msi.inventory_item_id = nvl(pl.item_id, msi.inventory_item_id)– OR pl.item_id is null)
 and plc.lookup_type = ‘DOCUMENT STATE’
 and plc.LOOKUP_CODE = ph.closed_code
 and pl.item_id is not null
Receiving transactions with PO and requisition information

SELECT
ph.segment1 po_num,
ood.organization_name,
pol.po_line_id,
pll.quantity,
rsh. receipt_source_code,
rsh. vendor_id,
rsh. vendor_site_id,
rsh. organization_id,
rsh. shipment_num,
rsh. receipt_num,
rsh. ship_to_location_id,
rsh. bill_of_lading,
rsl.shipment_line_id,
rsl.QUANTITY_SHIPPED,
rsl.QUANTITY_RECEIVED ,
rct.transaction_type,
rct.transaction_id,
nvl(rct.source_doc_quantity,0) transaction_qty
from rcv_transactions rct
, rcv_shipment_headers rsh
, rcv_shipment_lines rsl
, po_lines_all pol
, po_line_locations_all pll
, po_headers_all ph
, org_organization_definitions ood
where 1=1
and to_char(rct.creation_date, ‘YYYY’) in (‘2010’, ‘2011’)
and rct.po_header_id = ph.po_header_id
and rct.po_line_location_id = pll.line_location_id
and rct.po_line_id = pol.po_line_id
and rct.shipment_line_id=rsl.shipment_line_id
and rsl.shipment_header_id=rsh.shipment_header_id
and rsh.ship_to_org_id = ood.organization_id
order by rct.transaction_id

Oracle App Using Flash Message in Forms Personalization
Responsibility: Application Developer
Navigation: Application > Messages
Create new message
Name: XX_TEST
Current Text Message: This is a test message for &USER_NAME
Save and close form.
Generate the message
Responsibility: Application Developer
Click on View > Requests in the menu to execute a concurrent program. Select Generate Messages program.

Click on Help > Diagnostics > Custom Code > Personalize
Create a new Personalization
Click on Actions
Sequence 10
Type: Builtin
Description: Retrieve the msg
Builtin Type: Execute a procedure
Argument: FND_MESSAGE.SET_NAME(‘XXCUST’, ‘XX_TEST’)
Sequence 11
Type: Builtin
Description: Set the USER token
Builtin Type: Execute a Procedure
Argument: fnd_message.set_token (‘USERNAME’, fnd_profile.value(‘USERNAME’))
Sequence 12
Type: Builtin
Description: Set the ORG token
Builtin Type: Execute a Procedure
Argument: fnd_message.set_token (‘ORG_ID’, fnd_profile.value(‘ORG_ID’))
Sequence 13
Type: Message
Description: Display the msg
Message Type: Show
Message Text: =FND_MESSAGE.GET