23 Comments for this entry

  • Stan Gosselin

    We are an AX2009 shop. We do not use Master Planning. What is the safest way to clean up InventSumLogTTS?

    • denisfed

      Hello Stan
      First of all – you can simply disable configuration key Master planing and solve the problem once and for all. (If this key is disabled, logistic module does not insert new records into the table).
      If you cannot disable master planning module, you can clean-up this table by call to inventSumLogTTS::deleteCommittedItemId(”).


  • Jeff Powell

    Hi Denis, great job on this article. I’m not a developer and am just learning AX but there is so much great information here. I’m working on an implementation and a practical question was asked: “What is the difference, operationally, between running Net Requirements on a sales line and Explosion?” That is, when should we run one or the other? Can you offer some guidance on this? Thanks very much.

    • denisfed

      Hello Jeff
      Sorry for the delay – somehow wordpress eat-up notification of your comment. Explosion and MRP for one item in Net Change mode are very close by the way they operate. The biggest difference is that explosion can clear marking and reservation in the beginning of the process (thus clearing up coverage information used during subsequent MRP process) and explosion can rebuild reservations/marking from results of MRP (new or updated coverage information). Otherwise – they are almost similar.


  • Martijn

    Hi Dennis,

    Great article about MRP. I have one question about ERP. We are a company which automaticly receives sales orders from a website. This process is 24/7

    Now we want to run a MRP for a specific coverage group. We plan this for example on 20:00H. Problem is that de MRP never ends because every minute a new order arrived in AX2012 from the website.
    I tried to add a query on the MRP run(e.g. for the field creation date/time), but the MRP never looks in this query.

    Can you advise me for this problem in a functional way? We use AX2012.



    • denisfed

      Hello Martijn

      Honestly speaking, I do not think that insertion of new orders can make MRP to run indefinitely. In the beginning of planning session, system scans inventTrans table, creating all necessary net requirements. Even if your new order was created during this phase, MRP won’t see inventory transactions created from this new SO, because Dynamics AX use read committed mode for queries and generally is unable to see changes made by other session after start of the query. Then system start calculate coverage for the items in working set from least nested products (saleable products) to most nested products (material). If Axapta is working with dynamic plan, before calculating coverage for every item, system runs quick requirements update, transfering from inventory transactions to current plan all changes made after MRP was started and before coverage for the given item was initiated. So: If your order was created before 1st phase (requirements regeneration), then it will be processed during requirements regeneration. If it was created after requirements regeneration but before item coverage calculation for salesLine’s item – it will be processed during item coverage. if order is created after beginning of coverage calculation for given item – then this order will be completely ignored by MRP and won’t be processed till next MRP session.

      Probably, you are facing performance issues, caused by some other problem. During MRP run, try to look into two tables ReqCalcTaskBundle and ReqCalcTask. ReqCalcTaskBundle hold a list of similar tasks (this table contains status and kind of task), ReqCalcTask contains info about specific task. MRP helpers process a bundle of task at a time. Processed tasks are dropped from the table, while new bundles can be created as a result of processing. (Say – if coverage processing created new planned production orders, it creates also special task to run resource scheduling for this orders).
      Try to look into these tables and check what’s your MRP is doing and on what tasks (and items) it spend most of the time. Perhaps it will shine some light on the performance issues, you are facing…


  • Pandian

    Hi Denisfed,
    First of all many thanks for a very clear blog on MRP logics. I have been going through many blogs about MRP to understand the logics, of Static Plan and Dynamic plan, as well the actual functions of Regeneration and net change” in detail, and your blog answered almost all.

    I would like to have your opinion on the below Scenario:
    We are running Master planning “With Regeneration mode” every day, and we are into Project based manufacturing. so that the Planner goes into project item requirements > Inquiries > Explosion > Planned orders and firm them all. and please note the dates of each planned purchase order is manually entered by the planner.
    We are using “standard marking” during firming of all planned orders.

    There key requirement is that, for a particular Project, they want a list of Production orders, and purchase orders firmed , to follow up and get the materials in on time.

    But Many times, MRP keep changing the pegging, and allocate a production order/ Purchase order to different project, than the firmed one. because of these, they loosing track of purchase order follow up, and screws up the delivery of the whole project.

    I understand that system peggs to a different project, because of various reasons, and delivery date of the project could be one of the reason. but my question here is , when there is marking established during firming, still how it can allocate to a different project? then is it overwrites marking? or do I need to use extended marking instead of standard marking? (if you could me an example for the Difference of Standard marking and Extended marking” it would be really helpful).

    so what I should do , to keep the same pegging as it is? – this is what is my one line question?

    Running Net change would solve the problem?

    And the final question is that , does the Action message base date “Requirement date or Future date” is considered for “Decrease actions”. Because we have enabled only decrease action on action messages , whether this is having any implication on change of pegging?

    Please throw some lights. and many thanks in advance.

    Awaiting for your reply. Thanks again.


    • denisfed

      Hello Pandian
      Sorry for delay. First of all – MRP it totally project agnostic. It does not know anything about projects functionality and it plans it the same way as usual orders. Also, MRP itself certainly do not change coverage data created from marking information.
      When your managers update explosion, they check ‘delete reservation and marking’ checkbox, which simply leads to deletion of marking information. You can try to put some kind of logging code into inventTrans::deleteMarking() function and then check when it is called. (I once made something similar – I was logging into a new table calling user and call stack. It helped me to diagnose the problem).
      I do not think that changing planning mode from Regenration to Net Change can help. I am 95% sure that the root cause lays not in MRP itself, but in loss of marking during daily operations.

      Speaking about the difference between Standard and extended marking. In many cases, marking, in turn is mirrored into the order line. Say – in purchase line you have three fields – Reference Type, Reference Id and Reference Lot. They can point to production BOM Line or sales order line for which the purchase line is intended. In Standard marking mode these fields are set ONLY if marking is made for full quantity (like 20 pieces in purchase line and full 20 pieces are marked). In extended mode these fields are set even if marking is made for partial quantity. (Do not ask me what will happen if you mark inventTrans to several different inventTrans. Perhaps, it will set reference fields in source order to the last target inventory transactions)…
      I do not have too much experienc with Decrease action setting, you mentioned. I am only sure that firming is totally independent from the planning itself. Firming only takes planned order (or chain of planned orders in case of nested productions), and create orders for them. It does not check anything in actions messages.


  • Pandian

    Hi Denisfed,

    Many thanks again for the reply.

    I am now clear about the Standard and Extended Marking, and I have faced the similar issues of losing the reference at the production line level if the Marked Qty is different than the required qty. which i need to control through Extended marking henceforth.

    But now my main pain, is changing of the pegging. where I was believing that Net change would 90% solve the problem, as it won’t touch the demand itself once it is planned with the supplies, unless otherwise if some of the below is changed on the demand:
    1. Qty
    2. Inventory dimensions (Site,Warehouse)
    3. BOM amendments
    4. Delivery date of the demand

    hence there won’t be any problem once the orders are firmed and pegged to the project, and the project will not be planned again. please give your suggestion on this. I am sorry to ask the same question again and again, as I am really screwed up because of this.

    And for the Marking removal, we don’t update the explosion and we only view the explosion and then go to the Planned orders from there to firm them, hence there is no way that the marking is getting deleted in our scenario, and I am claiming that the regeneration is removing the marking which eventually leads to changing of pegging, depends on the delivery date, etc.. Please clarify this.

    Finally currently I am generating a material shortage report from Explosion > Critical on hand inventory and other details from explosion form. But this has to be done by each and every single line item > Explosion, which is really a time consuming job from the end user point of view.. Is there any way that I can customize this for multiple Project item requirements/Sales orders, and please provide your suggestion to customize the same, as our techies are finding it is nearly impossible, hence please throw some lights.

    Awaiting your reply. And many thanks again.

    if you don’t mind can i have your mobile number or Skype Id please, just to get some more clarifications on overall Master planning.


    • denisfed

      Hello Pandian
      Perhaps, Net Change minimized can solve your problems, but it can solve them at the cost: If your item has ‘Period’ coverage mode, then Net Change won’t group your requirements properly and you will have several planned orders instead of one.
      Speaking of your situation in general – I see two possibilities: 1. Something is removing your marking. Can you test the following scenario: Find out couple of messed up net requirements and check marking data of their inventory transactions. (Of course, I mean – net requirements from real orders, not planned ones).If these markings are messed up the same as net requirements, then we are dealing with completely different situation: It is not the MRP which is causing your problems, but some unknown functionality in logistics, which is re-wiring your markings. (And you will need to try to catch it…). 2. Another possibility is that your MRP is modified by some vertial solution or customized function. Normally MRP never ignores marking and it never deletes it. The only place in MRP module which actually can change something in inventory transactions is autofirming. (But I guess you do not use it).But even if you use auto-firming, it should not change existing markings, but only create marking for new orders.

      Speaking about explosion problem – I once created feature, which I call ‘static explosion’. It runs after normal MRP regeneration (and it takes about 20-30 mins to run for the plan with 300000 net requirements). After run it saves the table which lists all orders/planned orders, which are necessary to fulfill for given salesLine. Now in our sales table form we have a grid with the list of orders to complete for given salesLine and in our orders we have a grid with the list of sales lines, depending on the order’s execution. Of course, if you are updating explosion or running partial MRP during day time, this static explosion data become obsolete (and you usually do not want to run it after every plan update). Nevertheless, it still usefull, because for 99% of of orders, partial scheduling or explosion update does not change the situation significantly.


  • David


    This article is great! I’m still fairly new to AX so some of it is a little beyond me, but we’ve been having an issue with our MRP lately (2009 btw) so I’ve been trying to gain a better understand of what exactly its doing, but perhaps you could help?

    Basically we have been running static MRP regen every night for a long while now with little to no issues, but as of the other day, it suddenly takes a 1/3 of the time to finish, has no errors and basically seems like it just drops out. It doesn’t finish processing order lines…doing only ~2000 or so when it should be doing ~11000. Hence its only able to process a relative handful of items inventory.

    I found another person with a similar issue, but he had blank itemid in the inventtable, this however, we do not have.

    Any assistance would be appreciated! Thanks again!


    • denisfed

      Hello David
      If you are sure that you do not have any error messages, I can give you only one advise: Try to delete all saved data (sysLastValue table) for the user which runs nightly MRP. I saw (about 5-6 times), situation when after someone ran partial MRP (I mean – batch mode MRP for only several item/item groups/etc), saved query somehow stuck in saved data. When you run MRP in multi-threaded mode, system passes info between main thread and helper-threads in the saved data. Somehow, this mechanism breaks somehow and system keeps old data with saved PARTIAL MRP query and reuse it on every run. It ends up in miscommunication between main thread and helper threads. Usually it ends up with MRP executed only for part of the items.


  • Jack


    is there any way to set parameters or plan up, to schedule and reserve capacity on work center with finite material while MRP is running? When I run reschedule PO and mark finite materaials, results are OK.

  • David


    Thanks for your reply!

    We ended up figuring it out, we took a few steps so without further testing in our copied test environment, I am unsure exactly which worked.

    1- We did clear usage data from the account running the job, like you mentioned (I believe this to be a direct correlation with deleting that users rows from the SysLastValue table). We actually had done that much earlier in the troubleshooting process, and did not fix it…but did it again for good measure.

    2- Deleted unfinished scheduling processes

    3- And finally, ended up just recreated the nightly batch job and just changed the user it runs under…which would nullify #1s effect I suppose.

    I’m just glad to have it back to normal again! Appreciated!


  • Eddie

    Hi Denis – thanks for a great article. I hope you can help with an issue we have. We are running Ax 2012 R2 and also do a full (regeneration) MRP run every night through a batch job. The batch job return with some errors like:
    “Cannot delete a record in Net requirements (ReqTrans).
    An update conflict occurred due to another user process deleting the record or changing one or more fields in the record.”

    When I look at the log / session log, it seems that the MRP has run completely. However, on some items, when you want to look at the net requirements (either through the item or works orders) we receive the same error as above.

    My next step is to clear the usage data of the user that runs the job, clear the unfinished (error) process and re-create the batch job.

    Any other ideas? Mutch appreciated.

  • Eddie

    Hi Dennis, thanks for a great article. I hope that you can help me with an issue we have running MRP. We run a full regeneration every night in a batch job, but receive the following error message:
    “Cannot delete a record in Net requirements (ReqTrans). an update conflict occurred due to another user process deleting the record or changing one or more fields in the record.”

    Even, for some items, selecting the Nett requirements, we receive this error. We are running Ax 2012 R2 Cu6.

    Any help would be appreciated!

  • Tammy


    We are running Dynamics AX 2009. We also regen MRP every night. My question is with Min/Max. While looking at the MRP action items, it is telling me to move the demand out for the min/max to the very last demand found. How can we set it up so the Min/Max is shown as a demand today?


  • Juli Arenoso

    Hi Denis.
    Great article! There are so many things really hard to understand in MRP functionality and you give some light here 🙂 so now I have new doubts.
    We are using the same plan for static and dynamic mrp. We run the regen master plan every night and normally run explosion for every working order before releasing them. What are your thoughts about this?
    Thanks a lot!!

  • Arshad


    I am running MRP for the whole demand with Regeration, I run during the night.. my issues are that I don’t want to include the BOM Lines because for us BOM Lines are not yet a productive lines until it gets converted into Production Order. Second I want to stop the lines in the item requirements for sometime until we consolidate the requirement. For this purpose we have customized a field with the status “Draft”, once it is approved we change it to “For Procurement”. How to handle this? anyone can has any suggestion?

  • amigasger


    Thank you for a great blog.

    I have been investigating MRP today, because I have an odd problem with Ax 2012 R3. The problem is, that the MRP works fine as long as the sales orders aren’t posted. When I post the sales order to an invoice – then the sales-lines are not collected by the MRP-form and the SalesForecastQty is therefore not taking the Invoiced SalesLine into account when summing up the SalesForecastQty.

    It seems quite sophisticated to figure out how the source-data is transformed into ReqTrans. My goal is actually to find out how come these invoiced saleslines aren’t taken into account. I know that the data is fetched for invoices if I make a similar setup in 2012 RTM. I might have overlooked a setting. Do you have an idea, what I miss ?


  • Mike Gooding

    Hi Denisfed,

    A very informative blog. Thank you!
    I have a question for you.(AX2012 R2)
    We are seeing a strange issue when trying to firm planned production orders at one of our clients. Sometimes the error message states that “the item does not exist”, and others, that “the planned order does not exist”. It is impossible to replicate, in their Test environment, and Microsoft have not been much help. The client runs a Dynamic Plan and a Static Plan. Have you seen this elsewhere?


  • Arslan

    Hi Dennis,
    This was really helpful. I got another case, if you had any experience, I will apprreciate your comments.
    Here is the case:

    We’d like to run the planning and use planned messages only for material level. We have firmed production plan in Excel and want to explode to sub-assembly and materials as is (do not take on hand/transactions into consideration). But on material level we want to include on hand/open transactions.

    e.g. Plan the item X (Finished Good)as is, explode the item Z (Sub Assmebly) as is (do not include on hand/transactions), calculate requirements for items Y, Z1 and Z2 (Materials – include on hand/transactions).

    What is the best way to implement this? I have tried several ways (different master plan versions, firmed planned orders and rerun MRP, run MP once go change parameters and select only materials and run again,…) but it does not look OK.

    Any suggestions/experiences will be appreciated.


    • denisfed

      Hello Arslan
      1. Most obvious approach: If you import your production plan from excel as a bunch of production orders (not planned, real production orders), you can mark order lines to another orders. In this case, normal coverage planning will be skipped and coverage will be build from marking info. I am not sure whatever it is suitable for your task, but if you are trying to import plan from APS, it can work.
      2. You can modify method RecCalc.InsertItemInventSum(). In the very beginning it calls reqPlanData.useInventOnHands() to find whatever on-hand data should be imported. You can get itemId from Setup variable (it is an instance of ReqSetup class). Then you can somehow decide whatever you want or not to import on-hand for this specific item.
      3. You can create dummy inventory journal before planning and reserve all your on-hand for this journal. if you have reserved inventory transactions, their net requirements are covered (by default) by on-hand stock. This way you can prevent on-hand stock from being used to cover normal net requirements.

      I would prefer way 2, of course. It seems to be the easiest.


1 Trackback or Pingback for this entry

Leave a Reply