Discounts in Sales Orders and Contracts (SAP Business ByDesign)
The Business ByDesign Sales Scenario offers a variety of options to create and maintain price components within the different sales documents. In this blog the focus is set on discounts within contracts and sales orders. It will discuss the different types of discounts that are available, and how to set them up in the system. Finally examples from the Manage Sales Order Web Service will be used to demonstrate how these price components can be set up via calls, creating sales orders with discounts, updating discounts or removing them in existing sales orders.
Please note that all names displayed in the screenshots are from testing data and share no actual customer information.
SAP Business ByDesign differentiates between header level and item level discounts. As the name suggest item level discounts are set for each and every item separately and do not affect other items in the sales order. The item level discount is always percentage based, following either an additive or a chain discount rule. The header level discount is set on the pricing for the whole sales order and affects every single within that sales order.
You can find the price components on the Pricing and Invoicing Tab in the sales order. On the top side you can see item level price components and at the bottom are the header level price components. You can also see the type, description, Manually Added/Changed indicator and the pricing details for respective price component. If you Mouse-Over the Description (“Item Discount”) you will see a small pop up showing the name of the price/discount/surcharge list that this price component was determined from. In our case it will show no information, because the discount was added manually because the Manually Added/Changed indicator is ticked.
Configure Price Strategy
In the fine tuning activity Configure Price Strategy you can set up Discount types and respective calculation principles for the discount.
The step 052 is Overall Discount and can be set up as a Percentage calculation or as a Fixed Amount entry. In the first case the added value is calculated via a percentage discount. In the Fixed Amount setup the discount is added with a direct monetary value (including currency) and is subtracted from the total. When selecting percentage, an additive rule is applied and in case of multiple discounts these are added together before the discount is applied to the total.
Step 011 is the item level based Product Discount, and is always calculated as Percentage. You can select the way the discounts are added. You have the additive rule and a chain discount rule. The additive rule behaves as on header level, adding all discounts together before the discount is applied. The Chain discount applies every discount separately to the price:
|Amount of discounts||1||2||3||4||5|
|Price per applied discount||10%||10%||10%||10%||10%|
Discounts can be maintained in ByDesign, same as price lists and they will be automatically determined. Other than price lists however, not only one discount can be determined, but instead all suitable discounts will be determined that you have maintained.
Discounts can be determined on header and item level, depending on used determination criteria. Header level discounts usually apply for header level information, such as Company, Buyer, Sales Area or Account Hierarchy, while Product Level discounts are based on Product ID or Product Category.
Please also check this blog, which explains how custom price and discount lists can be created with special focus on custom extension fields.
While the determination can be header level based, the used price component for all Discount Lists is (Step 011) Product Discount (%). The calculation will always take place on item level and can be aggregated to header level.
Discounts can also be pushed in via our Web Services. This part will explain what calls to use when creating a new Sales Order via Manage Sales Order In.
You have two different options in calls to push in discounts: MainDiscount and Discount as PriceComponent. Main Discount is used, when you want to have only one discount on Item/Header Level. Discount as a Price Component is used for multiple discounts on Item and Header Level.
Sales Order creation call with Main Discount on Item and Header Level:
This will create a sales order for Account 1001550 with Product EXAMPLE-0001 with 25% Discount on header level and 5 % discount on item level. Both discounts are percentage based, as is determined by the MeasureUnitCode. The TypeCode is necessary to determine the kind of discount:
Type Code 0007 is Net Header Level Discount
Type Code 1007 is Gross Header Level Discount
Type Code 2007 is Additional Overall Discount (%)
Type Code 3007 is Additional Overall Discount
Type Code 7PR6 is Net Item Level Discount
Type Code 8PR6 is Gross Item Level Discount
If you use the Fixed Amount Discount on Header Level, you will need to change the Rate parameter and add the currency code:
<Rate> <DecimalValue>12.0</DecimalValue> <CurrencyCode>USD</CurrencyCode> </Rate>
Main Discounts cannot be deleted, but they can only be updated. Updating a Sales Order with multiple discount price components via MainDiscount will remove all discounts for that header/item level and leave only the updated price component:
<MainDiscount actionCode=”04”> <Rate> <DecimalValue>10</DecimalValue> </Rate> </MainDiscount>
Important Note: When updating the MainDiscount or PriceComponent do not add the TypeCode, as the TypeCode cannot be updated and will result in Error Messages.
Price components should be used in web service calls, when multiple Discounts per item/header level are intended:
<SalesOrder> <AccountParty> <PartyID>1001550</PartyID> </AccountParty> <PriceAndTaxCalculation> <PriceComponent> <TypeCode listID="2">0007</TypeCode> <Rate> <DecimalValue>-2.0</DecimalValue> <MeasureUnitCode>P1</MeasureUnitCode> </Rate> </PriceComponent> <Item> <ID>10</ID> <PriceAndTaxCalculationItem> <ItemPriceComponent> <TypeCode listID="1">7PR6</TypeCode> <Rate> <DecimalValue>-5.0</DecimalValue> <MeasureUnitCode>P1</MeasureUnitCode> </Rate> </ItemPriceComponent> </PriceAndTaxCalculationItem> </Item> </SalesOrder>
You can update or delete Price Components, but as multiple price components can be available, you will need to specify the UUID of the price component. In order to find the Price Component UUID, use web service Find Sales Order. Example call:
<SalesOrderSelectionByElements> <SelectionByID> <InclusionExclusionCode>I</InclusionExclusionCode> <IntervalBoundaryTypeCode>1</IntervalBoundaryTypeCode <LowerBoundaryID>2894</LowerBoundaryID> </SelectionByID> </SalesOrderSelectionByElements>
This will provide you the entire xml for Sales Order 2894, including all price components. Determine the price component by searching for the provided type codes. When updating/deleting the price components, add the UUID for the respective price component:
<SalesOrder actionCode="04"> <ID>2894</ID> <PriceAndTaxCalculation> <PriceComponent actionCode="04"> <UUID>00163e15-de21-1ed8-b8d4-2532c7556683</UUID> <Rate> <DecimalValue>-2.0</DecimalValue> <MeasureUnitCode>P1</MeasureUnitCode> </Rate> </PriceComponent> </PriceAndTaxCalculation> <Item> <ID>10</ID> <PriceAndTaxCalculationItem> <ItemPriceComponent actionCode="03"> <UUID>00163e15-de0a-1ee8-b7d2-14ad11ac8d56</UUID> </ItemPriceComponent> </PriceAndTaxCalculationItem> </Item> </SalesOrder>
This call will update a header level price component (actionCode 04) and delete an item level price component (actionCode 03).
Also see the new pricing options (since 1908) for OData in the following blogs: