Professional Documents
Culture Documents
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 1
Oracle Purchasing Integration with
Oracle Advanced Pricing – Release
11.5.10
EXECUTIVE SUMMARY
The purpose of this document is to highlight the ways in which enterprises can
leverage Oracle Advanced Pricing to price requisitions and purchase orders.
INTRODUCTION
Historically, contractual pricing for items was maintained in the following entities:
• Blanket agreement lines
• Blanket agreement price breaks
• Contract purchase agreement with pricing from the item master or
iProcurement catalog
While these static pricing capabilities were sufficient for the majority of business
processes, some purchasing scenarios required more complex pricing models. To
handle these scenarios, Oracle Purchasing introduced Custom Pricing Hooks that
customers could leverage to incorporate their own business specific pricing rules.
These hooks allowed customers to override any price calculated by the pricing
terms on the agreement. For more information on these pricing hooks, refer to
Metalink Note 360121.1 - Custom Hooks in Oracle Purchasing.
In release 11.5.10, Oracle Purchasing built integration with Oracle Advanced
Pricing to allow customers to model their complex pricing scenarios in the
application without having to write custom code. This document explains how the
integration works and provides examples of how various types of business
scenarios can be satisfied through the use of Oracle Purchasing with oracle
Advanced Pricing.
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 2
Examples of pricing scenarios that can be modeled in Oracle Advanced Pricing
include:
• Capturing the purchase price for a specific item.
• Supporting a 10% promotional discount on items offered by one of your
suppliers for a given date range.
• Pricing items based on user-defined attributes, such as the width or
thickness of an item.
The figure below illustrates the interaction between Oracle Purchasing and Oracle
Advanced Pricing:
Pricing
Contract
Transactions
Agreement
Price List
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 3
General Setup
The following setup steps apply to all of the business cases in this document.
The following profile options should be set accordingly in order to integrate Oracle
Purchasing with Oracle Advanced Pricing:
a. QP: Pricing Transaction Entity = Procurement (profile option
can be set at site, application, and user levels)
b. QP: Source System Code = Oracle Purchasing (profile option can
be set at site and responsibility levels)
c. QP: Item Validation Org = Inventory Organization specified in
Financial Options (profile option can be set at site and
responsibility levels)
Scenario
Office Solutions is your company’s preferred vendor for general office supplies.
You have several contract purchase agreements in place with Office Solutions to
cover the various types of products you purchase from them. The prices for items
in each of these categories are captured in price lists in Advanced Pricing.
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 4
2. Enter a Name for the price list
Note: The price list Name should be unique across PTEs (Pricing
Transaction Entities), otherwise an error occurs. For example, if a price list
named "Corporate" is created in the Order Management PTE, an error
message displays if you create a "Corporate" price list in the Purchasing
PTE.
3. To activate the price list, select the Active box.
4. Enter a Description of the price list
5. Select a price list Currency.
6. If the profile, QP: Multi-Currency Installed is set to Yes, select the Multi-
Currency Conversion List.
Note: Multi-currency enabled price lists are set up in a base currency and
associated with a currency conversion list containing the base currency and
other currencies with conversion criteria. Refer to the Oracle Advanced
Pricing User’s Guide for more information on creating and using Multi-
currency conversion lists.
7. Enter a Round To value that is applied to the price list. A positive number
indicates the number of places to the left of the decimal point. A negative
number indicates number of places to the right of the decimal point. The
default is -2. The pricing engine rounds the base price and all discount
amounts before using them in calculations.
The value returned depends on the value that was set for the profile
option QP: Unit Price Precision Type:
• Standard: The rounding factor defaults to the currency's precision
value. You can override the rounding factor to any value greater
than or equal to the currency's precision value.
• Extended: The rounding factor defaults to the currency's
extended precision value. You can override the rounding factor to
any value greater than or equal to the currency's extended
precision value.
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 5
2. Select Item from the Product Context field.
3. Select a Product Attribute for the Item such as Item Number, Item
Category, or All Items. In this example, we will select Item Category.
4. Enter a Product Value for the selected product attribute. In our example,
the item category we want to price is OFFICE.PRINTERS.
5. Select the UOM of the item.
6. Select Price List Line as the Line Type.
7. Choose Unit Price as the Application Method and enter a Value that
corresponds to the base list price of the item.
8. Enter the Start Date and End Dates for the price list line. The dates
should be within the effective start and end dates of the price list. The
Need-By Date on the req/PO line or the system date must be within the
start/end dates of the price list line.
9. Repeat these steps for each printer that should be captured on this price
list.
Enter Pricing Attributes for Price List Line in Oracle Advanced Pricing
1. Click the Pricing Attributes button in the List Lines tab to display the
Pricing Attributes window.
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 6
2. Select a Pricing Context and Attribute for the selected product. For our
example, we’ll select PO Pricing Attributes as the Pricing Context and PO
Vendor Item Number as the Pricing Attribute.
3. Select = as the Operator value.
4. Enter the supplier part number.
5. Since pricing attributes are specific to a single price list line, repeat these
steps for each price list line.
Define Qualifiers
1. Select the Qualifiers tab in the Advanced Pricing - Price Lists window
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 7
Using Advanced Pricing to Price Requisitions and Purchase Orders in Oracle
iProcurement and Oracle Purchasing
In order to leverage the Advanced Pricing setup in Oracle Purchasing and Oracle
iProcurement, the requisition/purchase order line must reference a contract
purchase agreement. Once this association is made, Purchasing sends information
from the req/PO line to Advanced Pricing in order to fetch the correct price.
Using the previous example, Advanced Pricing would use the source document
number, supplier, supplier site, item category, system date or need-by date, and the
supplier part number to find an applicable price.
Scenario
Building on the previous example, let’s assume that Office Solutions is offering a
15% discount on all printers that are purchased in the month of June. We can
model this discount as a modifier in Advanced Pricing.
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 8
2. In the Main tab, select a modifier Type of either Discount List or
Surcharge.
3. Enter a modifier list Number.
4. Select Active to activate the modifier.
5. Select the Automatic box – at this time, Oracle Purchasing does not
support manual modifiers.
6. Enter a Name to identify the modifier.
Note: The modifier Name should be unique across all PTEs (Pricing
Transaction Entities) otherwise an error occurs. For example, if a modifier
named "Corporate" is created in the Order Management PTE, an error
message displays if you create a "Corporate" modifier in the Purchasing
PTE.
7. A Global box displays if the Pricing Security Control Profile is set to ON.
If the box is selected, the modifier list can be used by all operating units
for pricing transactions. If cleared, the modifier’s use is restricted to the
operating unit of the user creating the modifier list.
8. Choose one of the following:
Select a Currency. If a currency is selected such as US dollars (USD), the
requisition and/or purchase order must match the modifier currency to
determine pricing for the order. The modifier can then be used with a
matching base currency or "to currency" (for a multi-currency price list).
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 9
Setup Modifier Line
1. Select the Modifiers Summary tab in the Advanced Pricing – Define
Modifier window.
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 10
2. Select any of the available Application Methods. For this example, we’ll
select Percent to indicate a percentage discount.
3. Enter the Value of the Application Method. In our example, the value is
15.
When Oracle Purchasing passes attributes to Advanced Pricing during the pricing
call, the pricing engine will find both a price list and a modifier list that match the
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 11
parameters sent by Purchasing. As a result, the pricing engine will fetch the price
from the price list, $199.99, and apply a 15% discount to this price, resulting in a
net price of $169.99.
Scenario
In this example, the purchase price for an item is based on its length, width,
thickness, and rating. In order to model this in Oracle Advanced Pricing, we will
first need to create descriptive flexfields to capture these attributes on the purchase
order. Then, we’ll use Oracle Advanced Pricing to create pricing attributes for these
flexfields and a formula to calculate the price. Finally, we’ll attach the formula to a
price list line in order to generate the final purchase price for the item.
Spec File
CREATE OR REPLACE PACKAGE widget_pricing AS
END widget_pricing;
commit;
exit;
Body File
CREATE OR REPLACE PACKAGE BODY widget_pricing AS
begin
select attribute1
into l_length
from po_lines_all
where po_line_id = p_line_id;
return l_length;
end;
begin
select attribute2
into l_width
from po_lines_all
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 12
where po_line_id = p_line_id;
return l_width;
end;
begin
select attribute3
into l_thickness
from po_lines_all
where po_line_id = p_line_id;
return l_thickness;
end;
begin
select attribute4
into l_rating
from po_lines_all
where po_line_id = p_line_id;
return l_rating;
end;
END widget_pricing;
/
show err;
commit;
exit;
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 13
2. Select Pricing Context as the Context Type.
3. Enter a Code which is a short name for the context. Once created, it
cannot be updated. In this example, the code is WIDGET.
4. Enter a Name and Description for the context. The Name you create will
be available from the pricing context fields in the Price List and Modifier
windows.
5. Select the Enabled box to make this context available.
6. In the Attributes region, enter the Code which is a short name for the
attribute. This is an internal name that is unique for a given attribute. Once
created, it cannot be updated.
7. Enter a display Name and optionally a Description for the attribute.
8. Enter a numeric Precedence value which decides the processing sequence
of the pricing attributes. The precedence is restricted to a maximum of 3
digits (any number between 1 and 999).
9. Select Purchasing as the Application Name that created this attribute.
10. Select a Column Mapped value to which an attribute will be mapped –
such as Pricing_Attribute1. The list displays the names of the unused
columns only.
11. Select a value from the Value Set field to define a domain of valid values
for an attribute. The Datatype value indicates if the Value Set is numeric
(Number) or alphabetic (Char). In this example, the value set for length,
width, and thickness is QP: Number while the value set for Rating is QP:
Text.
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 14
2. Select Procurement as the Pricing Transaction entity.
3. Select Pricing Context for the Context Type
4. In the Context region, find and select the pricing context that was created
in the previous section.
5. Click the Link Attributes button to display the Link Attributes window.
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 15
12. In the Request Types region, select Purchasing as the Application name
that created the mapping rule.
13. Since the attribute mapping level for our attributes was set to Line, we
need to complete the information in the Line Level region.
14. Select PL/SQL as the User Source Type
15. In the User Value String, enter the following text based on the packages
we created and applied to the database at the beginning of this example
and based on the attribute for which we are defining the mapping:
widget_pricing.get_length(po_advanced_price_pvt.g_line.order_line_id)
16. Repeat steps 11-15 for the other attributes, replacing ‘get_length’ with
‘get_width’, ‘get_thickness’, and ‘get_rating’, accordingly.
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 16
2. Enter a Name and Description for the formula
3. Enter a Formula expression and the formula lines. In our example, the
price of the widget is the base, or list, price plus individual adjustments
based on the length, width, and thickness of the widget. The constant is
included in case no values are populated for the length, width, or
thickness.
4. For each of the factor lists, select the Factors button to create the factor
list.
5. Once all the factor lists have been created, select Build Formula Package
from the Tools menu to generate the formula package. A Dialog box
displays a message if the formula package generation was successful.
Alternately, you can also run the Build Formula Package concurrent
program.
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 17
6. For the Base Pricing Attribute Context, select the pricing context Pricing
Widgets that was created previously.
7. The Base Pricing Attribute will be Thickness, Length, or Width, depending
on which factor list you’re creating.
8. Enter the Operator, Value From, Value To, and Adjustment Factor.
9. In the Associate Pricing Attributes region, select Pricing Widgets and
Rating as the Associated Pricing Attribute Context and Associated Pricing
Attribute, respectively. This will link the Associated Pricing Attribute with
the Base Pricing Attribute in an AND condition. Essentially, the first line
of this factor list says: If the thickness is between 0 and 0.5, AND the
Rating is A, adjust the price by 0.9.
10. The second factor list line says: If the thickness is between 0 and 0.5,
AND the Rating is B, adjust the price by 0.7. This is shown in the
following screenshot:
11. Additional factor list lines can be added for thicknesses ranging from 0.5
to 1.0, 1.0 to 1.5, and so on. For each range, the adjustment can vary based
on the Rating of the widget.
12. Create similar factor lists for Length and Width as shown in the following
screenshots. As with the Thickness factor list, assume there are factor list
lines covering a wide array of ranges and adjustments based on the Rating.
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 18
Associate Formula to a Price List in Oracle Advanced Pricing
1. Now that our attributes, formula and factor lists have been created, we
need to associate the formula with a price list.
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 19
2. Create a price list and price list line for the widget (Refer to Business Case
1 for instructions on which fields to populate)
3. In the Dynamic Formula field for the price list line, select the Widgets
formula that was created above.
4. Notice that the list price for the widget is $25.00
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 20
5. Save the PO. This is required in order to generate a line ID. When we
performed the attribute mapping in Oracle Advanced Pricing, we specified
that we would use the line ID in order to get the values of the flexfields.
6. Navigate to the Reference Documents tab and associate the PO line with
the Contract Purchase Agreement for Puget Production Maintenance.
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 21
tables, or use the existing price adjustment tables that are used by Oracle Order
Management/Oracle Order Capture:
The following code snippet demonstrates how the audit hook could be used to
store the adjustment information into a user-defined table called
CUST_PRICE_ADJUSTMENTS. The structure of this table is based on
OE_PRICE_ADJUSTMENTS.
PROCEDURE PO_CUSTOM_PRICE_PUB.audit_qp_price_adjustment(p_api_version
IN NUMBER,
p_order_type IN
VARCHAR2,
p_order_line_id IN NUMBER,
p_line_index IN NUMBER,
x_return_status OUT NOCOPY
VARCHAR2,
x_msg_count OUT NOCOPY
NUMBER,
x_msg_data OUT NOCOPY
VARCHAR2)
IS
l_api_version NUMBER := 1.0;
l_api_name VARCHAR2(60) := 'AUDIT_QP_PRICE_ADJUSTMENT';
l_log_head CONSTANT varchar2(100) := g_log_head || l_api_name;
l_progress VARCHAR2(3) := '000';
BEGIN
IF g_debug_stmt THEN
PO_DEBUG.debug_begin(l_log_head);
PO_DEBUG.debug_var(l_log_head,l_progress,'p_order_type',
p_order_type);
PO_DEBUG.debug_var(l_log_head,l_progress,'p_order_line_id',p_or
der_line_id);
PO_DEBUG.debug_var(l_log_head,l_progress,'p_line_index',p_line_
index);
END IF;
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 22
, LINE_ID
, LIST_HEADER_ID
, LIST_LINE_ID
, LIST_LINE_TYPE_CODE
, APPLIED_FLAG
, operand
, Arithmetic_operator
, ADJUSTED_AMOUNT
)
( SELECT
ldets.price_adjustment_id
, lines.header_id
, lines.line_id
, ldets.LIST_HEADER_ID
, ldets.LIST_LINE_ID
, ldets.LIST_LINE_TYPE_CODE
, ldets.APPLIED_FLAG
, ldets.order_qty_operand
, ldets.operand_calculation_code
, ldets.order_qty_adj_amt
FROM
QP_LDETS_v ldets
, QP_PREQ_LINES_TMP lines
WHERE
AND ldets.line_index= lines.line_index
);
x_return_status := FND_API.G_RET_STS_SUCCESS;
x_msg_count := 0;
x_msg_data := NULL;
IF g_debug_stmt THEN
PO_DEBUG.debug_end(l_log_head);
END IF;
END audit_qp_price_adjustment;
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 23
Attribute
Column Mapped in Context Context Type
QP
Location
PO Ship To
ship_to_org_id PO_BUYER QUALIFIER
Org
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 24
FEATURE NAME SUPPORTED NOT
SUPPORTED
Price Breaks (point and range for unit/block Pricing) X
Pricing Attributes X
UOM Conversion X
Static Formulas X
Dynamic Formulas X
Load Price Lists in Batch X
Price List Maintenance – Copy Existing Price List to X
New Price List
Price List Maintenance – Add Items in Bulk to an X
Existing Price List
Price List Maintenance – Mass Adjust Prices for a X
Price List
Price List Details Report X
Archive/Purge X
FORMULAS/FORMULA TYPES
Function X
List Price X
Factor List X
Modifier Value X
Numeric Constant X
Price List Line X
Pricing Attribute X
Formula Details Report X
MODIFIERS
MODIFIER LINE TYPES
Discounts X
Surcharges X
Price Breaks (Apply a variable X
discount/surcharge price adjustment to a pricing
request based on meeting the condition of a
break type. Supports both point and range type
breaks.)
Coupon Issue X
Freight and Special Charges X
Item Upgrade (Buy x, get x’ instead) X
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 25
FEATURE NAME SUPPORTED NOT
SUPPORTED
Other Item Discount (Buy A and B, get a 10% X
discount on C)
Promotional Goods (Buy x, get y at n%) X
Terms Substitution (Buy > $100, get free X
shipping)
Non Currency Specific Modifiers X
Manual Modifiers (applying modifiers manually) X
Order Level Modifiers X
Line Level Modifiers X
Group of Lines Level Modifiers X
Modifier Buckets X
Discounts Based on a Percentage X
Discounts Based on an Amount X
Lump Sum Discounts X
Override the Price with a New Price X
Exclude Items X
List Level Qualifiers/Qualifier Groups X
Line Level Qualifiers/Qualifier Groups X
Precedence X
Volume Pricing (pricing based on a specific volume, X
or a recurring volume)
Net Amount Price Break X
Pricing Attributes X
Formulas X
Accruals X
Cross Order Volume Discounts X
Promotional Limits X
Modifier Maintenance – Copy Existing Modifier List X
to New Modifier List
Modifier Details Report X
Archive/Purge X
PRICING ORGANIZER X
PRICING ENGINE REQUEST VIEWER SCREEN X
PRICING SECURITY X
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 26
FEATURE NAME SUPPORTED NOT
SUPPORTED
ATTRIBUTE MANAGEMENT
Attribute Mapping Attributes X
Custom Sourced X
Attribute Mapping Rules Error Report X
CONCLUSION
Oracle Advanced Pricing combined with Oracle Purchasing provides powerful
capabilities to price requisitions and purchase orders, ranging from simple price
adjustments to complex pricing structures.
Prior to release 11.5.10, agreements with dynamic or complex pricing structures
were manually maintained. Oracle Purchasing’s integration with Oracle Advanced
Pricing allows companies to bring these agreements and their pricing structures
online. Buyers can now negotiate the best possible agreement without worrying
about the system’s capability to handle complex pricing structures. As a result, the
cost to manage the agreement is significantly reduced.
Oracle Purchasing Integration with Oracle Advanced Pricing - Release 11.5.10 Page 27
Oracle Purchasing Integration with Oracle Advanced Pricing
September 2006
Author: Manjula Evans
Contributing Authors: Vivian Lee, Siddesh Colvenkar, Manish Bhargava, Suman Guha
Oracle Corporation
World Headquarters
500 Oracle Parkway
Redwood Shores, CA 94065
U.S.A.
Worldwide Inquiries:
Phone: +1.650.506.7000
Fax: +1.650.506.7200
www.oracle.com