MPS/MRP Optimize

Key Concepts

In PlanetTogether, MRP (Material Requirements Planning) is an automated process that compares the demand for materials and finished goods to the on-hand and planned supply to generate jobs and/or purchase orders to satisfy unmet demands.

The MRP Process is often performed by a business' ERP system. In this case, PlanetTogether is not used for this process, and jobs and purchase orders are imported from their external system. However, there may be times where performing MRP in PlanetTogether rather than the ERP system is preferable. There are some points to consider when deciding where to perform MRP:

  • How well is the ERP system's MRP function working for your business? If the current MRP process is working well for your business, it is probably better to continue using it as converting to a new MRP process requires an additional effort that may not be worth the time or cost. However, if the current process does not work, it would be preferable to use PlanetTogether to perform the MRP process.
  • Do the jobs and/or purchase orders created in PlanetTogether need to be created in the ERP system as well? If yes, then there are two options to include the jobs/purchase orders in the ERP system: (1) manually enter them based on the suggestions from PlanetTogether or (2) import them from PlanetTogether. Option (1) is acceptable for small order volumes, but it is highly error-prone and time-consuming for large order volumes. Option (2) is usually preferred since it reduces time and the error risk of manual entry; however, some ERP systems do not have the ability to import this type of data.
  • Does the MRP process in PlanetTogether offer benefits over the ERP-based or manual processes? Some of the common benefits of using PlanetTogether's MRP are (1) the simplicity of a "single-click" process than plans materials and resources in a cohesive system, (2) the speed of the MRP process performed by PlanetTogether, and (3) the plan that results from planning material and capacity together, rather than creating an infinite capacity material plan in an ERP system and then planning finite capacity in PlanetTogether.

Data Requirements to Support MRP:

To run MRP in PlanetTogether, the following data elements are required to be used as inputs:

  1. Warehouses
  2. Items
  3. Inventories
  4. Job Templates
  5. If using MRP to generate supplies for dependent demand (materials used by jobs), then Operation Materials are required in jobs.
  6. Using MRP to generate supplies for independent demand requires sales orders, forecasts, and/or transfer orders to represent the demand.

The MRP Process:

When using the MPS/MRP Optimize feature, the system will create jobs and/or purchase orders and then schedule them according to the optimization settings defined. Additional information on the MRP Optimization settings can be found here


The MRP Process steps include:

  1. Jobs/POs are deleted: If generating jobs, all jobs not marked as "Preserved" in the optimize options are deleted. Likewise, all purchases to stocks, neither Firm nor Closed, are deleted if generating purchase orders.
  2. MRP Notes are cleared: MRP notes from the previous MRP run are cleared from inventory records in all warehouses.
  3. Material Constraints set to Non-Constraint: All scheduled jobs have their material requirement constraint type set to "Non-Constraint" to remain where they are in the MRP process if they are supplying jobs or purchase orders are deleted. 
  4. Low-Level Codes are calculated: 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 using templates and is not used as materials for other templates. These items have their LLC set to zero.
    3. Each level-zero item has its list of materials scanned to set the LLC of the materials used by it and its materials. The LLC of each item is increased if it is deeper in the level-zero item's BOM than all of the 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. Note: In versions 11.45.1 and later, the Job's Low-Level Code can be displayed in the Jobs View column.
  5. Initial Optimization is performed: This creates a starting point with the current demands and supplies that have not been deleted.
  6. If generating Jobs: The following occurs for each LLC from zero to the maximum number.
    1. Jobs are created at the current LLC. This is done for each inventory that has it is MRP Processing set to "Generate Jobs" and has a template manufacturing order:
      1. MRP Notes: The inventory's MRP Notes are set to "MRP Processed as Manufactured/JobTemplate Item: <timestamp>."
      2. Inventory Adjustments up to the MRP Cutoff are used: An inventory adjustment is a decrease or an increase in the projected inventory based on a demand (sales order, forecast, job material requirement, transfer out) or a supply (job product, purchase to stock, transfer in). Negative and positive inventory adjustments up to the MRP Cutoff date are used.
      3. Inventory is allocated: Any on-hand inventory above the Safety Stock is chronologically allocated to negative adjustments from the earliest to the latest. Partial allocations can also occur if there is not enough inventory to cover a single adjustment fully.
      4. Un-allocated positive adjustments are allocated: Any unallocated positive adjustments (not safety stock jobs) are allocated to the remaining negative adjustments not covered by the on-hand inventory. If a positive adjustment is a job product allocated to one or more negative adjustments and is not released, then the job's need date is set to the first date on which the allocation occurs.
      5. New Jobs are created to supply remaining negative adjustments: If there are remaining negative adjustments after allocating on-hand inventory, existing positive adjustments, or new/unscheduled/excluded/failed to schedule jobs, then a new job is created the following way:
        1. Need Date: The job's need date is set to one of the following, depending on what is being supplied: Activity Scheduled Start Date, Sales Order Distribution Required Date, Forecast Shipment Required Date, or the Transfer Order Distribution Scheduled Ship Date. Note: The job's need date is not changed if its commitment is set to Release or Firm.
        2. Priority: The job's priority is the priority of the sales order, forecast, or job that it was created for. If the adjustment was for a transfer order, the job's priority is set to "5".
        3. Classification: The job's classification is set to sales order, forecast, or transfer order if the adjustment was one of these.
        4. Name and External Id: The job's name and external Id are set to "MRP x," where is the auto-incrementing numeric Id of the job.
        5. Entry Method: The job's entry method is set to "MRP Generated."
        6. Template and Flags: The job's template and Do Not Schedule flags are set to false.
        7. Commitment: The job's commitment is set to "Planned."
        8. Quantity: If the adjustment's remaining allocation quantity is less than 0.00005, it is increased to that minimum allowed value. Otherwise, the quantity of the first manufacturing order (with the lowest ID based on its creation sequence) is set to the adjustment's remaining allocation quantity. The manufacturing order's quantity is adjusted in the following way:
          1. The MO's 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 every operation in each path, the products, activities, and material requirements are adjusted to the new quantity. Note: rounding may occur here based on the scenario options precision settings.
        9. Operation Attributes: The operation attributes are "rolled-up"  into the job recursively as needed based on each item's setting for  "RollupAttributesToParent." 
        10. Warehouse: For each product of each operation in the job, the warehouse is set to the warehouse where the source negative adjustment occurs. Note: 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. Batching: If an item is set up for Batching (when Batch Size, Batch Window, and MinOrderQty > 0 and MaxOrderQty >= MinOrderQty), then the following occurs to batch together multiple negative adjustments in one job:
        1. Adjustments are batched chronologically for the job as long as the following are true:
          1. The adjustment date/time is in the Batch Window (new Job Need Date <= Adjustment DateTime < New Job Need Date + Item Batch Window)
          2. Job is under the item's Max Order Qty.
        2. A portion of an adjustment can be batched into a job rather than the full adjustment quantity to stay within the item's MaxOrderQty constraint.
        3. Batch Rounding: After all adjustments fitting into a batch are calculated, 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, and any rounded-up quantity can be used for further allocation.
        4. If the resulting number of batches is less than the item's MinOrderQty setting, the job is prevented from scheduling.
      7. Notes are added to each job to indicate the reasons for the jobs being created.
      8. Safety Stock Requirement: If the inventory has a safety stock requirement greater than zero, then the following steps are taken:
        1. Optimize: 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 excess scheduled production is less than the safety stock.
          1. Need Date: The job's need date is set to the PlanetTogether clock.
          2. Priority: The job's priority is set to the inventory safety stock job priority.
          3. Classification: The job's classification is set to "Safety Stock."
          4. Operation Attributes: The operation attributes are "rolled-up"  into the job recursively as needed based on each item's setting for  "RollupAttributesToParent."
          5. Warehouses: For each product of each operation in the job, the warehouse is set to the warehouse where the source negative adjustment occurs.
        3. Auto-Splitting: Jobs are auto-split if the item's job auto-split quantity is greater than the job's first manufacturing order's required quantity. New manufacturing orders are created for the job by splitting off manufacturing orders with a JobAutoSplitQuantity until the JobAutoSplitQuantity is reached for the original manufacturing order. Notes are added to the new manufacturing orders to indicate Auto-Splitting created them. 
        4. If any manufacturing order has a required quantity less than the item's Min Order Quantity, then:
          1. If the quantity short is less than or equal to the item's Min Order Qty Roundup Limit, the manufacturing order's required quantity is increased to the Min Order Qty.
          2. Otherwise, the job is marked as "Do Not Schedule," and notes are added to indicate that the required quantity is too low.
    2. Material Requirements & Optimization: Material requirements are set to "Non-Constraint," 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. MRP Notes: The inventory's MRP Notes are set to "MRP Processed as Purchased Item: <timestamp>."
      2. Optimize: If job generation was not enabled in the optimize settings, then an optimize is performed here to reflect the optimize results on the purchase orders generation. This is, so the purchase order dates are based on the schedule after being optimized with the new settings.
      3. Delete purchase orders: Any purchases to stocks that are not set to Firm or Closed are deleted.
      4. Inventory Adjustments up to the MRP Cutoff are used.
      5. Inventory is Allocated: 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. Only inventory above the safety stock may be allocated if an adjustment is outside the lead time. The rest is reserved for safety stock. Partial allocations are allowed.
      6. Purchase To Stocks are created for the remaining adjustments to satisfy safety stock requirements:
        1. Name and External Id: Are set to "MRP x," where is the next numerically generated Id.
        2. Qty Ordered: The quantity ordered is set to the quantity needed.
        3. Required Date: The required date for the safety stock purchase order is set on the PlanetTogether clock.
        4. Min Order Quantity is set the following way:
          1. If the quantity short is less than or equal to the item's Min Order Quantity Roundup Limit, then the Purchase To Stock Quantity Ordered is set to the item's Min Order Quantity, and the purchase to stock notes are modified to indicate this.
          2. If the quantity short is greater than the item's Min Order Quantity Roundup Limit, then the Purchase To Stock Quantity Ordered is set to the original quantity ordered plus the item's Min Order Qty Roundup Limit, and the purchase to stock notes are modified to indicate this.
        5. Batch Rounding is performed.
  8. Material Requirements returned to their original values: Material requirements that were changed to "Non-Constraint" are set back to their original values if new jobs and purchases to stocks were created. 
  9. Optimization: a final optimization is performed to create a constrained and optimized schedule based on all information and constraints applied.
  10. Warnings: 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 (i.e., sales orders, forecasts, etc.) that caused the job to be created. For level 1+ jobs, these are the original demands of the parent jobs at the time of the sub-job's creation.
  • Pegged Demands: These are the demands of jobs currently supplied by the job (through material relationships or successor manufacturing order relationships). 

      Special Cases and Considerations:

      • If an item is specified as a material in a template, it is assigned the lowest Low-Level Code. This means that the item is planned after other levels and can potentially miss demand for itself.
      • If an item has multiple templates, then the template with the lowest Job ID (the first created) is used to set the Low-Level Codes for its inventories.