SAP SD Pricing Fundamentals

Fundamentals of SAP SD Pricing

Related Trainings

SAP Access

SAP Training

SAP SD Training


Concepts

Pricing is one of the core concepts in SAP SD and all SD consultants need to know pricing. Just as the name says, SAP SD Pricing is configuring the system to effectively determine the price of a product under different circumstances. The most easiest example to explore pricing is to take a simple grocery bill and expand on it.

SAP Pricing Example

Consider this as an extract of a grocery bill. You have purchased some items from the Produce section and some from the stationery section. Your Produce sub-total is 18.00 and your stationery sub-total is 10.00. You have been taxed 10% and your total comes to 27.00 as shown in the picture above.

sap pricing calculation

Let’s just explore on how the pricing is calculated on line item No. 10 – Milk. However, they might not be shown on the bill but are internal to the company selling the product. Let’s explore how a potential bill could be created. As you can see from the picture below, there is a Base Price from the price list – 5.00 . And since the bill is for a retail customer , there is a retail discount of 1.00. So the sub-total for the line item 10 is 4.00.

Condition Type :

 

The types of calculation ( whether its a price, discount or a tax calculation, and in price – if its a retail price or a wholesale price or a variant price etc ) are called condition type. Normally, condition types of a particular kind are not cumulative – Meaning if there are more than 1 Pricing condition type, they don’t add up – instead the last pricing condition type is taken by the system. There are some exceptions to this however. For example when pricing a car, its the sum of the different pricing condition types that gives you the Price. They are called variant condition types.

Condition Type

Requirement

A requirement is a piece of code that calculates if a particular condition type should be evaluated or not. This is not necessarily the only way to check if. However, since this involves hard-coding the logic in the system, this functionality should be used sparingly.

For example, the following piece of code says, “If the item is not relevant for pricing – do not price it”. Functional consultants should be aware of the final result SY-SUBRC. SUBRC stands for SUB Routine Return Code. Typically in SAP, a return code of 0 signifies a success. Otherwise its a failure.

* Pricing is turned on in item category configuration (TVAP)

 


For more details, visit us at SAP Training and SAP Access


* Pricing is turned on in item category configuration (TVAP)

form kobed_002.

sy-subrc = 4.

if komp-kposn ne 0.

check: komp-prsfd ca ‘BX’.

check: komp-kznep = space.

endif.

sy-subrc = 0.

endform.

* Prestep

form kobev_002.

sy-subrc = 0.

endform.

Similarly, the following picture shows a simple requirement. There are 2 types of discount condition types – Retail and Wholesale. If the customer is retail, then apply that discount. If the customer is wholesale, then apply the other discount. So the actual total depends on who the Order’s customer is. The same can be achieved using many different ways, but this is sure one hard-coded way to do it.

pricing requirements

Sub-Total

A sub-total as the name implies holds temporary totals before the final price is calculated. As shown in the picture below, the Gross price is a sub-total that results from the base price. The Net Price is a sub-total that is arrived at subtracting the Discount percentage off of the Gross Price. There are many additional steps that might be required to arrive at the final price. For example, if the item is taxable, should the tax be applied on the Gross Price or the Net Price..? That actually depends on the business scenario. However, the Sub-totals allow for easily identifying and computing values for further use.

Pricing Sub-totals

Alternative Calculation Type

The value 5.00 for the Base Price ( shown in the picture above ) is derived based on condition records which we will see much further in the discussion. However, if the condition type should NOT be calculated based on a condition record, but should be calculated based on an external or internal logic, then an alternative calculation routine should be used. Each alternative calculation routine is a 3 digit number between 1 and 999 that contains a piece of code that does some calculation either internally or externally and returns a value. That value will be used to calculate the condition type as opposed to a condition record. A simple example for the same is US Taxes. Taxes in the US and Canada are based on Jurisdiction code. There are around 50000+ jurisdiction codes in the US alone ( Based on all possible variations of City, County, State and District ). And they change continuously. So it is not practical for companies to keep track of the changes in tax rates. There are external tax companies ( Called Tax Vendors ) that only does this. So it is wiser for companies to just call an external tax vendor using a remote function call, get the tax rate as relevant for the corresponding jurisdiction code and return that value to the pricing procedure.

Alternative Calculation Routine

Account Key

When an invoice is created, the finance departments wants the corresponding Sales, expenses, tax accounts etc to be updated on the fly. The account key in the pricing procedure ( with the help of Account Determination ) helps in identifying which G/L account this should the amount flow into. A simple example could be

 

Account Key Description Customer A/C Group Material A/C Group G/L Account
ERL Sales Wholesale Consumables 1000040
ERL Sales Wholesale Stationery 1000050
ERS Discounts Wholesale Consumables 1100040
ERS Discounts Wholesale Stationery 1100050

Account Key

Statistical

This is a flag ( A Check mark ) that is used to signify if the pricing condition type is being used in the calculation or not. For example, the actual cost of the material ( not the price but the cost price ) is available in all pricing procedures, since this is used by Controlling ( CO ) to evaluate profitability. However, the value should not be relevant when pricing to the customer. So, if you need informational condition types for further analysis set them up in the pricing procedure as statistical.

Statistical Flag

Print Flag

The print flag is another check mar that is used to tell SAP if the particular pricing condition type should be printed on the final bill or not. As discussed in the previous example, the cost condition type should not be printed on the invoice. With the advent of advanced technologies like SmartForms, Adobe Forms etc, this flag has almost no use ( Since what is printed and what is not is decided mostly by these programs ).

Print Flag

SAP Pricing Configuration

Now that we have understood the basic terminology used in Pricing, let’s dig deeper into the configuration. The configuration is very similar to SAP Condition Technique. We will only discuss the rest of the pricing relevant stuff going forward.

Maintain Condition Records

A condition record is actually a row in a database table. The actual database table is defined in the Condition Table assigned to the Access Sequence. Let’s start by creating an condition record for a condition type PR00. The transaction code to create the same is [VK11]. The menu path is [ Logistics -> Sales and Distribution -> Master Data -> Condition -> Select Using Condition Type ]. Enter the pricing condition type, and select the right Condition Table.

Select the condition table

Enter the values and save the record. There are some advanced concepts like rebate functionality, condition supplements, scales etc which will not be discussed here.

Create condition record

SAP Pricing DEMO

Let’s start by creating a new sales order for the customer and material that we have created condition records for and see the effect of the condition records on the sales order pricing. A sales order is shown below for Customer 1400 and for the material M-01 that we created the condition record for with a price value PR00 of 50. Select the line item and click on the Nickel button in the bottom ( Pricing button ) to view the pricing details for that line item.

See the pricing details for the line item

You will be taken to the Line Item’s Condition tab where the pricing details can be viewed specific to that line item. As you can see, the PR00 value is set as 50.00 which is exactly what we have set in the pricing condition record.

condition value of 50 in condition tab

Let’s say somebody else has entered the condition record for that material and you have just created the sales order. Now if you want to analyze and backtrack why the pricing is coming up as 50.00 click on the Analysis button as shown below.

Click on the Analysis button

A new screen opens up where if you explore the particular condition type ( PR00 in this case ) you will see for which combination ( customer material in this case ) that pricing has been picked up.

value of condition type PR00

You can just click on the area highlighted above to see further details of the condition record. For example, if you click on PR00 above, you will be taken to a new screen that shows you the actual condition record, its validity ( Valid From and Valid To dates ) along with the value for PR00.

pricing condition record value

This concludes SAP SD Pricing Fundamentals.

Related Exercises

Related Articles

Related Trainings

38 thoughts on “SAP SD Pricing Fundamentals

  1. GAUTAM says:

    Siva

    In the first screen, after Tax, of 1.00 dollar, why the price is going down, in our life, after tax, the price goes up. The total should be 28+1 =29, why it is 28-1=27???

    Gautam

    Like

  2. GAUTAM says:

    siva..

    section -SD Pricing demo..

    for PR00, you hav set up the amount for M-01 as 100, but in the next Price screen, you are getting 50 dollars, in the explanation, it is also written as ‘…As you can see, the PR00 value is set as 50.00 which is exactly what we have set in the pricing condition record..”…..

    as I understand, it is set up as 100, and it should display as 100.

    Can you please clarify the same?

    Gautam

    Like

  3. Tee says:

    Its a great work helping people by explaining with screen shots and every detail..

    But if you know there is a mistake in the total, then it should be fixed….instead of having them got stuck there and keep them thinking, that it should be 29, how it is 27.
    Thanks

    Like

  4. BALDEEP SONI says:

    This article is really very informative and the best part is the way of explaining it.
    It completely give the overview for the beginner on how it is connected to our day to day life.Hence making it much simpler to understand.

    Like

  5. Sudhakar says:

    I am getting above error please take to look at it.

    Mandatory condition PR00 is missing

    I created the pricing procedure Z856BS with condition type Z856 and access seq of Y856 and table 856.

    Cust. PP = %
    Doc PP = >

    My SO doc type is YOR. S.org is DELL; Dis Channel : IS and Div: CM

    Thanks,
    Sudhakar.

    Like

    • siva says:

      Hi Sudhakar
      I am not sure what your Customer # is. If you can give me your customer number, I can try and simulate an order. As of now, I checked the pricing procedure and found out that PR00 is being made mandatory in the pricing procedure Z856BS and it is possible that you have NOT maintained the condition record for PR00. As you can see from the picture below, PR00 is set to Required in your Pricing Procedure.
      Try and maintain the condition record and let me know if you still have problem.

      Like

  6. Sudhakar says:

    Siva,

    I have a question on pricing. I was trying to create a pricing scenario for customer group. I created base price for the material and trying to give 2% discount to a particular customer group. When I try to do that in SO discount is getting added instead of deducting. I tried to change the sign to -ve in the condition type but I didn’t get the answer. Here are the details:

    Pricing Procedure:

    Condition Table : 875
    Access Sequence: Y856
    Condition Type: Z875
    Pricing Proc: Z856BS
    CPP: %
    DPP: >

    Customer No: 7152
    Material : L10

    ORG: DELL, IS, CM (Company, Distribution Channel, Division)

    Please verify.

    Thanks,
    Sudhakar.

    Like

  7. Isaac says:

    Hi Siva,
    I hv created the different parameters so that I can dictate the system with my new price. Unfortunately, my newly created condition type is remaining inactive. Here r my different parameters:

    Condtion table: 780
    Access sequence. ZHOS
    Condtion Type. ZHOS
    Pricing Procedure: ZHOSPP
    Customer PP. F
    Document PP: Æ
    Document Type: ZHOS
    Customer 1376
    Material M-o1

    Thanx

    Like

  8. Isaac says:

    Hi Siva,

    I hv created a new condition type in an attempt to include some discounts for the materials. Unfortunately, the newly created condition type does not seem to respond the way it was supposed to act. Here r my different parameters:

    Condtion table: 780
    Access sequence. ZHOS
    Condtion Type (Material): ZHOS
    Condtion type (discounts): ZPOD
    Pricing Procedure: ZHOSPP

    Document Type: ZHOS
    Customer 1376
    Material M-o1

    Thanx

    Like

  9. Siddaram says:

    Hi All,

    *Business wants, the Sales Order qty entered in many sales orders to be considered and given the Graduate -Interval Scale for the line items, but as per my testing this applies only for single line item in that SO!
    If any one knows this can be met somehow, please share your ideas?

    “Graduate- interval scale” i.e. Scale type D, this needs to be maintained in condition type customization only!

    e.g.: (For Customer/Material Disc. with condition type: K005) the Scale is set as below;
    to 100 Qty 5Rs/ea Disc.
    to 200 Qty 10Rs/ea Disc.
    to 500 qty 12Rs/ea Disc.

    If I’ve two SO,
    1. 23456 with Disc. line item qty as 50
    2. 23457 with Disc. line item qty as 150,

    The Scale should apply accordingly, i.e In First SO, for 50 Qty the Disc should be 50*5= 500 Rs,
    And for Second SO, out of 150, first 50 qty should be applied with 5Rs Disc. and remaining 100 with 10Rs Disc.

    Hope you understand the requirement here, let me know so that i can explain you more in case required.

    The above request holds good if the single SO with one line item in it. but not if 2 SO there…

    your feedback much appreciated, Thank you…

    Best Regards,
    Sid.

    Like

  10. Sachin says:

    Please suggest a possible solution to the problem below:

    Problem : I need to give discount (on Basic price of both materials – not necessarily in same material group) subject to a condition that a specified minimum qty of each product is purchased in the same sales order. if the qty of even any 1 of the products goes below the minimum specified qty, the discount should not be provided on any item.
    This needs to be done for individual / group of customers.

    Like

    • siva says:

      When scenarios get complication, try not to look for config based solutions – Rather look at solutions like Alternate calculation Routine etc. Also, I don’t think you are a Magna Training student. Our answers are ONLY restricted to the students of our Training Institute.

      Like

  11. Raghava says:

    Hi Siva,
    I am getting the below error when m-02 material is used in sales order creation. I tried to dig in to check what’s happening behind the material configuration, but couldn’t trace it.

    Error: Material M-01 found on the basis of entry M-02 (reason Advertising campaign)

    -Raghava

    Like

  12. Maxwell says:

    Thanks for sokme other informative blog. The place ese
    could I geet that type of information written in such an ideal means?
    I’ve a project that I’m just now operating on,
    and I habe been onn the look out ffor such information.

    Feeel free to visit my web page; SEO in hertfordshire (Maxwell)

    Like

  13. Theresa says:

    Hi,
    If you create a price group or price by ship to when you enter an order should there be an error if you key a price that does not match the price group/ship to?

    We are having issues with EDI orders coming in with a different price than what is on the customers price list and it is not showing an error. We think it should since the pricing does not match. Is this a set up issue or standard SAP with EDI

    Thanks

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s