Oracle PO Technical Overview
Oracle PO Technical Overview
Oracle Purchasing allows requisitions, purchase orders, quotations, and receipts etc to be processed and
integrated with modules such as General Ledger, Inventory, Order Management etc. The Oracle Purchasing
design consists of various technical components like interfaces, workflows, profile options, tables etc which
are summarized in this article.
Employees
You must to be setup as an employee in order to create a requisition or a PO. If Oracle HR is installed then
you have to use the form defined in Oracle HRMS to define an employee.
If Oracle HR is not installed then you can use a form under Setup->Personnel->Employees to setup
employees. Main tables are HR_EMPLOYEES, PER_PEOPLE_F
Important Note: The view HR_EMPLOYEES_CURRENT_V gives one record per active employee.
PER_PEOPLE_F/PER_ALL_PEOPLE_F store multiple records per employee with specific start and end dates
Vendors
PO_VENDORS, PO_VENDOR_SITES_ALL and PO_VENDOR_CONTACTS are the main tables for this entity.
Vendors are global i.e. a vendor, once defined, can be used across operating units (OU). Vendor sites are
OU specific.
Most of the PO tables store the vendor_id and vendor_site_id columns. vendor_site_id is unique
(not unique within a vendor_id) in 11i. It used to be unique for a vendor until 11.0.
PO_VENDORS
It stores information about your suppliers. You need one row for each supplier you define. Each row includes
the supplier name as well as purchasing, receiving, payment, accounting, tax, classification, and general
information. Oracle Purchasing uses this information to determine active suppliers.
vendor_id is the unique systemgenerated receipt header number invisible to the user.
segment1 is the systemgenerated or manually assigned number you use to identify the supplier in forms
and reports. Oracle Purchasing generates segment1 using the PO_UNIQUE_IDENTIFIER_CONTROL table
if you choose to let Oracle Purchasing generate supplier numbers for you.
This table is one of three tables that store supplier information. PO_VENDORS corresponds to the Suppliers
window.
PO_VENDOR_SITES_ALL
It stores information about your supplier sites. You need a row for each supplier site you define. Each row
includes the site address, supplier reference, purchasing, payment, bank, and general information. Oracle
Purchasing uses this information to store supplier address information.This table is one of three tables that
store supplier information. PO_VENDOR_SITES_ALL corresponds to the Sites region of the Suppliers
window.
PO_VENDOR_CONTACTS
It stores information about contacts for a supplier site. You need one row for each supplier contact you
define. Each row includes the contact name and site. This table is one of three tables that store supplier
information. PO_VENDOR_CONTACTS corresponds to the Contacts region of the Supplier Sites window.
Requisitions
This entity is the starting point of data flow in the PO module. Requisitions can be created by various means
Enter Requisition form, Requisition Interface tables or using Self Service Purchasing.
All requisitions need to be approved before being considered for future processing. An unapproved
requisition has a value of Incomplete for the column authorization_status in the table
PO_REQUISITION_HEADERS. After the requisition is completed it should be submitted for Approval.
Approval is a separate piece of code that is reused in both Reqs as well as PO approval. It is a combination
of Workflow, PL/SQL and Pro*C code.
PO_REQUISITION_HEADERS_ALL
It stores information about requisition headers. You need one row for each requisition header you create.
Each row contains the requisition number, preparer, status, and description.
requisition_header_id is the unique systemgenerated requisition number and is invisible to the user.
segment1 is the number you use to identify the requisition in forms and reports. Oracle Purchasing
generates segment1 using the PO_UNIQUE_IDENTIFIER_CONTROL table if you choose to let Oracle
Purchasing generate requisition numbers for you.
PO_REQUISITION_LINES_ALL
It stores information about requisition lines. You need one row for each requisition line you create. Each row
contains the line number, item number, item category, item description, needby date, deliverto location,
item quantities, units, prices, requestor, notes, and suggested supplier information for the requisition line.
line_location_id identifies the purchase order shipment line on which you placed the requisition.
line_location_id is null if you have not placed the requisition line on a purchase order.
parent_req_line_id contains the requisition_line_id from the original requisition line if you
exploded or multi-sourced this requisition line.
PO_REQ_DISTRIBUTIONS_ALL
It stores information about the accounting distributions associated with each requisition line. Each requisition
line must have at least one accounting distribution. You need one row for each requisition distribution you
create. Each row includes the Accounting Flexfield ID and requisition line quantity.
PO_REQ_DISTRIBUTIONS_ALL is one of three tables storing your requisition information. This table
corresponds to the requisition Distributions window, accessible through the Requisitions window
Purchase Order
This is the pivotal entity of Oracle Purchasing. All other entities function for or because of this entity. There
are four main tables for this entity:
PO_HEADERS_ALL
There are six types of documents that use PO_HEADERS_ALL:
RFQs
Quotations
Standard purchase orders
Planned purchase orders
Blanket purchase orders
Contracts
Each row contains buyer information, supplier information, brief notes, foreign currency information, terms
and conditions information, and the status of the document. Oracle Purchasing uses this information to
record information that is related to a complete document. po_header_id is the unique systemgenerated
primary key and is invisible to the user. segment1 is the systemassigned number you use to identify the
document in forms and reports.
You can uniquely identify a row in PO_HEADERS_ALL using segment1 and type_lookup_code or using
po_header_id.
If approved_flag is Y, the purchase order is approved. If your document type is a Blanket purchase
order, Contract purchase order, RFQ, or Quotation, Oracle Purchasing uses start_date and end_date to
store the valid date range for the document. Oracle Purchasing only uses blanket_total_amount for
Blanket purchase order.
PO_LINES_ALL
It is a detail of headers table. Each row includes the line number, the item number and category, unit, price,
tax information, matching information, and quantity ordered for the line. Oracle Purchasing uses this
information to record and update item and price information for Purchase orders, Quotations, and RFQs.
po_line_id is the unique systemgenerated line number invisible to the user. line_num is the number of
the line on the purchase order.
Oracle Purchasing uses contract_num to reference a "Contract purchase order" from a standard purchase
order line. Oracle Purchasing uses allow_price_override_flag, committed_amount,
quantity_committed, min_release_amount only for "Blanket" and "Planned" purchase order lines.
The quantity field stores the total quantity of all Purchase order shipment lines (found in
PO_LINE_LOCATIONS_ALL).
PO_LINE_LOCATIONS_ALL
Also known as Shipments is a detail of lines. PO_LINE_LOCATIONS_ALL contains information about
Purchase order shipment schedules and Blanket agreement price breaks. You need one row for each
schedule or price break you attach to a document line.
Each row includes the location, quantity, and dates for each shipment schedule. Oracle Purchasing uses this
information to record delivery schedule information for purchase orders, and price break information for
blanket purchase orders, quotations and RFQs.
po_release_id applies only to "Blanket purchase order" release shipments. po_release_id identifies
the release on which you placed this shipment.
source_shipment_id applies only to "Planned purchase order" release shipments. It identifies the
planned purchase order shipment you chose to release from.
price_override always equals the Purchase order line price for standard purchase order shipments.
For "Blanket" and "Planned" purchase orders, price_override depends on the values of the
allow_price_override_flag and not_to_exceed_price in the corresponding row in the table
PO_LINES_ALL
If allow_price_override_flag is Y, then price_override can take any value that is smaller than
not_to_exceed_price in PO_LINES_ALL table.
The quantity field corresponds to the total quantity ordered on all purchase order distribution lines (found
in PO_DISTRIBUTIONS_ALL table).
PO_DISTRIBUTIONS_ALL
It contains accounting distribution information for a purchase order shipment line. You need one row for each
distribution line you attach to a purchase order shipment.
Each row includes the destination type, requestor ID, quantity ordered and deliverto location for the
distribution. Oracle Purchasing uses this information to record accounting and requisition information for
purchase orders and releases. PO_DISTRIBUTIONS_ALL is one of five tables storing purchase order and
release information.
2) If you use a foreign currency on your purchase order, Oracle Purchasing stores currency conversion
information in rate and rate_date.
4) If you do not autocreate the purchase order from online requisitions, req_line_reference_num and
req_header_reference_num contain the requisition number and requisition line number of the
corresponding paper requisition. These two columns are not foreign keys to another table.
5) If the distribution corresponds to a blanket purchase order release, po_release_id identifies this
release.
6) If source_distribution_id has a value, the distribution is part of a planned purchase order release.
Reqs can be converted to Purchase Orders using either the Autocreate form or Create PO workflow. If
certain conditions are satisfied then multiple req lines are converted to a single PO line or a single PO
shipment.
Receipt
There are two receipt source types, Supplier (PO based) and Internal Order (Internal Requisitions and Inter-
org transfers) that you need to use when receiving against different source document types. You use a
receipt source type of Supplier when receiving items that you ordered from an external supplier using a
purchase order.
When you receive items that are part of an interorganization transfer, or when receiving items that you
request from your inventory using an internal requisition, the receipt type would be Internal Order. The
Internal Order receipt source type populates the organization_id column.
RCV_SHIPMENT_HEADERS
It stores common information about the source of your receipts or expected receipts. You group your receipts
by the source type and the source of the receipt. Oracle Purchasing does not allow you to group receipts
from different sources under one receipt header.
Oracle Purchasing creates a receipt header when you are entering your receipts or when you perform inter
organization transfers using Oracle Inventory. When Oracle Inventory creates a receipt header for an
intransit shipment, the receipt number is not populated until you receive the shipment.
RCV_SHIPMENT_LINES
It stores information about items that have been shipped and/or received from a specific receipt source. It
also stores information about the default destination for intransit shipments.
RCV_TRANSACTIONS
It stores historical information about receiving transactions that you have performed. When you enter a
receiving transaction and the receiving transaction processor processes your transaction, the transaction is
recorded in this table.
Once a row has been inserted into this table, it will never be updated.
When you correct a transaction, the net transaction quantity is maintained in RCV_SUPPLY. The original
transaction quantity does not get updated. You can only delete rows from this table using the Purge feature
of Oracle Purchasing.
Main Interfaces
You could import requisitions, Purchase Orders and Receipts using the open interfaces for the respective
entities. The Manufacturing APIs and Open Interfaces manual is a comprehensive guide to these interfaces.
The Purchasing Documents Open Interface uses Application Program Interfaces (APIs) to process the data
in the Oracle Applications interface tables to ensure that it is valid before importing it into Oracle Purchasing.
After validating the price/sales catalog information or RFQ responses, the Purchasing Documents Open
Interface program converts the information, including price break information, in the interface tables into
blanket purchase agreements, or catalog quotations in Purchasing. For standard purchase orders, the
Purchasing Documents Open Interface also validates the header, line, shipment, and distribution information
before importing the purchase orders into Purchasing.
You can choose whether to import the data as standard purchase orders, blanket purchase agreements, or
catalog quotations. You can also choose to update your item master and, for blanket purchase agreements
and quotations, apply sourcing rules and release generation methods to the imported item. Blanket purchase
agreements and quotations can also be replaced with the latest price/sales catalog information when your
supplier sends a replacement catalog, or updated when the supplier sends an updated catalog. Standard
purchase orders can only be imported as new documents.
One way to import the blanket purchase agreements and catalog quotations is through Electronic Data
Interchange (EDI). The Purchasing Documents Open Interface supports the EDI transmissions of the
price/sales catalogs (ANSI X12 832 or EDIFACT PRICAT) and responses to RFQs (ANSI X12 843 or
EDIFACT QUOTES). Standard purchase orders cannot be transmitted through EDI. You can import these
into the interface tables using a program that you write.
Receipt data that is entered through the Receipts window in Purchasing is derived, defaulted, and validated
by the Receipts window. Most receipt data that is imported through the Receiving Open Interface is derived,
defaulted, and validated by the receiving transaction pre-processor.
The pre-processor is a program that the Receiving Transaction Processor initiates for data entered in the
Receiving Open Interface. The pre-processor simulates, in Batch mode, what the receiving windows do
when you save a transaction.
After performing header- and line-level validation, the pre-processor checks the profile option RCV: Fail All
ASN Lines if One Line Fails.If the profile option is set to Yes and any line failed validation, the pre-
processor fails the entire transaction. If the profile option is set to No (and test_flag is not Y), the
Receiving Transaction Processor takes over and, for all successfully processed records, performs the same
steps that occur when you normally save receipt information in Purchasing:
Populates the RCV_SHIPMENT_HEADERS table in Purchasing with the receipt header information.
Populates the RCV_SHIPMENT_LINES table in Purchasing for each receipt header entry in the
RCV_SHIPMENT_HEADERS table in Purchasing.
Populates the RCV_TRANSACTIONS table in Purchasing for each row in the RCV_SHIPMENT_HEADERS and
RCV_SHIPMENT_LINES table if the column auto_transact_code in the
RCV_TRANSACTIONS_INTERFACE table contains a value of RECEIVE or DELIVER.
Updates supply for accepted line items in the tables MTL_SUPPLY and RCV_SUPPLY.
Calls the Oracle Inventory module for processing DELIVER transactions.
Calls the Oracle General Ledger module for processing financial transactions, such as receipt-based
accruals.
Updates the corresponding purchase orders with the final received and delivered quantities.
Major Processes
A few important processes are described below. There are several other equally important processes in
Oracle Purchasing. The users guide and Oracle Manufacturing APIs and Open Interfaces manual is a good
source for information on them.
Requistion Import
Overview
This interface lets you integrate Oracle Purchasing quickly with new or existing applications such as material
requirements planning, inventory management, and production control systems. Purchasing automatically
validates your data and imports your requisitions. You can import requisitions as often as you want. Then,
you can review these requisitions, approve or reserve funds for them if necessary, and place them on
purchase orders or internal sales orders.
Flow
You must write the program that inserts a single row into the PO_REQUISITIONS_INTERFACE_ALL and/or
the PO_REQ_DIST_INTERFACE_ALL table for each requisition line that you want to import. Then you use
the Submit Request window to launch the Requisition Import program for any set of rows.
You identify the set of rows you want to import by setting the interface_source_code and batch_id
columns appropriately in the PO_REQUISITIONS_INTERFACE_ALL table. You then pass these values as
parameters to the Requisition Import program. If you do not specify any values for these parameters, the
program imports all therequisition lines in the PO_REQUISITIONS_INTERFACE_ALL table. You also specify
the requisition grouping and numbering criteria as parameters to the Requisition Import program.
Each run of the Requisition Import program picks up distribution information from either the
PO_REQUISITIONS_INTERFACE_ALL or the PO_REQ_DIST_INTERFACE_ALL table. The
PO_REQ_DIST_INTERFACE_ALL table was used in Release 11, for Self-Service Purchasing (known then as
Web Requisitions). In Release 11i, you should use the PO_REQ_DIST_INTERFACE_ALL table to create
multiple distributions only for requisitions created in non-Oracle systems that use multiple distributions. As
long as the Multiple Distributions field in the Requisition Import program is No (or blank), Requisition Import
looks for distribution information in the PO_REQUISITIONS_INTERFACE_ALL table.
The Requisition Import program operates in three phases. In the first phase, the program validates your data
and derives or defaults additional information. The program generates an error message for every validation
that fails and creates a row in the PO_INTERFACE_ERRORS table with detailed information about each error.
In the second phase, the program groups and numbers the validated requisition lines according to the
following criteria. If you specify a value in the req_number_segment1 column of the
PO_REQUISITIONS_INTERFACE_ALL table, all lines with the same value for this column are grouped
together under a requisition header. If you provide a value in the group_code column, all lines with the
same value in this column are grouped together under a requisition header.
If you do not provide values in either of these columns, the Requisition Import program uses the Group By
parameter to group lines together. If you do not provide a value for this parameter, the program uses the
default Group By that you set up to group requisition lines. You can group requisition lines in one of the
following ways that the Requisition Import program supports by:
BUYER
CATEGORY
LOCATION
VENDOR
ITEM
ALL (all requisition lines grouped under one header)
In the third phase, the program deletes all the successfully processed rows in the interface tables, and
creates a report which lists the number of interface records that were successfully imported and the number
that were not imported. This report can be viewed by choosing View Output for the Requisition Import
concurrent Request ID in the Requests window. You can launch the Requisition Import Exceptions Report
to view the rows that were not imported by the Requisition Import program along with the failure reason(s) for
each row.
Overview
Purchasing integrates with Oracle Workflow technology to create standard purchase orders or blanket
releases automatically from approved requisition lines. The workflow for creating purchasing documents
automatically is called PO Create Documents.
In the Workflow Builder, PO Create Documents consists of several processes. Each of these processes is
viewable in the Workflow Builder as a diagram whose objects and properties you can modify. Each workflow
process consists of individual functions.
For each document that is created successfully by the PO Create Documents workflow, the PO Approval
workflow is called to approve the document if you have allowed automatic approval.
Flow
The PO Create Documents workflow is initiated at the end of the requisition approval workflow for approved
requisition lines. The workflow begins automatic document creation if youve kept the item attribute Is
Automatic Creation Allowed? set to Y for Yes, if source documents are associated with the requisition lines,
and you have properly set up sourcing rules. If the source document associated with the requisition line is a
quotation, a standard purchase order is created. If the source document is a blanket purchase agreement, a
release is created.
PO Approval Workflow
Overview
Whenever you submit a purchase order or release for approval or take an action in the Notifications
Summary window, Purchasing uses Oracle Workflow technology in the background to handle the approval
process. Workflow uses the approval controls and hierarchies you define according to the setup steps in the
section to route documents for approval. You can use the Workflow Builder interface to modify your approval
process.
The purchase order approval workflow consists of processes, which are viewable in the Workflow Builder as
a diagram, some of whose objects and properties you can modify. Each workflow process, in turn, consists of
individual function activities.
Flow
The purchase order approval process is associated with an item type called PO Approval. This item type
identifies all purchase order and release approval workflow processes available.
Refer to the Oracle Purchasing Users guide for a comprehensive explanation of the flow.
Other important tables in Oracle Purchasing
PO_SYSTEM_PARAMETERS_ALL
It stores default, control, and option information you provide to customize Oracle Purchasing to your
companys needs. PO_SYSTEM_PARAMETERS_ALL corresponds to the Purchasing Options window. This
table has no primary key. The table should never have more than one row.
PO_UNIQUE_IDENTIFIER_CONT_ALL
It stores information about the current, highest, systemgenerated numbers for the Oracle Purchasing tables
that require special sequencing. You need one row for each sequentially systemgenerated number for each
organization. The table includes rows for each of the following: purchase orders, requisitions, receipts,
suppliers, quotations, and requests for quotations (RFQs).
For each organization, there are four rows for each of the following entities: PO_HEADERS_ALL,
PO_REQUISITION_HEADERS_ALL, PO_HEADERS_RFQ and PO_HEADERS_QUOTE. There are two rows
corresponding to the entities PO_VENDORS and RCV_SHIPMENT_HEADERS. The information for the quotation
and RFQ subentities is associated with the PO_HEADERS_ALL table entity. table_name values for
quotations and RFQs are PO_HEADERS_QUOTE and PO_HEADERS_RFQ respectively.
PO_LINE_TYPES_B
It contains information about the line types you use in your business. You need each row for each line type
you use. Oracle Purchasing uses this information to provide default information when you create a document
line using a line type. Oracle Purchasing also uses this information to control how you enter information on
your document lines according to the line type you choose. order_type_lookup_code is AMOUNT for
an amountbased line type or QUANTITY for a quantitybased line type.
PO_DOCUMENT_TYPES_ALL_B
It contains information about default, control, and option information you provide to customize Oracle
Purchasing document management for your companys needs. It corresponds to the Document Types
window.
PO_ACTION_HISTORY
It contains information about the approval and control history of your purchasing documents. There is one
record in this table for each approval or control action an employee takes on a purchase order, purchase
agreement, release, or requisition. Each row includes references to the document itself, the employee who
acted on the document, the date of the action, the type of action taken on the document, and a note each
employee can leave when taking an action on the document. Oracle Purchasing uses this information to
display history information about documents and to forward documents in the approval process to the
appropriate employee.
Important Profile Options in Oracle Purchasing
(The profile option RCV: Processing Mode must also be set to Immediate or Batch for the Yes option to
work.) Yes also generates a database trace file; if you need help with an error that occurs while the
Receiving Transaction Processor runs, Oracle Support Services may ask you for this trace file. This profile
option should be set to Yes only while debugging the Receiving Open Interface or for generating a trace file.
The Receiving Open Interface validates receipt transactions from other systems and uses the Receiving
Transaction Processor to import the validated data into Purchasing.
Batch The transaction goes to the interface table, where it will be picked up the next time the
Receiving Transaction Processor runs.
Immediate The transaction goes to the interface table, and the Receiving Transaction Processor is called
for the group of transactions that you entered since you last saved your work.
Online The Receiving Transaction Processor is called directly.
RCV: Allow routing override
Yes or No indicates whether the destination type assigned during requisition or purchase order entry can be
overridden at receipt time.
Employee Setup
Employee should be assigned the position and job. This is useful in PO approval workflow.
The view used is PER_PEOPLE_V, PER_PEOPLE_ADDRESS_V, PER_PEOPLE_ASSIGMENT_V to store the
employee information.
Buyer Setup
Once the user is set as buyer then he/she can create/approve/print the purchase orders. Whether the users
can create/approve/print the purchase orders is decided by how the document types are setup.
The table which stores the buyer is PO_AGENTS and the view used for the buyer name and other details is
PO_AGENTS_V.
Document Types
Document types there are certain attributes needs to be set. They are explained below-:
1) Owner can approve: If we check this attribute then user can approve the documents he has created. This
field is not updatable when the document type is RFQ or Requisition.
2) Approver can modify: If we check this attribute then approver the contents of the document. This is not
applicable to RFQ and requisitions.
3) Can change forward to: This indicates test that the user can change the name of the approver in the
approval window.
4) Can change forward from: This indicates that the user can change the name of the document creator. This
is available only for document type requisition.
5) Can change approval hierarchy: Preparers and approvers can change the approval hierarchy in the
approval document window.
6) Disable: Check it to disable the Document type.
7) Access Level: How the users can access the document type.
a. Full: Full access to the user
b. Modify: Can modify the document type
c. View Only: Can only view the document type
8) Archive On: When the archival of document type will take place.
a. On approval: On approval of the document
b. On Printing: On printing of the document.
9) Approval workflow: Which workflow the purchasing will use to approve the document type in question.
One can define a custom workflow and also mention the name of the workflow.
10) Default Hierarchy: What hierarchy the approval process will follow is to be mentioned here.
Table Used:
The table where the information is stored is PO_DOCUMENT_TYPES_V
Supplier Setup
The table where the information is stored is PO_VENDORS
Another important table associated with this screen is PO_VENDORS_SITES_ALL. This stores the important
information of vendor sites.
The second type of information stored is line level information and it is stored in the table PO_LINES_ALL
Thus to summarize the information for Standard, Planned is stored in the following tables.
1) PO_HEADERS_ALL
2) PO_LINES_ALL
3) PO_LINE_LOCATIONS_ALL
4) PO_DISTRIBUTIONS_ALL
Once this is set then one can get rows in from all multi org views.Table below illustrates the base tables and
there multi org views.