Last modified on 19 June 2026, at 06:41

MRO Material Management

Revision as of 06:41, 19 June 2026 by LMA (Talk | contribs) (Relations)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Wiki Under Construction Start.PNG

MRO Material Management

Summary: The MRO material management features provide the foundation for handling materials, material master data, reservations, storage locations, and goods movements in MRO workflows. The central objects are Material, MaterialMaster, and Reservation. Materials are linked to master data and storage locations. Reservations are created manually by users and link materials to tasks.

MRO material management is used to support maintenance work with required spare parts, consumables, tools, or other material items.

Users can see which material is required for a task, where the material is stored, how much material is available, how much material is reserved, and which reservation status applies.

Basic concept

Object Type Purpose
MaterialMaster Master data Defines the catalogue entry for a material, including item number, unit, packaging, manufacturer data, and material type.
Material Quantity-bearing MRO object Represents a material instance or stock entry in MRO. It links to a material master and a storage location and exposes quantity, reserved quantity, and available quantity logic.
Reservation Workflow object Represents a manually created material reservation for a task. It links a material to a task and stores planned and actual quantities.
GoodsMovement Technical base class Provides the common QUANTITY property used by both materials and reservations.
StorageLocation Related storage object Represents a physical storage location for materials.

Core idea: MaterialMaster defines what the material is. Material represents the material in stock or material context. Reservation links a material to a task and reserves a planned quantity for maintenance execution.

Object overview

Object Class name Base / inheritance Main relations
Material UBIK.MRO.Material Inherits from GoodsMovement LK_MATERIAL_MASTER, LK_STORAGE_LOCATION
Material Master UBIK.MRO.MaterialMaster Master data class Referenced by Material via LK_MATERIAL_MASTER
Reservation UBIK.MRO.Reservation Inherits from GoodsMovement LK_TASK, LK_MATERIAL
Goods Movement UBIK.MRO.GoodsMovement Technical base class Provides QUANTITY to derived objects
Storage Location UBIK.MRO.StorageLocation Functional location specialization Referenced by Material via LK_STORAGE_LOCATION

MaterialMaster

Purpose

MaterialMaster represents the material master or catalogue entry.

It stores item-level master data that can be referenced by material instances in MRO.

Important properties

Property Type Meaning
ITEM_NUMBER string Item number or material number.
PACKAGING_UNIT string Packaging unit.
PACKAGING_SIZE double Packaging size.
ACTIVE bool Defines whether the material master is active.
UNIT_OF_MEASURE string Unit of measure.
MATERIAL_TYPE / MaterialType int / enum Material type.
MANUFACTURER_COMPANY_NAME string Manufacturer company name.
MANUFACTURER_PRODUCT_TAG string Manufacturer product tag or product identifier.

Material type

Values of MaterialType are:

  • SpareParts
  • Consumables
  • Tools


Material

Purpose

Material represents a material instance or stock entry in MRO.

It inherits from GoodsMovement and therefore uses the inherited QUANTITY property as its material quantity.

A material links to:

  • a material master via LK_MATERIAL_MASTER
  • a storage location via LK_STORAGE_LOCATION

Important properties

Property Type Meaning Stored or calculated
LK_MATERIAL_MASTER MaterialMaster Link to the material master data. Stored link
LK_STORAGE_LOCATION StorageLocation Link to the storage location where the material is located. Stored link
QUANTITY double Material quantity. Inherited from GoodsMovement. Stored property
RESERVED_QUANTITY double Sum of planned quantities of confirmed reservations for this material. Calculated property
MATERIAL_STATUS / MaterialStatus int / enum Material status. User/admin managed property

Material status

The material status is stored in MATERIAL_STATUS and exposed through MaterialStatus.

The property is managed by the user or administrator. The system does not change it automatically.

Value Numeric value Meaning
Undefined 0 No specific material status is defined.
Inactive 10 Material is inactive and should not be used for new reservations.
Active 20 Material is active and can be used for reservations.

Reserved quantity

RESERVED_QUANTITY is calculated at read time.

The calculation uses reservations where:

  • LK_MATERIAL points to the current material
  • STATUS is ReservationStatus.Confirmed

The calculated value is the sum of QTY_PLANNED of these confirmed reservations.

Available quantity

The available material quantity is calculated by AvailableQuantity().

AvailableQuantity = QUANTITY - RESERVED_QUANTITY

Delete behavior

Material.InternalDeleteAllowed() prevents deleting a material if it still has quantity or active reservations.

Deletion is only allowed if:

  • QUANTITY is lower than or equal to 0
  • HasActiveReservation() returns false

Restriction: A Material cannot be deleted while it has a quantity greater than 0 or active reservations.

Reservation

Purpose

Reservation represents a manually created material reservation for a task.

It links:

  • a task via LK_TASK
  • a material via LK_MATERIAL

It stores the planned reservation quantity in QTY_PLANNED and the actually issued or consumed quantity in QUANTITY.

Important properties

Property Type Meaning Important behavior
LK_TASK Task Link to the task for which the material is reserved. Setter is blocked when status is Issued or Confirmed.
LK_MATERIAL Material Link to the material being reserved. Setter is blocked when status is Issued or Confirmed.
STATUS / Status int / enum Reservation status. Changes are validated by AllowStatusChange(int newStatus).
QTY_PLANNED double Planned quantity for the reservation. Setter validates through AllowQuantityPlanned(double).
QUANTITY double Actually issued or consumed quantity. Overrides GoodsMovement.QUANTITY. Setter validates through AllowQuantity(double).

Reservation status

Values of ReservationStatus are:

Status Numeric value Meaning
Planned 0 Reservation is planned.
Confirmed 10 Reservation is confirmed and contributes to the material's reserved quantity.
Issued 20 Material has been physically issued.
Cancelled 30 Reservation was cancelled.
Expired 50 Reservation has expired.


Status change rules

Status changes are controlled by AllowStatusChange(int newStatus).

The following rules are applied:

  • no status change is allowed when the current status is Issued
  • changing from Confirmed back to Planned is not allowed
  • other status changes are allowed by this method

Restriction: Once a reservation has status Issued, its status can no longer be changed by the normal status setter logic.

Planned quantity validation

The setter of QTY_PLANNED validates changes through AllowQuantityPlanned(double).

A new planned quantity is only allowed if:

  • Status is ReservationStatus.Planned
  • LK_MATERIAL is assigned
  • the new quantity is greater than 0
  • the new quantity is lower than or equal to LK_MATERIAL.AvailableQuantity()

Quantity rule: A planned reservation quantity can only be set while the reservation is still Planned and only if the selected material has enough available quantity.

Actual quantity validation

The overridden QUANTITY setter validates changes through AllowQuantity(double).

A new actual quantity is only allowed if:

  • the new quantity is greater than 0
  • the status is either Planned or Confirmed

Link editing rules

The setters of LK_TASK and LK_MATERIAL are guarded by reservation status.

The links cannot be changed when the reservation is:

  • Issued
  • Confirmed

StorageLocation

Purpose

StorageLocation is a related object used to represent a physical storage location.

A material can reference a storage location via LK_STORAGE_LOCATION.

Important properties and values

Property Type Values / meaning
STORAGE_TYPE / StorageType int / enum Floor, Shelf, Rack, Bin, Pallet, Container
ACCESS_TYPE / AccessType int / enum Manual, Forklift, Crane, Automated
OCCUPANCY_STATUS / OccupancyStatus int / enum Empty, Partial, Full, Reserved, Blocked, OutOfService
STORAGE_LABEL string Label of the storage location.
LEVEL int Level of the storage location.
POSITION string Position identifier.

GoodsMovement

GoodsMovement is a technical base class.

It provides the common QUANTITY property for material-related objects such as Material and Reservation.



Quantity concepts

Quantity Property / method Object Stored or calculated Notes
Material quantity QUANTITY Material Stored Inherited from GoodsMovement.
Reserved quantity RESERVED_QUANTITY Material Calculated Sum of QTY_PLANNED of confirmed reservations for the material.
Available quantity AvailableQuantity() Material Calculated QUANTITY minus RESERVED_QUANTITY.
Planned reservation quantity QTY_PLANNED Reservation Stored Validated by AllowQuantityPlanned(double).
Actually issued or consumed quantity QUANTITY Reservation Stored Overrides GoodsMovement.QUANTITY and is validated by AllowQuantity(double).

Reservation workflow

Creating or editing a reservation

Reservations are created manually by the user.

A reservation links a material to a task.

For a reservation to define its planned quantity correctly:

  1. LK_MATERIAL must be set.
  2. LK_TASK must point to the task requiring the material.
  3. Status must still be Planned.
  4. QTY_PLANNED must be greater than 0.
  5. QTY_PLANNED must not exceed LK_MATERIAL.AvailableQuantity().

Confirmed reservations

When a reservation is confirmed, it contributes to the material's reserved quantity.

This affects the available quantity of the material.

AvailableQuantity = QUANTITY - sum(QTY_PLANNED of confirmed reservations)

Finishing a task

When a task is finished, the task logic calls CloseReservations().

The method processes active reservations for the task:

  • if a reservation has status Confirmed, it is set to Issued
  • otherwise, it is set to Cancelled

Workflow effect: Finishing a task closes its reservations. Confirmed reservations become Issued; other active reservations become Cancelled.

Usage in tasks

Reservations are the central link between material handling and task execution.

A reservation connects:

  • the required material through LK_MATERIAL
  • the task through LK_TASK
  • the planned quantity through QTY_PLANNED
  • the actually issued or consumed quantity through QUANTITY
  • the reservation state through Status

This means that material usage is tracked at task level.

Example workflow

Step 1: Material master exists

A spare part is defined as a MaterialMaster.

Field Example
ITEM_NUMBER OF-10045
UNIT_OF_MEASURE Piece
MaterialType SpareParts

Step 2: Material exists in a storage location

A Material object references the material master and a storage location.

Property Example
LK_MATERIAL_MASTER Oil Filter Type A
LK_STORAGE_LOCATION Storage Shelf A
QUANTITY 10
RESERVED_QUANTITY 0
AvailableQuantity() 10

Step 3: Reservation is created for a task

A user manually creates a Reservation and links the material to the task.

Property Example
LK_TASK Replace oil filter
LK_MATERIAL Oil Filter Type A
Status Planned
QTY_PLANNED 1

Step 4: Reservation is confirmed

The reservation status is changed to Confirmed.

After confirmation, the material's reserved quantity includes the reservation's planned quantity.

Quantity Value
Material.QUANTITY 10
Material.RESERVED_QUANTITY 1
Material.AvailableQuantity() 9

Step 5: Actual quantity is entered

The actually issued or consumed quantity is stored in Reservation.QUANTITY.

Property Example
Reservation.QUANTITY 1

Step 6: Task is finished

When the task is finished, CloseReservations() is called.

The confirmed reservation is changed to Issued.

Validation and business rules

Area Rule Implemented by
Planned reservation quantity QTY_PLANNED must be greater than 0. AllowQuantityPlanned(double)
Planned reservation quantity QTY_PLANNED can only be changed while the reservation is Planned. AllowQuantityPlanned(double)
Planned reservation quantity QTY_PLANNED must not exceed LK_MATERIAL.AvailableQuantity(). AllowQuantityPlanned(double)
Actual issued or consumed quantity QUANTITY must be greater than 0. AllowQuantity(double)
Actual issued or consumed quantity QUANTITY can only be changed while the reservation is Planned or Confirmed. AllowQuantity(double)
Reservation status Status cannot be changed once the reservation is Issued. AllowStatusChange(int newStatus)
Reservation status A reservation cannot be changed from Confirmed back to Planned. AllowStatusChange(int newStatus)
Reservation links LK_TASK and LK_MATERIAL cannot be changed when status is Issued or Confirmed. Property setters
Material deletion Material cannot be deleted while QUANTITY is greater than 0. InternalDeleteAllowed()
Material deletion Material cannot be deleted while active reservations exist. InternalDeleteAllowed() and HasActiveReservation()

See also

Wiki Under Construction End.PNG