Are you missing a functionality in SAP ERP MM & SD joint process and functions, and you think it should be included in the standard product?


Do you want to improve SAP MM directly and influence the SAP Development?


Now is your chance!





Currently we are running the Customer Connection Program in SAP, and I would like to have you - our customers - to be part of our brain for innovation and improvement!

Customer Connection is directed at incrementally enhancing and improving products and solutions in mainstream maintenance. It offers you, our customers, the opportunity to suggest small enhancements and improvements to those products and solutions (“Improvement Requests”). The Improvement Requests selected for development will be delivered through SAP support notes or support packages.

This is a unique opportunity for you to influence development at SAP, and to submit requests for functionality which you have been waiting for. If you are interested, the following is our working scope:



Link: SAP SD and MM joint process and functions



Scope of project:

Improvement of functions and processes that are integrative between ERP SD Sales and ERP MM Purchasing or are commonly used cross industries and regions.For more details of the Project Scope, you can find it in the above SAP SD and MM joing process and functions link!








You can navigate to the THE REQUEST PAGE and submit the improvement request, or contact me at if you have any question.



For more information, please visit: OUR Customer Connection SCN PAGE and SAP Improvement Finder



Sometimes I wonder how many implementations you completed, one needs to brush up on designing of material master before getting into a new implementation project, no matter his/her of experience level.


Every time a transaction run with financial postings, financial account determined based on valuation class in material master, triggered by a movement type with automatic account determination process.

So, here's a simple explanation -Who is the owner of material master in spite of the same material number/code used by business in a module/in all modules.
Who is the owner 1.jpg

Material Master!!!!!!!!!!!
Very well in default attracted to Material Management module where it is comprises with other modules data too as required by business scenarios ie….Finance  & Controlling , Sales & Distribution, Quality Management, Production Planning and Warehouse Management etc. Based on material properties with different characteristics and how material behave to business on inventory and accounting, the material type determined to use with standard material type or custom material type.

Precisely material master available with user departments like Basic data , Purchasing, Sales, Work scheduling, Accounting, Classification, MRP(For Materials planning and control), Production resources/tools, Costing, Storage, Forecasting, Quality management, Warehouse management, Plant stocks, Storage location stocks  and based on material properties to business these user departments on material type and later material are created.

In our day to day business consulting, materials are created with standard transaction code MM01 or materials are created through uploading tools by business. I refer back with my previous involvement for a large project where material creations have following process
1. Business end user search material list or catalog for his/her daily usage for transaction.
2. If material not available, then he /she fill the material request form
3. Material request form sends to central material creation officer with his/her manager approval.
4. On appropriate check and verification by central material creation officer and if he is happy, then he /she can new material code or upload file with custom transaction code for new material code.
5. Once new material code created in system, central material creation officer convey message to business end user.


Since different departments in a business work with the same material, but each department uses different information on the material, the data in a material master record is subdivided by user department. As we all know, material created by a user and material used by all different department users but, the question is who is the material owner in business – those who created material or those who use material on department wise or MRP controller or Buyer (purchaser).

Who is the owner 2.jpg


Conclusion fiction:
With referring to the above information’s, business system can deal to work  by deciding material owner by creating  “Lab/Office(MARA-LABOR)” and assigning to material master in Basis data-1 view. The field Lab/Office in material master is known as Laboratory/design (engineering) office where this Key represents for the design office, laboratory or laboratory worker responsible.

Who is the owner 3.jpg

For certain case, the field “Lab/Office “in the material master record is used if the material is a chemical component but also the same field can be used for design and engineering purpose defining ownership of material master.



Before concluding, the “Lab/Office “field will be used on the Material Master to identify the ownership of the material. The ‘Lab/Office’ field will be used for this purpose only and this is at Client level. If new ‘Lab/Office’ field values will be identified by Business Lead Users and given to the Supply Chain Team. The Supply Chain Team will add the new values to the system and may delete previous entries which are not required by business.


Thanks for your time to read my 3rd Blog. Also I would like to thank all my present project team members for their great encouragement and strong motivation.

Biju K

It is time to clear up a widely mistaken belief, although it became almost established as truth due to the massive wrong answers given in a high disproportion when someone failed to search or is seeking for a new answer to the question "How to make error message & a warning?" or "Changing warning message to error not working" 

It is really interesting to see how attractive such questions are. Within a few minutes several answers are pointing to the customizing. Some mention the IMG path others are giving the transaction code to the same customizing. I wonder from where these suggestions are taken. Did they look up older questions and just repeat the answer? Or do they just believe that any system message can be customized, one only has to know the right customizing transaction.

So the typical discussion goes like this:

"I want to make message MM 081 to become an error"

"no problem - execute OMT4 and add this message and maintain an E for error"



Why was he shocked?


OMT4 does not even have a "New Entry"-Button




No issue at all, now the Techies jump in and inform that this is all stored in table T160M and suggest to maintain this table directly with SM30 transaction


: not possible  I get and error "The maintenance dialog for T160M is incomplete or not defined"


: Click the message, it takes you to the long text. Here you have the option to generate a maintenance dialog


: Thank you.


: Hi, I have one more question. I added the message as said. But it does not work, can you help me.


All are going now, leaving a desert with an unanswered question, and one more thread about how and where to maintain flexible system messages



Have you ever tried to start a car that you see in a parking space with your own keys? Why not? Probably because you know that you cannot use any key to drive any car. Why are you assuming it for any message in SAP?

Just imagine the car is transaction where you expect the warning or error according to your entry (the key) in table T160M (ignition lock). You already smashed the window to open the door (SM30, because OMT4 did not let you in)

Still the motor does not start. Are you disappointed?

Like the ignition lock needs the right key, your SAP transaction needs the right ABAP that recognize your entry.

If SAP has not foreseen a variable message in its ABAP coding, then you enter as much as you want in T160M, it will just not work.

SAP's system messages are all stored in table T100, a small subset is foreseen to be customized, these are stored in table T160M.

T160M entries are delivered by SAP. Some more messages can be added because the programs have been prepared for this. Those new entries are usually communicated via OSS notes.

How to know if a message is customizable which is not yet in T160M?

  • Search SCN, if you find a "Hooray, it works" then you got already a good indication.
  • search SAP Support Portal
  • Check it from transaction SE91 Message Maintenance, you should know some basics in ABAP language.
    • In SE91 enter your message class and message number and click the Where-used button. SAP gives you a list of programs. double click the description on the right and SAP takes you into the ABAP directly to the place where the message is processed. Here you can see whether it is just a message with a hardcoded message attribute, like this

      •    MESSAGE W388(11).

      • ENDIF.

    • or if there is some coding which is looking into T160M table to get your customized attribute:
      • PERFORM enaco_2 USING 'ME' '040'.

      •               CASE sy-subrc.

      •                 WHEN 1.

      •                   MESSAGE w040 INTO gl_dummy.

      •                   mmpur_message 'W' 'ME' '040' '' '' '' ''.

      •                 WHEN 2.

      •                   MESSAGE e040 INTO gl_dummy.

      •                   mmpur_message 'E' 'ME' '040' '' '' '' ''.

      •                 WHEN 3.

      •                   MESSAGE w040 INTO gl_dummy.

      •                   mmpur_message 'W' 'ME' '040' '' '' '' ''.

      •               ENDCASE.

By the way, there are message customizing where you can add new entries, still the above said is valid for them too.

Sorry for killing a dream

Trigger to this story can be read in Application area MM and Changing warning message to error message - Entry Sheet and many many more discussions in SCN and elsewhere.

Yes, you can use a reorder point procedure for inter-plant stock transports, but be careful what you put into the lead time.


When you source materials from one of your own plants, your lead time (in the field Planned Delivery Time  (in the delivering plant) should be the time it takes from the issue in the delivering plant until it arrives at the receiving plant. The only question is: Can the delivering plant issue right out of available stock?


If the delivering plant does not keep the product in stock but has to procure it also, then the total lead time until it arrives in the receiving plant will increase dramatically. But if you put that total time into the PDT, you will ask the delivering plant to issue way too early. Unfortunately the TLRT in MRP3 does not work with procurement indicator 'F', so what can you do?


I know people have played around with source lists and info records but if you want to use an automatic reorder point calculation (VM or V2) you need to put the total replenishment lead time into the PDT, because that is what the reorder point calculation uses. So you are stuck with a manual reorder procedure (VB or V1) and you will have to include the entire total replenishment lead time in your spread sheet calculation.


The SAP Add-On Tools (MRP Monitor and Reorder Point Simulation) give you added possibilities: Since the MRP Monitor also performs an EFG classification for lead time - and lets you pick the TRLT from the MRP3 screen - you can build a list of items which are feasible for an auto-reorder procedure (X - consistent consumption, C - low consumption value, E - short lead times). The Safety Stock and Reorder Point Simulator then lets you calculate and simulate various service levels for optimized reorder points and safety stock settings... and allows for a mass update of the policy.


for more info on the SAP Add-On Tools refer to the website or check out my YouTube channel.

Driving through the long road of MM world, I heard similar questions many times from consultants, customer and colleagues asking how to overcome error of
unrealistic stock value at SAP System.


Well, different customers, different business scenarios, different behaviours. But, I would say that in most of cases we can use some workarounds to avoid errors from this nature.


Especially talking about error messages 'M7 304' and 'M7 308'.
M7304 - Stock value and quantity unrealistic: & / &
M7308 - Stock value and qty are unrealistic: & / & -> see long text


Let's talk about these above errors in details:




This error is raised in the following piece of code:

     IF ( w-salk3 < 0 AND NOT w-lbkum < 0 ) OR
         ( w-salk3 > 0 AND NOT w-lbkum > 0 ).
        WRITE w-salk3 CURRENCY i_waers TO l_salk3_message.
        WRITE w-lbkum UNIT i_meins TO l_lbkum_message.
        MESSAGE e304 WITH l_salk3_message l_lbkum_message.
If the field MBEW-SALK3 (Total value on stock) is becoming lower than zero and then error is raised.


- Common reason:
If the Tax condition is customized as non-deductible taxes, then the amounts are added to the material value and - during goods movement -
and subtracted from the stock value. If the same material was previously posted to the stock with deductible taxes, a negative balance can result.


- Comment:
A negative stock balance cannot be prevented by allowing negative stock in the material master. A negative stock value is only tolerated in
conjunction with negative stock quantity but not with zero stock quantity.


- General solution:
A withdrawal of stock material should be posted with the same tax settings as the placement of material into the stock, i.e., in both cases 'deductible' or in both cases 'non-deductible'. The non-deduct. taxes that are due are to be added to the material value on the receiving-plant side, at goods receipt thus.


- Workaround:
A possible way to overcome the error in this particular case is to increase the stock temporarily (movement type 561), so the stock amount is not zero after goods issue, and to correct for the stock increase after the goods issue (movement type 562).


- Another possibility is MR22 transaction.
Use the function "Debit/credit material" (contained in Valuation menu) to post a correspondingly high material debit (if value is negative) or
material credit (if value is positive) for the material. Then carry out the goods movement. When you use this procedure, the system creates a
revaluation document.




Error 'M7 308' is usually caused by a rounding issue.
In case, it is because the total quantity on stock is not matching to the total value on stock.

In order to solve this error we should recalculate the total value.

And to do that we have to post and re-post a price change in transaction MR21.


- go to MM03 transaction and check the price in Accounting 1 view.

-  then, go to MR21 transaction and post a price change by increasing the price in 0,01. For example, if price is 100,00 USD change to 100,01

- open MR21 transaction once again and then post a price change by reducing the price in 0,01. For example, from 100,01 USD to 100,00.


Once these price changes have been posted the total value on stock will be adjusted and then you should be able to make any necessary goods
movements for this material.


See the following notes as reference:
1026379 - MB5K: Misleading error message 045 due to rounding
1708261 - Error 'M7 308' is raised when trying to post a goods movement


Best Regards,
Fábio Almeida
SAP Consultant - ERP MM

A lot of times you see people in forums asking questions about OBYC, on why account X was determined when the system should be determining account Y. Instead of trying the forums, where it is extremely hard to get help because people don't have access to your system, you can debug the call and see for yourself.


"Debug? But I'm a functional consultant!" - You're a "consultant" and a consultant should understand a language as basic as ABAP. You don't have to write it, you have to read parts of it, so don't whine. Trust me, it will make your life much easier.


There are two transactions you should know about: ST05 and SE37, but first lets use MIGO to provide an example. Go to MIGO and create a document with a 201 movement (consumption to cost center) and stop before saving the document.


Go to ST05. Select "Buffer Trace" (SQL Trace should already be pre selected). Press "Activate Trace". Go to MIGO, save the document, and then back in ST05 press "Deactivate Trace" and "Display Trace". Execute.


In the object name column set a filter for T030. It depends if your hit is in the buffer or SQL, but you should see something like this (in this case it's blue because it hit the buffer):



So my 201 movement is hitting BSX with valuation class 1100 and GBB with VBR 1100. That provides some valuable information about how SAP is reading OBYC, namely you see it is using VBR and 1100.


If you want more detail you have to go SE37 and debug (and I seriously recommend you at least learn to debug). Select function module MR_ACCOUNT_ASSIGNMENT and look for the following code (I knew I had to debug this FM because if you double click SAPLKONT on the previous picture, you navigate to the code where the SELECT is made):




The important one is the SELECT to T030. If you set a break point you will be able to see (when you post a new document) the various selections to your OBYC configuration, and can see in T030-KONTS and T030-KONTH which accounts were determined (this way you can see if your account determination is standard or if the account is being changed in a substitution further down the line).


Above the SELECT you can see the various configurations:

  • XKOMO - Relevant for account modification
  • XBWMO - Valuation modification relevant
  • XBKLA - Relevant for evaluation class


I hope this helps you understand what is wrong with your account determination, and helps you understand how SAP works.

The outcome of Materials Planning depends to a very large part on the policies you set for the individual materials. Supply chain optimizers teach a lot about policy... should you use a reorder point procedure, a PD pr maybe a material forecast to tell MRP when to order how much? They also go into what lot size procedure is fitting and how to determine a safety stock and in some other cases they suggest a dynamic safety stock calculation with a range of coverage profile.


Those are all valid and absolute necessary teachings, but the question is: what do you do with your portfolio once you understand all that and know what to set up? If someone tells you to go to the LIS to find out - for each material individually - if there is consistency in consumption, go to document evaluations to run a dead stock report that takes up hours, look in the material master what the replenishment lead time is and expects you to then set up policy for every one of your 5,000 materials... run! You should certainly not pay for that because as soon as they're gone you will find out that the materials controllers will give up on that impossible task.


Unfortunately, in SAP you can not perform an XYZ analysis for consumption consistency or a life cycle classification. And unfortunately, in SAP you can not update a group of materials with a common policy (except with the MRP Group on the MRP1 screen. But that record has only a limited amount of fields available and does not allow for the setting of a complete policy). So you would have to go to many different transactions to carry out your analysis and some things you would have to do in Excel.


The solution is the SAP-developed MRP Monitor. It doesn't come with the standard sofware, but it is developed within SAP by SAP. The MRP Monitor runs every month and classifies your entire portfolio into six dimensions - ABC for consumption value, XYZ for consumption consistency, EFG for lead time, UVW for price, LMN for volume or size and life cycle class. Once the segmentation / classification is done, you hit a button and the class is saved in every material.




What a materials planner can do now, is to pick all the materials in one class and give it a fitting policy - to all of them at once. You can do that manually by filling in the according fields in MRP1 to MRP4, the work scheduling screen and the forecasting screen, or you save the policy in the provided table and let the system do the work. Following you can see the table with pre-configured policies that the MRP Monitor uses to update entire groups of materials


Now, you'll have to go slow with this type of mass update and make sure you understand everything that's happening here. In my engagements I sometimes suggest to break down the portfolio into three buckets:

- XX3 where you can put all materials with no consumption over the past 12 months - I then update these with the policy "PD with no safety stock" so that we don't hold inventory on any of them

- then there is bucket 2 - XX2 - in which all active items remain. You can the run the MRP Monitor and pick a class for which you know the policy. as an example pick all C (low risk), X (high consistency in the past) and E (short lead times) and provide all of them with the policy "V2 (auto reorder), FX (fixed lot size), forecast data (for reorder and saftey stock calculation) and MRP Controller XX1". That will update all these materials with a fitting policy and puts all of them into the bucket XX1

- now you can update the policy for the XX1 bucket automatically by saving previously mentioned "V2" policy in the table. as long as the criteria remains the same - C,X, E - we can calmy watch how the automatic policy update does its magic.


This way you can gradually move from manual activity (without the MRP Monitor), to focused analysis and  manual policy updates for groups (in bucket XX2) to fully automated and effective materials planning in bucket XX1.

In this blog I am going to share the invoice tolerance limits learning and understanding which would help to understand  invoice blocking techniques and provide a base to apply in real time situations depending on the client's need.


This document will help consultant who is going to implement Open Text Vendor Invoice Management (VIM)


In the Procure to Pay(P2P) life cycle procurement part ends when Account Payable(AP) processor/Invoice clerk posts the vendor invoice in SAP using MIRO transaction which is also called Logistics Invoice Verification(LIV). It is tedious job for invoice clerk manually to verify each and every invoice line item is conforming to agreed price or quantity in PO. SAP provides systemic way of verifying this kind of discrepancies and block the invoice for payment using the 2 digit key called "Tolerance key".

Lower & upper tolerance limits for all possible discrepancies can be maintained in tolerance key. I would try to explain all the invoice tolerance keys in this blog with possible examples.

There are 2 kinds of invoice matching in SAP which are controlled by tolerance keys.

  • 3 way match:

Invoice line item is checked against corresponding purchase order and good receipt documents item for price & quantity matching


  • 2 way match:

Invoice is checked against only to PO price/qty if there is no goods receipt planned


Let us understand the how the automatic block is working via tolerance keys. In SAP we have many tolerance keys, I am going to discuss only below keys in this part AN,AP,BD,BR,BW,DQ,DW.

Tolerance Limits:

    • SAP tolerance limits work only for MIRO transaction
    • Invoice posted in FB60 is not subject to tolerance keys limit check
    • Tax amount is not included during tolerance check
    • It is stored in table T169G


Invoice blocking ways:

In SAP vendor invoice can be blocked for payment by anyone of the following way.

  1. Automatic block:

Only if there is a discrepancy due to price or quantity or date variance in an invoice.
If the item amount is exceeded from the limit maintained in the tolerance key.

   2.Manual block:

Invoice processor could manually block an invoice either at item level or header level

   3.Blocking through payment term:

Invoice can be blocked always with a particular payment term even if there is no variance

   4.Stochastic blocking:

Random blocking of invoices without any variance

   5.Blocking at vendor master level:

Invoice can be blocked always for a particular vendor if specific blocking key is maintained at vendor master level

Blocking indicators:

       Blocking indicators are available both at header and item level of invoice document. System set this indicator in the document wherever and whenever it is appropriate.

Header level:

Table: RBKP_BLOCKED                      Field: MRM_ZLSPR

Possible values:


Automatically blocked due to existence of blocking reasons


Stochastically blocked


Manual payment block set in header - no blocking reasons


Automatically blocked due to entry via Web Invoice


Item level:

Table: RSEG                                                  Value = X



Blocking reason price


Blocking reason quantity


Blocking reason date


Blocking reason OPQ


Blocking reason Project


Manual blocking reason


Blocking reason amount


Blocking reason: Quality



1.AN – Amount for an item without order reference


“System checks every line item in an invoice with no order reference against the absolute upper limit defined.”

Without order reference means direct posting to G/L or Material.


System behavior:

If only the invoice line item is greater than absolute upper limit the invoice would be blocked.

Let us understand with below example.


It updates RBKP table without a header Block – R. But updates table RBKP_BLOCKED with payment block – ‘A’.

No entries in RSEG table as it is directly posted to G/L or Material


Tolerance Key




Auto release


No blocking indicator update(ZLSPR)

A-     Auto block

No update

(item amount block)

Not possible


2.AP – Amount for an item with order reference


“System checks every line item in an invoice with order reference against the absolute upper limit defined.”


  • Item amount check must be activated at company code level – OMRH
  • Item amount check must allowed for item category and GR indicator - OMRI

System behavior:

Let us understand with below example


No blocking indicator at header table RBKP but RBKP_BLOCKED table has blocking indicator ‘A’.

Blocking indicator RSEG- SPGRS (Blocking reason item amount) is set at item level.

Item amount block must be released manually. There is no automatic release possible even if we perform any one of the following activities

  • Post subsequent credit
  • Adjust AP tolerance limit


Tolerance Key




Auto release


No blocking indicator update(ZLSPR)

A-Auto block


(item amount block)

Not possible


3.BD – Form small differences automatically


“The system checks the balance of the invoice against the absolute upper limit defined. If the upper limit is not exceeded, the system automatically creates a posting line called Expense/Income from Small Differences, making the balance zero and allowing the system to post the document”


System behavior:

Let us understand with below example

Small difference within tolerance limit:

As per the PO reference the invoice amount is 1000 USD.

But vendor actual invoice copy has amount of 1002 USD.

AP invoice processor enters the invoice amount as per the vendor’s invoice copy which is 2 USD higher than PO price.


Since small difference is within the tolerance limit, invoice would be posted without block. Small difference amount would be debited to small difference G/L account maintained for the transaction event key DIF in OBYC.

               Same rule is applied in the lower side as well

Small difference above the tolerance limit:

PO price: 1000 USD

Vendor invoice amount: 1003 USD


If the small difference above the tolerance limit then system would not allow to post the invoice with hard error “ Balance is not zero”. Still AP invoice processor could able to post invoice via menu bar option Edit -> Accept and Post provided if he/she has authorization object M_RECH_AKZ allowed.


If we post with above option then system would behave as below.

  • Invoice will be posted without block
  • Small difference G/L account (DIF) get posted
  • RBKP – MAKZN (net amount accepted manually) field will get updated with small diff. amount : 3.00



Tolerance Key





Auto release


Within range

No blocking indicator update(ZLSPR)

No update

No blocking reason update




No blocking indicator update(ZLSPR)

MAKZN field updated with diff. amount

No update

No blocking reason update



4.BR: Percentage OPUn variance (IR before GR)


The system calculates the percentage variance using below formula and compares the variance with the upper and lower percentage tolerance limits.


Pre-requisite to simulate this scenario:

  1. No GR based IV
  2. Variable order unit is activated at material level
  3. Maintain tolerance key DW with “Do not check” active




Material master:



‘CRT’ is maintained as order unit

‘EA’ is maintained as order price unit in info record 1 EA = 100 USD

PO Details:

PO has been created with CRT as Order unit and EA as Order price unit

Po quantity: 2 CRT = 24 EA

Invoice details:

Invoice is simulated before GR as below

Scenario 1:

Order unit quantity – 2 CRT

Order price unit quantity – 22 EA and amount 2200 USD

Observation: There is no warning message on the variance.

Let us use the above formula to find the variance percentage.


Difference is 100 – 91.6 = 8.9 % which is within the BR tolerance limit 10% maintained

Scenario 2:

Order unit quantity – 2 CRT

Order price unit quantity – 21 EA and amount 2100 USD


Observation: There is a warning message as below.


Let us use the above formula to find the variance percentage.


Difference is 100 – 87.5 = 12.5 % which is more than the BR tolerance lower limit 10%. Hence we are seeing the above warning message which will block the invoice for payment.


Tolerance Key




Auto release


No blocking indicator update(ZLSPR)

A- Auto block


(item amount block)

Not possible

5.BW: Percentage OPUn variance (GR before IR)


“The system calculates the percentage variance using below formula and compares the variance with the upper and lower percentage tolerance limits.


Let us understand with same master data

PO Details:

PO quantity in order unit – 2 CRT

Po quantity in order price unit – 24 EA


GR Details:

GR quantity in order unit – 2 CRT

GR quantity in order price unit – 22 EA


IR Details:

Scenario 1:

IR quantity in order unit – 2 CRT

IR quantity in order price unit – 20 EA

Observation: There is no warning message on the variance.


Variance % = (20/2) / (22/2) *100

                     = 90.9%

Difference is 100 – 90.9 = 9.1 % which is within the BR tolerance limit 10% maintained

Scenario 2:

IR quantity in order unit – 2 CRT

IR quantity in order price unit – 19 EA

Observation: There is a warning message as below


Variance % = (19/2) / (22/2) *100

                     = 86.4%

Difference is 100 – 86.4 = 13.6 % which is more than the BR tolerance limit 10% and invoice posted with payment block.


Tolerance Key




Auto release


No blocking indicator update(ZLSPR)

A- Auto block


(item amount block)

Not possible


6.DQ: Exceed amount: quantity variance

This tolerance key has both absolute and percentage limits.


If a goods receipt has been defined for an order item and a goods receipt has already been posted, the system multiplies the net order price by (quantity invoiced - (total quantity delivered - total quantity invoiced)).


If no goods receipt has been defined, the system multiplies the net order price by (quantity invoiced - (quantity ordered - total quantity invoiced)).


System behavior:

Absolute limits:

Let us see the system behavior if only absolute values are maintained and percentage limits are marked as “Do not check”.


Upper limit: 100.00                                                       Lower limit: 100.00


Test data :- (GR has been defined)

PO quantity = 100 EA

PO price      = 100 USD

GR quantity = 50 EA

      a) System behavior when invoice quantity is 51

Variance   = PO price x   (quantity invoiced - (total quantity delivered - total quantity invoiced))

                 = 100 * (51 – (50-0))

                 = 100 * (1)

                 = 100

Variance 100 is equal to upper limit 100 and there will not be any warning message.


      b) System behavior when invoice quantity is 52 

Variance = PO price x   (quantity invoiced - (total quantity delivered - total quantity invoiced))

                 = 100 * (52 – (50-0))

                 = 100 * (2)

                 = 200

Variance 200 is more than upper limit 100 and there will be a warning message as below.



When we post invoice with above variance it will get blocked for payment.


It updates tables as below

Tolerance Key




Auto release


No blocking indicator update (ZLSPR)

A- Auto block


(Quantity block )



Automatic release possible if the blocking reason RSEG- SPGRM is deleted when we post GRN for the balance quantity or credit memo for the excess invoiced quantity.

Same rules apply on the lower side as well

Test data :- (GR has not been defined)

PO quantity = 100 EA

PO price      = 100 USD

GR not possible

     a)System behavior when invoice quantity is 51

     Variance = PO price x   (quantity invoiced - (total quantity ordered - total quantity invoiced))

                 = 100 * (51 – (50-0))

                 = 100 * (1)

                  = 100

     Variance 100 is equal to upper limit 100 and there will not be any warning message.


     b)System behavior when invoice quantity is 52

     Variance = PO price x   (quantity invoiced - (total quantity ordered - total quantity invoiced))

                 = 100 * (52 – (50-0))

                 = 100 * (2)

                 = 200

     Variance 200 is more than upper limit 100 and there will be a warning message as below. Invoice will be blocked for payment and same tables will be updated as above.


Percentage limits:

“We can also configure percentage limits for the quantity variance check. In this case, the system calculates the percentage variance from the expected quantity, irrespective of the order price, and compares the outcome with the percentage limits configured.”


Let us see the system behavior with same example if only percentage limits are maintained and absolute values are marked as “Do not check”.


Upper % limit: 10.00                                                     Lower % limit: 10.00


Test data :- (GR has been defined)

PO quantity = 100 EA

PO price = 100 USD

GR quantity = 50 EA

     a)System behavior when invoice quantity is 55

     Variance = (quantity invoiced - total quantity delivered)/ (quantity expected)*100 %

                 = (55-50)/50 * 100 %

                 = (5/50)*100 %

                  = 10 %

     Variance 10% is equal to upper limit 10 % and there will not be any warning message.


     b)System behavior when invoice quantity is 56

     Variance = (quantity invoiced - total quantity delivered)/ (quantity expected)*100 %

                    = (56-50)/50 * 100 %

                    = (6/50)*100 %

                    = 12 %

     Variance 12% is more than upper limit 10% and there will be a warning message as below. Invoice will be blocked for payment and same tables will be updated as above.



Both Variances active:

If both absolute & percentage variance are active the system would block which ever tolerance is first breached.

Quantity check for Delivery cost:

The system also carries out a quantity variance check for planned delivery costs when we post only planned delivery cost.

Tolerance key not maintained:

If the tolerance key DQ is not maintained for a company code when we perform the same transactions discussed earlier, system considers this as zero tolerance and block the invoice for the payment for any deviation.


7.DW: Quantity variance when GR quantity = zero


If a goods receipt is defined for an order item but none has as yet been posted, the system multiplies the net order price by (quantity invoiced + total quantity invoiced so far).

The system then compares the outcome with the absolute upper tolerance limit defined.

System behavior:

This tolerance key works only for PO based invoice verification because GR based invoice verification will not allow IR without GR.

DW absolute upper limit as 100:

PO quantity = 100 EA

PO price       = 10 USD

No GRN posted

     a)If the IR quantity is 10 then system calculates variance as below

     Variance = Net order price * (quantity invoiced + total quantity invoiced so far)

                    = 10 *(10+0) = 100

     This value is equal to DW limit hence there is no warning message and system will not block the invoice.

     b)If the IR quantity is 11 then system calculates variance as below and block the invoice.

     Variance = 10 *(11+0) = 110


This value is more than DW tolerance absolute upper limit hence invoice got blocked.

It updates tables as below

Tolerance Key




Auto release


No blocking indicator update (ZLSPR)

A- Auto block


(Quantity block )


Automatic release possible if the blocking reason RSEG- SPGRM is deleted when we post GRN for the balance quantity or credit memo for the excess invoiced quantity

DW absolute upper limit as “Do not check”:

PO quantity = 100 EA

PO price       = 10 USD

No GRN posted

If the IR quantity is 112 then also system would not block even though this is beyond the DQ tolerance since it has been maintained as “Do not check” and there is no GR has been done.


“One should be very careful to use this option as this would by-pass quantity variance DQ block if there is no GR posted where GR has been planned”


DW tolerance key is not maintained:

If this key is not maintained for a company code it would always blocks the invoice for PO based invoice verification when there is no GR has been posted.



* SAP IMG documentation

Hello SAP Practitioners,

Greetings for the day,


In my last project I've encountered an issue and I've noticed that many people are still finding difficulty in getting the exact answer for their question in SCN and Google as well. As I've identified the cause for the issue, thought of creating this document by intending it would help them to understand their issue and resolve the same.


Summary of the Issue:

When I click on print preview button for a particular purchase order, the currency format was displaying incorrectly but the other purchase orders were displaying accurately, as it is displayed in change/display mode of purchase order screen.


Example: For the purchase order 4500002417 I've entered amount as USD 1,000,000.00 and when I click on print preview it has displayed the same as in the purchase order change/display screen. But for the other purchase order 4500002416, I've entered amount as QAR 1,000,000.00 but when I click on print preview, it has displayed as 1.000.000,00. I wonder how come it is displaying differently from the change/display screen of the same purchase order! Decimal was getting separated by a ‘Comma’ (,) Instead of a ‘Dot’ (.).


Please find the below screen shots for your better understanding.

PO 4500002417.JPGPO 4500002416.JPG

From the functional point of view I've analyzed a lot to identify the cause for the issue but couldn't succeed. Then I went Google's help but I didn't get a clear answer as I was seeing many responses were talking about only 'Decimal Format Settings @ User Profile' - SU3. Finally I took an ABAPer help to fix the issue as I did not find the right answer in Google.


Settings for Decimal Format in ‘User Profile’ (SU3): Before moving further I would like to make you clear that, decimal format which we are maintaining in ‘User Profilewouldn't be having any impact on purchase order print preview, instead It would be having impact on only purchase order creation/change/display screen, so for the above issue, no need of checking the user profile-decimal format.



Cause for the Issue:

When I found the cause for the issue I came to know that, the actual system behavior is correct. You might ask me how the system is behaving correctly, when it is showing the decimals wrongly? The answer is, the currency format in the 'PO Print Preview' is derived with the combination of 'Vendor' & 'Vendor Country'. Few countries are separating decimals with comma (,) and few are with period/dot (.).

Example: If we are raising a purchase order to a British Vendor, usually he reads his PO value in his local currency, so system would check the vendor & his country and based on that it would display the currency format in the print preview. As shown in the below table, the currency format for British vendor would be displayed like 1,234,567,890.00.


As per the above purchase order 4500002416, we are sending the PO to a German vendor, so his currency format is different than the other PO 4500002416, hence it is showing as 1.000.000,00 instead 1,000,000.00.


Note: Not all the countries in world are using the same decimal format, different countries officially designate different symbols for the decimal mark. Please see the below table as an example, how the decimal notations are different between the countries.


Excel 2.jpg.png

Please go through the below link to know more about the 'Decimal Notation'.

Decimal mark - Wikipedia, the free encyclopedia


Where can I see/maintain the currency format for the respective countries?

The standard SAP practice is, while implementing SAP, Finance Team and Business Team will have a discussion on maintaining the currency format for each countries. As it is having major impact on all the financial transaction, they will take a call at the time of implementation itself. Changing the currency format at the later stage is not advisable.


You can see the settings in OY01 as shown in the below screen shot.


How this functionality works only for the 'PO Print Preview' not for the 'PO Create/Change/Display Screen'?

As per the standard SAP, the purchase order forms contains a function called ‘Set Country’. This function will check the purchase order vendor and country of the vendor, then it goes to the table T005X (Countries – Decimal point and date format (SET COUNTRY)) --> pass the country name and gets the currency format for the country and updates the same in purchase order print preview.


This functionality works at the smart form program level not at the purchase order create/change/display program level, so we will not be facing any 'Decimal Notation' issue in the purchase order screen. PO screen works as we set the decimal notation in the user profile.



How to check whether my PO form has this function?

You can go to NACE settings find the smart form name--> and then go to smart form - Initialization tab--> search for term 'set country', if you find an entry as shown below, that means your PO form is calling this function and your decimal notation works based on this logic.

Smart Form 1.jpg


Clarified the cause of the issue to the business team and advised them to not to make any changes to the function as it working fine as per the standard practice. But based on the business requirement we have given them one more output type 'ZNEU', so that whenever they want to have a print with  country specific currency format they can use 'NEU' output type and whenever they want as per the normal currency format they can use 'ZNEU' output type.


In order to fulfill the customer requirement, we have created a new Z smart form, created 'ZNEU' output type and assigned the standard PO print program & Z-Smart Form in NACE settings--> and then maintained 'Output-Condition Record for Purchase Order' in MN04. Now whenever he clicks on print preview, he will get two output types, so that he can select whatever he wants.


Hope, I've clearly explained you the scenario to the best of my knowledge. Do let me know, if anything is not clear for u, so that I can explain in detail.


Thank you so much for reading the blog.



Narayana N

As we are optimizing SAP supply chains sustainably, all over the globe and also distribute the SAP Add-On Tools (by SAP Germany), bigbyte ( supports a wide portfolio of SAP-using manufacturing companies in the US, Europe and Asia.


Some of those companies use the Add-On Tools and some do not - at least not yet.      Man!... what a difference. Not that I want an easy play, but with the Tool-using companies we'll achieve better results in half the time. These tools simply near-perfect the SAP-ERP system (there are tools for APO too) and automate the work.


As an example... when optimizing your replenishment strategies, you have to analyze and classify your material portfolio into materials by consumption value, consumption consistency or predictability, lead times and life cycle (is the material new, obsolete, slow mover or regular) and then set up the master data (the four MRP screens) accordingly. PD for expensive, unpredictable and spotty items, consumption based strategies for predictables, reorder procedures for items you want to keep in stock, lot size procedures that go with the strategy and safety stock strategies.


If you work without the SAP Add-On Tools the process goes like this: Build a list of materials with high optimization potential using transactions MC.9, MC42, MC49, MC48, MC50, MD07, MCBA and much more... then analyze each individual material using historic, outdated graphics, LIS transactions, dual classification, slow mover reports, dead stock reports, MD04 timeline, table MVER and an XYZ analysis in Excel (all of this will take you about 4 hours per material). Then maintain the materials MRP 1 through 4 screens to the best of your knowledge.... repeat for each material... repeat for each material EVERY MONTH !! (things change, right?)


Using the MRP Monitor, you start the analysis for the entire Plant and the monitor classifies and performs a segmentation immediately into six dimensions - ABC for consumption value, XYZ for consumption history with a coefficient of variation, EFG for lead time, UVW for price, LMN for size or volume and Life Cycle. That is your analysis right there. In the Monitor result your portfolio is segmented into these 6 dimensions or classes and you will now select any given class and assign a pre-defined policy (the program reads the policy for the items marked as A,X,E and V and updates all material master with the respective MRP Type, Lot Size procedure, min maxes, safety stock settings, strategy group, consumption strategy and availability checking rule. And it does so every months.


Have a look at the MRP Monitor and the other SAP Add-On Tools... it certainly will be worth your while before you engage in a one-time, six month, loosely defined inventory optimization project.

In upgrade and transformation projects we are required to bring the legacy data in new system. This legacy data can broadly be classified into following:

  • Master data e.g. master data can be Material master, Vendor master, Source list, Purchase info record, Contracts etc.
  • Transaction data e.g. Reservation, Purchase Requisition, Purchase Order, Invoice


Master data serves as a base for executing the transactions hence is required to be brought in the system before transaction data. Master data is mostly retained As-Is (unchanged) in the new system, one of the main reasons for this is familiarity of the users with master data.


Transaction data might be needed to be brought in the new system because of its open quantity, in the legacy system, which is to be settled in the new system. Open quantity refers to the quantity for which a follow-on document is not posted in the system. E.g. If a Purchase Order is created is created for 10 qty and Goods receipt is done for 5 qty then Purchase Order is Open for posting Goods receipt of 5 qty.


Purchase Requisitions are internal documents for a client and are mainly used for putting forward a particular person’s/department’s requirements to purchasing department. This Purchase Requisition can further be used as reference for a RFQ, PO, etc. In order to do a PO conversion, it might be required the Purchase Requisitions referenced in the POs to be created first. Hence while considering conversion of transaction data in purchasing we often consider Purchase Requisition as one of the transaction data to be brought into new system.


Here we will be mainly talking about how we can bring Purchase Requisitions from legacy system to new system, inclusion/exclusion criteria, dependencies, important considerations, related assumptions, challenges involved.

Inclusion and Exclusion criteria:

  • Inclusion criteria can be defined as parameters on which Purchase Requisitions will be considered for conversion. E.g. Purchase requisitions of only document type NB to be considered for load. Another example of inclusion criteria can be only completely released purchase requisitions created in last one year to be considered for conversion. There can be as many inclusion criteria as per Client’s requirement.
  • Exclusion criteria can be defined as parameters on which Purchase Requisitions will not be considered for conversion. E.g. Deleted line items of the Purchase requisitions will not be considered for load. Another example of exclusion criteria can purchase requisitions created for a particular plant will not be considered for conversion. There can be as many exclusion criteria as per Client’s requirement.



  • All required configurations related to Purchase Requisition is in place before the data is loaded
  • Material Master, Service Master, Vendor master must be created and uploaded
  • Purchase Info record, Contracts, Unit of Measure, Purchase Group
  • Material Group assignment to G/L accounts
  • Account assignment data as G/L accounts, cost centers, WBS elements need to be created and uploaded


Important Considerations:

  • Method of extracting, cleansing and loading the data needs to be defined beforehand.
  • Preceding documents of Purchase requisitions are created in the system. Preceding document can be a Plant maintenance work order, planned order or internal order.
  • Contracts referred in the legacy Purchase Requisitions must be released.
  • Release Strategy and Release status of the considered Purchase Requisitions.
  • Workflow related to Purchase Requisitions should be setup but should not be activated. If the workflow is activated, releasing the Purchase Requisitions collectively can lead to trigger of large number of workflows which can hamper system performance and can affect other update tasks.
  • Error log generation format and analysis.



  • Numbering for Converted Purchase Requisitions will not change.
  • External numbering will be used during the conversion period only. Document numbering will be switched to internal numbering once the conversion is complete.
  • Data Cleansing in Legacy SAP is required before the data is ready to be migrated to SAP
  • Purchase Requisitions can have multiple line items

  •     Month end process must be run before conversion.

  • Any input file fields that are not used as input into the creation API/TCODEs will be ignored.


Challenges involved:

  • Accurate validation of Extracted, Cleansed and Loaded data.

Dear All,


Recently we have done an External Service Management process for contract employees in integration with HCM module. This involves some development also, to automate the process. After successfully implementing the process, I just thought of sharing the experience with all my SCN colleagues, thinking that this may throw some lights on your similar kind of requirements.



My customer hires various services (like SAP Consulting) from different service providers (like IT companies). The contract employees (like consultants) are supposed to enter the time and the service provider will be paid based on the hours worked by the employees. The requirement is to automate the process and map this in SAP.



HCM module has been already implemented. A custom info type (9001) exist exclusively for contract employees which contains details like Service provider, contract terms etc.



The process starts with creation of Purchase requisition by user department.


To identify the employee, we have added the field PERNR (Personnel Number) in customizing,

Materials Management --> External Services Management --> Define Screen Layout



Now, the field Personnel number will appear in the PR and PO.



Purchasing department will create purchase order to the service provider.


In the custom info type for contract employees, a new field PO Number and PO Item is added. A program is developed to fetch all the Service PO created on that day and scheduled it in background to run every night. Also, the program picks the PERNR from ESLH and ESLL tables and for that PERNR, it updates the custom info type table (PA9001) with this PO number and item.


Now the contract employee fills his working hours in CATS time sheet. Once the time sheet is approved, a scheduled job will fetch the personnel number from time sheet. From the info type table, the program will fetch the PO number and item and create a Service Entry Sheet, using the BAPI BAPI_ENTRYSHEET_CREATE.


A subsequent job for standard transaction ML85 (Program RMSRVF00) releases the Service entry.


Once the service entry sheet and material document is posted Finance department can do invoice verification ate month end for the accepted quantity and pay the vendor. We are planning to automate the invoice verification also, once the process gets stabilized.


This is just my experience in addressing the said requirement. Expecting your valuable feedback and suggestions. Also request you to share your experiences in addressing similar requirements, if any.




Once you set your supply chain policy, you will have to fine tune your master data setup so that it drives good service levels with low inventories. The SAP Add-On Tool "Safety Stock and Reorder Point Simulator' lets you perform an optimization and update material master records collectively


Video: Safety Stock and Reorder Level Simulation

watch a video on how to use the SAP Add-On Tool 'Inventory Controlling Cockpit' for analysis and optimization


This blog is an attempt to share the individual 'understandings' and 'expectations' related to the emerging trends in SAP Forecasting/Supply Optimization vis-a-vis Demand Sensing and Inventory & Service Level Optimization currently projected with SAP’s takeover of Smartops.


Understandings as above relate to outcome based on the work experience in the core ERP system (MM/PP modules)  and

Expectations translate to whether the ways of working will change because of the new developments and lead to additional learning.


    For quite some time we have been hearing about the takeover of Smartops and there would have been people interested to know if it had got anything in store for them. The merger formalities seem to be complete and post merger it has become SAP-EIS (Enterprise and Inventory Service Level Optimization). A team is set to deliver what is called as the Enterprise Demand Sensing (EDS) and Multi-Stage Inventory and Service Level Optimization.


a. Enterprise Demand Sensing: (Positioned as a Cloud-based Analytics solution).

   Traditional forecasting techniques using time series methods predominantly which always have the risk of poor prediction tag leading to lost opportunity.

Loads of sales/consumption history data across years provides forecast results usually on a long term horizon of say a year atleast and when they start creeping in towards the short term because of these sudden changes order execution at the short term level gets tougher and tougher.

More CPG/Retail companies like P&G, Unilever, Kraft/Mondelez to name a few have gone for what is called as demand sensing techniques using predictive analysis/intelligence techniques to make much better forecasting and quickly adapting to the market changes. Companies in other industries/ areas are also seen to catch up this aspect.

    To-the-minute/ current realities of supply chain are considered with an ability to respond to sudden demand spikes/real time demand because of say an instant promotion activity in a networking site for instance or a natural disaster is what is attributed as the USP about this demand sensing. Intelligence to be provided should come via the SAP Demand Signal Management (DSiM) to process the data in a HANA backed environment. Guesstimates say improvements in forecasting accuracy should be seen in limits of 30% northwards.

Take a look at the clipping made available in

The video clearly mentions that this software has the option of integrating with an ERP as well as APO-Demand Planning application.

As a layman with limited understanding of new developments and belief that forecasting is what we use as V* MRP types using a host of forecast models in ERP the question is whether the forecasting algorithms would undergo any changes in the future in the ERP system. If the understanding is right and again if that happens would that be as a Core-ERP offering or would be for something for IS-Retail scenarios only as it is mostly the CPG/Retail customers that are the prime targets?


b. Enterprise Inventory and Service Level Optimization: (Positioned in the SCM suite as an Integrated S&OP offering again within the Supply Planning space)

    At the very first instance hearing about the name Enterprise /Multi-stage/Multi-Echelon Inventory and Service Level Optimization itself was very ambiguous tasting like a bitter gourd forget about the association part. Some one prunes it Service level optimization in discussions and there is a sincere belief that the term had been heard definitely before. Some more tries to associate the relation and the material master MRP view specifying the Service level field flashes across. Bit of reading here and there then brings us closer to the association part.

   What we actually try to do with these service levels in ERP Forecasting is to fix up a percentage based on defined KPIs/criteria. We come across terms like  a 'normal distribution' usage to take into account probabilities etc to meet optimized service levels. Finally things start falling in place and we understand that what we are trying to achieve as optimization the service levels is at a single location/ single-stage namely the manufacturing plant. This is called 'Single-Stage Optimization' and this is what we on a maximum work in the core-ERP side.

   In any Supply chain, viewed from the point of view of a plant we see two things:

  1. 1.Upstream view--> Represents all partners above the plant and supplying raw materials/components pushing out raw material inventory. Covers the procurement network and called 'Tiers'. Multiple layers then become 'Multi-tiers'.
  2. 2.Downstream view--> All partners downstream of the plant involved with fulfilment aspects with FG inventory. Covers the distribution network and termed 'Echelons' with multiple levels becoming 'Multi-Echelons'.

(Side note being what is in Plant or the centre point is the manufacturing network covering WIP/In-transit Inventory).

Fulfilment (Customer is King) forces Echelons to take priority over other two letting us know why it is named 'Multi-Echelon/Multi-stage Inventory and Service Level Optimization'.

   Any Supply Chain experiences pains/issues in one form or another and they get consolidated at the very high level as 'complexity' issues and 'variability' issues.  Again 'variability' breaks up into 'demand' variability' and 'supply variability'.

   Looking at the earlier SCM SNP space and with the offerings provided earlier the 'Supply variability' was definitely a pain point and with the new offering, SAP is set to address the issue with the new setup/merger. Handling supply variability and optimizing is expected to be the USP here. And you can see that Demand sensing is fitted in to handle the Complexity issue part.


In parallel during these 'inferring' days, on the SCN site we started to see a host of materials being uploaded and made available in this same forum.

Has real good materials set to explain Safety Stock Fundamentals and Stochastics, Cycle and Pipeline Stock: The Deterministic View etc., and what Smartops does differently there. Read and get benefited.


In the materials you can see a mention about usage of 'Gamma distribution' compared to the traditional 'Normal Distribution' methods we know of in our ERP system today and the advantages etc., making us to think again if any new changes will come over. With the SCM SNP space opening up to inventory modeling and optimization there seem to be more opportunities for specialists concerned with the appropriate and new skills in this space.


Will utilise this blog to look for relevant additions/corrections from experts working in the Forecast related space with forecasting models/time series data/Inventory Modeling techniques in Supply Chain and share their thoughts. Also useful would be pointers to other targets/forums who might be able to help further.

May be premature days to expect still but any information provided will be useful to understand things better and share it back in the forums for general benefit of all.

Thanks for your precious time now for reading and also for your future time to write back.





Filter Blog

By author:
By date:
By tag: