With the 2208 Release SAP S/4HANA Cloud has introduced new feature in its pricing aka Modular Pricing Procedures”
What is the difference between “Modular” and “Regular” pricing procedures?
Well, with “Regular” pricing procedures predefined sequence of steps within pricing procedure is fixed. Flexibility of this approach lies in pricing procedure determination which depends on business document:
- classification for pricing procedure determination,
- sales area and
- customer classification business document sales area.
With “Modular” approach pricing procedure determination is still used to determine so called Main Pricing Procedure. But this pricing procedure contains Inclusion Point a special pricing condition type that marks the point where sub-pricing procedure will be included to make Modular Pricing Procedure. Many sub-pricing procedures can be linked to inclusion point and one that ends up in Modular pricing procedure is determined by user defined business rules.
As SAP S/4HANA Cloud, public edition is now allowing for a company code to have registrations for indirect tax in multiple countries abroad* (*Please refer to RITA Roadmap for supported countries and processes) and with modular pricing related business cases are supported.
For example, if a sales organization is part of company code that has VAT registrations in Germany and Italy, it will require to issue invoices with VAT of one of the jurisdictions, depending on legal requirements for transaction in question.
Those familiar with Italian localization would know that local pricing procedures contains many pricing conditions that German ones don’t. With “regular” pricing this would require complex pricing configuration with use of requirements, but with modular pricing these local specific parts can be part of different sub-pricing procedures and business rules can be set in this way:
Now depending on ‘Tax Departure Country’** value (**field in header of sales document) modular pricing will create German or Italian pricing procedure.
Let’s see what configuration activities are needed to set the system to support this example.
Let’s start from creation of Inclusion point. You, of course, can choose to follow a different sequence when configuring.
Set Condition Types for Pricing (101120)
Enter mandatory data and then select ‘Inclusion Point’ check box. Then hit enter on your keyboard and screen will change.
*As in this example we are need redetermine tax in subprocedure inclusion point class needs to be set to G or D.
New screen is adjusted for data needed for inclusion point. Notice field ‘Subprocedure Detn’ with is used to add subprocedure determination formula. As this hasn’t been configured so far let’s do it next step. If you already have configured one and you want to assign it to this inclusion point, you can do it in this step as well.
Set Pricing Procedures (101117)
Main Pricing Procedure
As next step let’s create a main pricing procedure ‘Y10101 – Materials (Germany)’ as copy template.
Do not add inclusion point at ‘Procedures’ level as it is used only for subprocedures.
As in this example full standard procedure has been copied let’s continue by deleting line ‘850’ with pricing condition type ‘TTX1’ and adding new line ‘850’ with inclusion point ‘ZIP1’ in newly created main procedure.
Here is new main pricing procedure ‘ZMAIN1’
Here I would like to address a important configuration aspect related to inclusion point. As inclusion point represent place where during runtime lines of subprocedure will be inserted, main pricing procedure has to respectively reserve steps for the subprocedure steps. Currently it is 50 steps that are reserved, so if you have steps after inclusion point that are not offsetted by 50 steps you will get following message:
For this reason example main pricing procedures has some steps numbers that are usually not used.
There are planes to add feature that will allow for user to define step numbers ‘needed’ by the inclusion point in one of next releases.
Sub pricing procedures
Let’s add two new sub pricing procedures for German and Italian VAT. Both Subprocedures will be assigned to inclusion point ‘ZIP1’.
In the German VAT Subprocedure, let’s only add line with condition type ‘TTX1’
In the Italian VAT Subprocedure, let’s create a custom version of standard localization pricing procedure for Italy. Since Italian localization is not active on demo system (and it does not have to be) standard conditions were not available so equivalent custom ones were created as well as one revenue account assignment object.
Also, please note that I will not go into condition determination with tax classifications as that would add to already complex topic, but when you are setting this up on your system please consider it as well.
Please note that when same conditions are repeating on sub pricing procedures linked to same inclusion point you must keep the settings for that condition same. To demonstrate this I added temporary used TTX1 in ZITSUB In this example . In such case ‘TTX1’ had to be on step 10 in both procedures,
And if the rule is not respected this configuration error appears.
I have reverted the ZITSUB to have tax condition ZTXI.
Define Formulas for Subprocedure Determination (105765)
Initially you will find an example formula. You can copy it or create new one.
Copied formula will already have determination parameters assigned as are in example formula.
And newly created one has only result parameter.
Onwards let’s use copied formula.
There is option to add more parameters as well
Resulting in more complex rule matrix.
Before you can add a custom field to the parameter catalog, the custom field must exist in the extensibility business context ‘Sales: Pricing Communication Head’.
Now let’s focus on Formula tasks. For this type of formula there is only one task – ‘Determine Subprocedure’ and one CPF routine ‘Determine Subprocedure’.
As formula used in example is a copy of SAP pre-delivered formula, assigning new parameters (in this case ‘Tax destination country’ will not be possible, while the formula created from scratch will allow for it.
Reason for this system behavior is existence of decision table records, that were copied from SAP pre-delivered formula.
For system to allow assigning new parameters you must delete these records.
Now it is possible to assign new parameters and to assign priority to them.
Let’s keep it simple and only add records with value for ‘Tax departure country’.
Please note how decision table has changed in line with additional parameter that were previously added.
Set Condition Types for Pricing (101120)
Now let’s go back to inclusion point ‘ZIP1’ and complete the record by adding subprocedure determination formula.
Set Pricing Procedure Determination (101118)
Next, let’s setup pricing procedure determination. In this example pricing procedure determination is set for main pricing procedure to work only for specific customers. To achieve this a new Customer Classification for Pricing Procedure Determination is added with configuration activity ‘Set Customer Pricing Procedures (101202)’
With this parameter let’s create new pricing procedure determination record.
This step completes the configuration.
Modular pricing behavior in the sales order pricing
Business partner specific setup
This step is optional and is added to keep consistency in example, as new customer classification for price procedure determination was created previously.
Sales order pricing
As sales order is the common business document where pricing determination happens, let’s add to this blog few slides that demonstrate behavior of above configured modular pricing.
First let’s maintain for tax departure country value ‘DE’ – Germany (in this example ‘DE’ would be the default value for tax departure country if field is left blank)
Pricing on line item looks like this
Please notice part after inclusion point
When value of tax departure country is changed to ‘IT’ – Italy, pricing procedure is also changed as differed sub pricing procedure was determined
Other conditions from Italian subprocedure are not visible in price elements. To show they are there i am adding a screen from price analysis
This concedes the demo of feature capability.