Showing results for 
Search instead for 
Did you mean: 

Price determination in CPQ for prices that are determined via the main product

0 Kudos

Hello ,
We have the following problem with pricing in CPQ in connection with SAP CPS:

The prices of a SubProduct (SalesKMAT) are found via variant condition of the main item. That is why we use KOMP-UPMAT = <*CTX( Product.RootProduct.SystemId )*> in the general mapping to determine the price via CPS. If we have determined a valid variant via configuration, the prices are determined via CPS and transferred to CPQ. So far ok, but the prices are always visible
for the configurable main material (this should not happen) as well as for the Sales KMAT and therefore doubled in total. How can we prevent that the prices are transferred to the configurable main material?  SAP help is not delivering any hint's to that problem.

kind regards

Thomas Scholtes

Accepted Solutions (0)

Answers (1)

Answers (1)

Product and Topic Expert
Product and Topic Expert
0 Kudos


Please allow me to first get some clarification so that we understand the situation on the same page before giving my suggestion.

First of all, let's sync our terms used. In SAP CPQ, we have 5 terms to describe items.

  • "Root Item" is the topmost item in a nested structure.
  • "Parent Item" and "Child Item" are a pair. In a multi-level product, each level is the parent level to its lower level except for the bottom one, and each level is also the "Child Level" of its upper level except for the "Root Item".
  • "Main Item" and "Line Item" are another pair of concepts, of which "Main Item" usually refers to a real equipment for sale, while "Line Item" refers to a component. "Root Item" is definitely a "Main Item". But other sub items, regardless of "Parent" or "Child", can be either "Main Item" or "Line Item".

"KOMP-UPMAT" is a pricing attribute at item level. If you switch on "Evaluate per item", the attribute will be parsed for each item, including all the sub items in a nested structure. As you put "<*CTX( Product.RootProduct.SystemId )*>" in "KOMP-UPMAT", "KOMP-UPMAT" will be parsed as the root item's system ID for both the root item and all the subitems. In this case, if your price condition record is maintained based on the root item's material ID(i.e. part number), all the items of one nested products will get the price result with their root items system ID as the value for KOMP-UPMAT.

There are several implementation tricks to help you determine the price only at the items that you wish to in SAP CPQ.

  1. In SAP ERP, maintain the price condition records by the exact material ID (part number) of the BoM items (condition field KOMP-PMATN), rather than simply by root item. By this way in one nested product, the root item will get the price as the concept of "Base Price" in CPQ by its part number, while the sub items will get their unique prices by their own part numbers. As a result, the total price of a nested product is the sum of all the items, including the root item and all the sub items. In SAP CPQ, item ListPrice only refers to the price for one certain item. There is another set of item fields with characters "RolledUp" in its name, which will be the price sum up of the current item and all its direct child items. By default, the item ListPrice is one of the calculation sources of the item ExtendedAmount, which results in quote Subtotal.
  2. If you only want the price to be determined at root item level while the prices at sub items should be 0, you'll need to maintain the price condition records only by the root item material ID (part number). If you use the condition field KOMP-UPMAT, you'll need to add some prerequisite in CPQ pricing attribute setting. That is, add some conditions together with the tag "<*CTX( Product.RootProduct.SystemId )*>". For example, you can do a simple judgement whether <*CTX ( Product.SystemId )*> equals <*CTX( Product.RootProduct.SystemId )*> (it means whether the current level is the root level). By this, you'll be able to control that the pricing attribute "KOMP-UPMAT" will only be parsed for certain items which you expect the price to be taken out.
  3. A more advanced way but with some tech risk is: For any items that should not be populated with variant prices, change the pricing type of the corresponding product as "Custom Pricing". By this way, even if the VCP pricing call will be triggered if the product is a sub item of a variant pricing root item, the ListPrice of the product will not be populated from VCP pricing result. Be careful when using this trick, because the product won't populate from VCP pricing result when it is a root item either.

You may describe your expected results in detail for further discussion.

Best Regards