MRP (Material Requirements Planning) in APS is an automated process that compares the demand for materials and finished-goods versus the existing on-hand and planned supply and then creates Jobs and/or Purchase Orders to satisfy demands not being met.

In many production systems, there is an ERP system that is used to perform the MRP process.  In this situation, the MRP in APS is not used and instead the Jobs and Purchase Orders are imported from the external system.  These are some of the points to consider when deciding whether to perform MRP in APS instead of in an ERP sytem:

  • How well is the ERP system's MRP working for your business?  If the current process is working well then it's probably better to continue with it since converting to a new MRP process will require additional effort that may not be worth the time and cost.  If the current process does not work well then it makes much more sense to consider using APS to perform your MRP process.
  • Do the jobs and/or purchase orders that are created in APS need to be created in your ERP system too?  If they do then there are two options: (1) manually enter them based upon what APS suggests or (2) import them from APS.  Option (1) may be acceptable for small order volumes but probably too error prone and time consuming for large order volumes.  Option (2) is usually preferred since it reduces the time and error risk of manual entry.  However, some ERP systems do not have the ability to import this type of data.  Therefore it will be important to carefully assess this approach before deciding to use the MRP in APS.
  • Does the MRP process in APS offer benefits over the alternative ERP-based or manual processes?  Answering this question requires a clear understanding of how APS's MRP functions and what the MRP requirements are.  Reading the Key Concepts section below will help you understand the MRP process in APS.  Some of the common benefits of using APS's MRP are: (1) the simplicity of a "single-click" process that plans materials and resources in one cohesive system, (2) the speed at which APS can perform the MRP process, and (3) the plan that results from planning material and capacity together rather than first constructing an infinite-capacity mateiral plan in an ERP system and then planning finite capacity in APS.

Key Concepts

The MRP Process

MRP can optionally be included in the Optimize process.  When it is, this is an overview of the steps it includes:

  1. If generating Jobs, then all Jobs not marked as Preserved in the Optimize options are deleted.  If generating Purchase Orders then all Purchase To Stocks that are neither Firm nor Closed are deleted.
  2. MRP Notes (from the previous MRP run) are cleared from all Inventory records in all Warehouses.
  3. All scheduled Jobs have their Material Requirement Constraint Type set to Non-constraining. This is to allow them to remain where they are in the MRP process if their supplying Jobs or POs are deleted.
  4. If generating Jobs, Low Level Codes are calculated in the following way:
    1. Each Item has its LLC initialized to -1.
    2. A Level-zero list is created consisting of Items that have Templates and are not used as a Material for any other Template.  Each Item has its LLC set to zero.
    3. Each level-zero Item has its list of Materials scanned recursively setting the LLC of the Materials used by it and its Materials.  The LLC of each Item is increased if it's deeper in the Level-zero Item's BOM than in all previous level-zero Items analyzed so far.
    4. Any Item that still has its LLC set to -1 has its LLC set to one number higher than the highest LLC number.
  5. An intial Optimization is performed to create the starting point with the current demands and supplies that still exist.
  6. For each LLC from zero to the maximum number, the following occurs:
    1. Jobs are generated for Items at the current LLC.  This is done in the following manner for each Inventory that has its MRP Processing set to "Generate Jobs" and has a Template Manufacturing Order:
      1. The Inventory's MRP Notes are set to "MRP Processed as Manufacturerd/JobTemplate Item: <timestamp>".
      2. An Inventory Adjustment is a decrease or increase in projected inventory based on either a demand (Sales Order, Forecast, Job Material Requirement, or Transfer out) or a supply (Job Product, Purchase To Stock, or Transfer in). Negative Inventory Adjustments up to the MRP Cutoff Date are used.  All positive Inventory Adjustments are also used.
      3. Any on-hand inventory above the Safety Stock is allocated to negative Adjustments chronologically, from the earliest to the latest Adjustments.  Partial allocations also occur if there is not enough to fully cover a single Adjustment.
      4. Any unallocated positive Adjustments (that are not Safety Stock Jobs) are allocated to remaining negative Adjustments not covered already by on-hand inventory.  If a positive Adjustment is a Job Product and it's allocated to one or more negative Adjustments and it's not Released then the Job's Need Date is set to the date on which the first allocation occurs.  For example, if the first allocation is to a Sales Order then the Job's Need Date would be set to the Sales Order Line Distribution's Required date.
      5. If, after allocating on-hand inventory and existing posititve Adjustments and New/Unscheduled/Excluded/FailedToSchedule Jobs, there are negative Adjustments that have not been fully covered then a new Job is created for the first uncovered negative Adjustment in the following way:
        1. The Job's Need Date is set to one of the following depending upon what is being supplied: the Activity Scheduled Start Date, the Sales Order Distribution Required Date, the Forecast Shipment Required Date, or the Transfer Order Distribution Scheduled Ship Date. (The Job’s Need Date is not changed if its Commitment is Released or Firm.)
        2. The Job's Priority is set to the Priority of the Sales Order, Forecast or Job that it was created for.  If the Adjustment was for a Transfer Order then the Job's Priority is set to '5'.
        3. The Job's Classification is set to Order, Forecast, or Transfer Order if the Adjustment was one of these.
        4. The Job's Name and ExternalId are set to "MRP x" where x is the auto-incrementing numeric Id of the Job.
        5. The Job's Entry Method is set to MRP Generated.
        6. The Job's Template and Do Not Schedule flags are set to false.
        7. The Job's Commitment is set to Planned.
        8. If the Adjustment's remaining allocation qty happens to be less than 0.00005 then it is increased to that minimum allowed value.  Otherwise, the quantity of the first Manufacturing Order (the MO with the lowest Id which is based on its creation sequence) is set to the Adjustment's remaining allocation quantity.  The MO's quantity is adjusted in the following way:
          1. The MO Required and Requested quantities are set to the new quantity.
          2. A ratio of the new quantity to the MO Template Required Qty is calculated.
          3. For every Path in the MO, and for every Operation in each Path, the Products, Activities and Material Requirements are adjusted to the new quantity.  Rounding may occur here based on the Scenario Options precision settings.
        9. Operation Attributes are "rolled-up" into the Job recursively as needed based on each Item's setting for RollupAttributesToParent.
        10. For each Product of each Operation in the Job, the Warehouse is set to the Warehouse in which the source negative Adjustment is occuring.  Note that if the Item in a Product is not stocked in the Adjustment's Warehouse then it is not changed from the original Template value for the Warehouse.
      6. If an Item is setup for Batching (Batch Size > 0 and Batch Window >0 and Min Nbr Batches > 0 and Max Nbr Batches >= Min Nbr Batches) then the following logic is followed to batch together multiple negative Adjustments into one Job:
        1. Adjustments are batched for the Job chronologically as long as the following are true:
          1. The Adjustment datetime is in the "batch window" (new Job Need Date <= Adjustment datetime <New Job Need Date + Item.BatchWindow).
          2. The Job is under the Item's MaxBatchQty.
        2. A portion of an Adjustment can be batched into a Job (rather than the full Adjustment quantity) to stay within the Item's MaxBatchQty constraint.
        3. After all Adjustments that can fit in a batch are calculated then "batch rounding" occurs to round up the Job's quantity to an integer multiple of the Item's Batch Size.  Rounding notes are added to the Job.  Any rounded up quantity can then be used for further allocation.
        4. If the resulting number of batches is less than the Item's MinNbrBatches setting then the Job is prevented from scheduling by setting Job.DoNotSchedule=true.
      7. Notes are added to each Job to indicate the reasons for the Jobs being created.
      8. If the Inventory has a Safety Stock requirement greater than zero then the following steps are taken:
        1. If new Jobs were created then an Optimize occurs to create an updated inventory plan.
        2. A Safety Stock Job is created if the On-Hand inventory plus any excess scheduled production is less than the Safety Stock.
          1. The Job Need Date is set to the APS Clock.
          2. The Job Priority is set to the Inventory.SafetyStockJobPriority.
          3. The Job Classification is set to Safety Stock.
          4. Operation Attributes are rolled-up as described above in the normal Job creation process.
          5. Product Warehouses are set as described above in the normal Job creation process.
        3. Jobs are Auto-Split if the Item.JobAutoSplitQty is greater than the Job's first MO's Required Qty.  New MOs are created for the Job by splitting off MOs of JobAutoSplitQty until the JobAutoSplitQty is reached for the original MO.  Notes are added to the new MOs indicating that they were created by Auto-Splitting.
        4. If any MO has a Required Qty that is less than the Item.MinOrderQty then:
          1. If the quantity short is less than or equal to the Item.MinOrderQtyRoundupLimit, then the MO's Required Qty is increased to the MinOrderQty.
          2. Otherwise, the Job is marked as Do Not Schedule and notes are added to the MO to indicate that the Required Qty is too low.
    2. Material Requirements are set to Non-constraining and an Optimization is performed to schedule the newly generated Jobs and update the resulting inventory plans.
  7. If generating Purchase Orders
    1. Purchase To Stocks are generated in the following way for each Warehouse and each Inventory that has its MRP Processing set to Generate Purchase Orders:
      1. The Inventory's MRP Notes are set to "MRP Processed as Purchased Item: <timestamp>".
      2. If Jobs Generation was not enabled in the Optimize settings then an Optimize is performed here to reflect the results of the Optimize on the PO generation (i.e. so that the PO dates are based on the schedule after being Optimized with the new settings)
      3. Any Purchase To Stocks that are not Firm or Closed are deleted.
      4. The current Inventory Adjustments up to the MRP Cutoff Date are used.
      5. Any on-hand inventory is allocated to negative Adjustments.  If an Adjustment is within the Lead Time then all on-hand inventory may be allocated to it. If an Adjustment is outside the Lead Time then only inventory above the Safety Stock may be allocated to it (The rest is reserved for Safety Stock.) Partial allocations are allowed.
      6. Inventory from existing Purchase To Stocks are allocated to remaining Adjustments.
      7. Purchase To Stocks are created to satisfy Safety Stock requirements in the following way for remaining Adjustments:
        1. The Name and ExternalId are set to "MRPx" where x is the next numerically generated Id.
        2. The QtyOrdered is set to the quantity needed.
        3. The Required Date for the Safety Stock PO is set to the APS Clock.
        4. The Item's MinOrderQty is enforced in the following way:
          1. If the quantity short is less than or equal to the Item.MinOrderQtyRoundupLimit then the PTS.QtyOrdered is set to the Item.MinOrderQty and PTS.Notes is modified to indicate this.
          2. If the quantity short is more than the Item.MinOrderQtyRoundupLimit then the PTS.QtyOrdered is set to the original QtyOrdered plus the Item.MinOrderQtyRoundupLimit and the PTS Notes are modified to indicate this.
        5. Batch Rounding is performed in the same way as described for Jobs above.
  8. Material Requirements that were set to Non-constraining are set back to their original values and if any new Jobs or Purchase To Stocks were created then a final Optimization is performed to create a constrained and optimized schedule based on all information and constraints.
  9. If any warnings are needed due to data issues then the warnings are shown in the user interface System Message window.

Each Job created during MRP now stores the original demands that led to the Job's creation and shows both of these in the Job Dialog:

  • Original Demand: For level zero Jobs, these are the demands (Sales Orders,  Forecasts, etc.) that caused the Job to originally be created. For Level 1+ Jobs, these are the original demands of the parent Jobs (at all levels) at the time of the sub-Job's creation.
  • Pegged Demands: these are the demands of Jobs that are currently supplied by the Job (either through material relationships or  Successor MO relationships).


Batching refers to the process of creating one Job or Purchase to Stock that satisfies multiple demands.

Batching can be driven by batch sizing and time limit rules as described above in the MRP process section.

The benefits of batching are:

  • Fewer, larger, Jobs are created thus making it easier to manage the schedule.
  • System performance is faster due to a lower volume of Jobs and, of lesser importance, Purchases.
  • Potentially fewer setups due to larger run sizes (though this can also be handled with Optimize rules).
  • Minimum order policies for vendors can be followed during MRP thus minimizing the effort and effects of changing them manually.

The benefits of not-batching are:

  • Easier visibility in determining which Jobs or Purchases satisfy which demands.
  • Increased flexibility in scheduling to meet on-time deliveries.

Lot Sizing

Rules can be set for each Item's MinOrderQty, Batch Size, and MaxRoundupLimit to control the quantities of Jobs and Purchases when created by MRP.  For details on how these values affect the MRP process please see the MRP process section above.

Safety Stock

Each Inventory can have a Safety Stock value specified for it.  This is then used by MRP to generate additional Jobs and/or Purchases to help prevent the inventory from falling below this target value and thus minimizing the chance of stock-outs.

Preserving Firm Plans

In most situations, there are benefits to preserving some stability in production and buying plans.  For example, once Jobs are released to the shop floor it may be problematic to have that Job deleted by MRP and replaced with a new Job or perhaps not replaced at all.  Additionally, once a purchase has been ordered from a vendor it may not be possible to change or cancel it.

The following MRP options can be used to preserve Jobs during MRP to minimize such disruptions or inefficiencies:

  • Released
  • Firm
  • Anchored
  • Locked
  • Starting in the Plant Stable Span

In addition, MRP automatically preserves Purchase To Stocks that are either Firm or Closed.

Net Change MRP

Running MRP with the Net Change option reduces the time for MRP to process and preserves Jobs and Purchase Orders that were previously created for Inventory plans that have not changed since the last MRP run.  In particular, if an Inventory has not changed any of the following values since the last time the Inventory was included in MRP then it is excluded from the Net Change MRP run.

Inventories for Items are not replanned during Net Change MRP unless one or more of the following have changed for that Item or one of its parent Items:

  • Sales Orders
  • Forecasts
  • Transfer Orders
  • On-Hand Inventory
  • Safety Stock
  • Safety Stock Priority
  • Jobs created, deleted, or changed in quantity (producing or consuming the Item)



Data Requirements to support MRP

To run MRP the following data elements are used as inputs:

  1. Warehouses
  2. Items
  3. Inventories
  4. Job Templates
  5. If using MRP to generate supplies for dependent demand (material used by Jobs), then Operation Materials are required in Jobs.
  6. If using MRP to generated supplies for independent demand then Sales Orders and/or Forecasts and/or Transfer Orders are required to represent the demand.


Optimization Controls

MRP Cutoff Date: During the MRP process, only inventory requirements on or before this date are included. Requirements past this are ignored. When the Clock is advanced, the MRP Cutoff Date is extended by an amount of time equal to the clock advance duration in order to preserve the “horizon”. Note that if User Optimize Settings are being used then these are not altered during Clock Advances.

Shorter term MRP Cutoff Dates can be used in situations where demands further in the future do not need to be included in the schedule. This will improve system performance as well since less time and data are included in the MRP process.

Special Cases and Considerations

  • If an Item specifies itself as a material in a Template then it is assigned the lowest Low Level Code and therefore planned after other levels thus potentially missing demand for itself.
  • If an Item has multiple Templates then the Template with the lowest Job ID (the first one created) will be used for setting Low Level Codes for its Inventories.