Contract Pricing/Discounting

Problem

In few situations, a company may decide to add an option to allow special discounts at certain times for some products. The discount needs to be setup to specify contract/special prices for some products for certain customer(s). Use cases include:
Use Case 1. Contractual/Special Pricing changes list price
Use Case 2. Contractual/Special pricing applies discount on quote line items (Used when discount must be shown on quote to customer)
For both use cases, the prices are setup using a custom table.

Solution

Before setting up the contract/special pricing process, first make sure the customer required checkbox field is checked. When this field is checked, the user is taken directly to an empty Cart/Quote. From there, they can enter customer information. A product can then be configured when the Add Item button is clicked. Navigate through CPQ Setup→Users→User Types to confirm the customer required checkbox field is checked for the user type(s) that the contract/special prices applies to.


Use Case 1. Contractual/Special Pricing changes list price

Step 1: Create a custom table
Navigate through CPQ Setup→Product Catalog→Custom Tables, click on the Import New button to new a new table by importing an excel file. For more details, see chapter on Custom Tables
For our example, the excel sheet shows the contract price for three customers (Acme, Websoft, and printex) as well as the standard list price for three different types of printer. The Contract code uniquely identifies the customer that the discount prices apply to. The ContractCode needs to be defined as a custom field that holds the customer information; this is explained in the next step.

Import Table Excel Example Sheet

When you click on save, please wait until the system informs you that import has finished. Click on the Go Back link, this opens up the View Table Entries page with the new table entries listed as shown in screen below.

Step 2: Create Customer Custom field
From CPQ Admin → Customers/Customer Roles → Customer Custom Fields, you can edit and delete existing custom fields, or add a new one by clicking on Add New button. Customer custom fields are always of free input type - they can't be changed to “dropdown”, “checkbox” or something else. For more details, see chapter on Customer Custom Fields

ContractCode defined in the BillTo CustomerRoleType

Step 3: Create Expression/Formula using the table tag builder
Next step is to create a query using the table tag builder that gets prices for the printers from the custom table created in step1. Let’s assume that the printers are product options for a configured product (Desktop). From CPQ Setup→Product Catalog→Products, edit the product (Desktop), in the product attributes/options tab, edit the attribute (printer) and add an expression in the price field using the table tag to get prices. Note: Table tag builder is invoked from the code builder in the price field.

Printer Attribute definition page

In this example, <* TABLE ( SELECT Price FROM ContractPricing WHERE PartNumber = 'LSR-01' AND (ContractCode = '<*CTX( Quote.Customer(BillTo).CustomField(ContractCode) )*>' OR ContractCode = 'Standard') ORDER BY Price ASC ) *> returns the price in the custom table where part number is LSR-01 and ContractCode matches the name defined in table, if the user enters a wrong/empty ContratCode, then the standard price is used for that product(printer). After all this has been set up and saved, the contract/special pricing process has been successfully set up.
On the USER side when the ContractCode Acme is entered in the customer Info tab by the user. On the configuration, the contract prices are displayed for Acme for the three different types of printer as shown:

Use Case 2: Contractual/Special pricing applies discount on quote line items (Used when discount must be shown on quote to customer). In this case, multiplier will be used to represent discount. Multipliers are values such as 0.5, 0.75, etc. that when applied to the list price will represent a percentage of the price, such as 50 or 75.
Step 1: Create a custom table
Navigate through CPQ Setup→Product Catalog→Custom Tables, click on the Import New button to add a new table by importing an excel file. A multiplier column must be defined with values such as 0.25, 0.75, etc. For our example, 0.8 defined as multiplier represents 20% discount of the list price for Acme, 50% discount for Websoft, and 80% discount for Printex.

Import Table Excel Example Sheet

Step 2: Create Customer Custom field
Navigate through CPQ Setup → Customers/Customer Roles → Customer Custom Fields. You can edit and delete existing custom fields, or add a new one by clicking on Add New button. Customer custom fields are always of free input type - they can't be changed to “dropdown”, “checkbox” or something else. For more details, see chapter on Customer Custom Fields
Step 3: Setup Discount/Multiplier Rule
The next step is to set up the discount/multiple rule using the table builder tag. This rule is setup under CPQ Setup → Pricing/Calculations → Discounts/Multipliers. Create a new discount by clicking the Add New button which opens the discount/multiplier page as shown in figure below.

Discount/Multiplier page

In the multiplier field (step 2 of the discount/multiplier), click on the code builder to build a query statement/condition. Use the expression <*IsNull(<* TABLE ( SELECT Multiplier FROM DiscountPricing WHERE PartNumber = '<*CTX( Quote.CurrentItem.PartNumber )*>' AND ContractCode = '<*CTX( Quote.Customer(BillTo).CustomField(ContractCode) )*>' ) *>, 1)*>. This multiplies the multiplier by the list price of current quote items under the condition that both ContractCode and partnumber exists in the custom table created in step1, else no discount is applied. Also, from step 1(discount/multiplier) for our example, this rule will only apply to user type, Sales.
Step 3 of the discount/multiplier, signifies the condition when this discount rules will be applied. The condition defaults to a 1. NOTE: 1 means Always true. After all this has been set up and saved, the contract/special pricing process has been successfully set up.
Exit setup, on the user side when the product is added to the cart and contractcode is entered in the customer info tab. The appropriate multiplier is applied to the quote line items.

For this example, the color laserjet Printer reflects a 0.8 multiplier(20% discount) is applied to the list price while other items in the cart have no discount(multiplier=1) because these items are not defined in the custom table. The multiplier is applied only to items/products defined in step1.

See Also

You are here: SAP Sales Cloud CPQ Online HelpBest PracticesPricing/CalculationsContract Pricing/Discounting