Jump to: navigation, search

Difference between revisions of "MRO Material Management"


Line 200: Line 200:
 
! Type
 
! Type
 
! Meaning
 
! Meaning
 +
! Stored or calculated
 
|-
 
|-
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">ITEM_NUMBER</span>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_MATERIAL_MASTER</span>
| string
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MaterialMaster</span>
| Item number or material number of the material master.
+
| Link to the material master data.
 +
| Stored link
 
|-
 
|-
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PACKAGING_UNIT</span>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_STORAGE_LOCATION</span>
| string
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">StorageLocation</span>
| Packaging unit of the material.
+
| Link to the storage location where the material is located.
 +
| Stored link
 
|-
 
|-
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PACKAGING_SIZE</span>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">QUANTITY</span>
 
| double
 
| double
| Packaging size.
+
| Material quantity. Inherited from <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">GoodsMovement</span>.
 +
| Stored property
 
|-
 
|-
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">ACTIVE</span>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RESERVED_QUANTITY</span>
| bool
+
| double
| Defines whether the material master is active.
+
| Sum of planned quantities of confirmed reservations for this material.
|-
+
| Calculated property
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">UNIT_OF_MEASURE</span>
+
| string
+
| Unit of measure used for the material.
+
 
|-
 
|-
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MATERIAL_TYPE</span>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MATERIAL_STATUS</span>
 
| int
 
| int
| Underlying integer value for the material type.
+
| Underlying integer value for the material status.
 +
| Stored property
 
|-
 
|-
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MaterialType</span>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MaterialStatus</span>
 
| enum
 
| enum
| Typed accessor for <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MATERIAL_TYPE</span>.
+
| Typed accessor for <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MATERIAL_STATUS</span>.
|-
+
| Stored through <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MATERIAL_STATUS</span>
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MANUFACTURER_COMPANY_NAME</span>
+
| string
+
| Manufacturer company name.
+
|-
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MANUFACTURER_PRODUCT_TAG</span>
+
| string
+
| Manufacturer product tag or product identifier.
+
 
|}
 
|}
  
=== Material type ===
+
=== Material status ===
  
The typed material type accessor is <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MaterialType</span>.
+
The material status is stored in <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MATERIAL_STATUS</span> and exposed through the typed accessor <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MaterialStatus</span>.
  
 
Known values are:
 
Known values are:
  
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SpareParts</span>
+
{| class="wikitable"
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Consumables</span>
+
! Value
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Tools</span>
+
! Numeric value
 +
! Meaning
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Undefined</span>
 +
| 0
 +
| No specific material status is defined.
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Inactive</span>
 +
| 10
 +
| Material is inactive.
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Active</span>
 +
| 20
 +
| Material is active.
 +
|}
  
 
<div style="border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;">
 
<div style="border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;">
'''Open point:''' No explicit SAP or ERP synchronization behavior was found in the inspected classes. <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">ITEM_NUMBER</span> may correspond to an external material number, but the exact SAP/ERP mapping is unclear from the available code information.
+
'''Open point:''' The inspected class information does not show specific methods that automatically change <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MaterialStatus</span>. Status changes outside these classes are unclear from code.
 +
</div>
 +
 
 +
=== Reserved quantity ===
 +
 
 +
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RESERVED_QUANTITY</span> is calculated at read time.
 +
 
 +
The calculation uses reservations where:
 +
 
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_MATERIAL</span> points to the current material
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">STATUS</span> is <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">ReservationStatus.Confirmed</span>
 +
 
 +
The calculated value is the sum of <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">QTY_PLANNED</span> of these confirmed reservations.
 +
 
 +
<div style="border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;">
 +
'''Important:''' <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RESERVED_QUANTITY</span> is not treated as a normal stored quantity in the business logic. It is computed from confirmed <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Reservation</span> objects.
 +
</div>
 +
 
 +
=== Available quantity ===
 +
 
 +
The available material quantity is calculated by the method <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">AvailableQuantity()</span>.
 +
 
 +
<div style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;">
 +
AvailableQuantity = QUANTITY - RESERVED_QUANTITY
 +
</div>
 +
 
 +
=== Active reservations ===
 +
 
 +
The method <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">HasActiveReservation()</span> checks whether active reservations exist for the material.
 +
 
 +
It queries reservations where:
 +
 
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_MATERIAL</span> points to the current material
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">STATUS</span> is lower than or equal to <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">ReservationStatus.Confirmed</span>
 +
 
 +
This means the method considers reservations up to the confirmed state as active.
 +
 
 +
=== Delete behavior ===
 +
 
 +
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Material.InternalDeleteAllowed()</span> prevents deleting a material if it still has quantity or active reservations.
 +
 
 +
Deletion is only allowed if the base delete conditions are fulfilled and:
 +
 
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">QUANTITY</span> is lower than or equal to 0
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">HasActiveReservation()</span> returns false
 +
 
 +
<div style="border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;">
 +
'''Restriction:''' A <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Material</span> cannot be deleted while it has a quantity greater than 0 or active reservations.
 
</div>
 
</div>
  
== Material ==
+
== Reservation ==
  
 
=== Purpose ===
 
=== Purpose ===
  
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Material</span> represents a material instance or stock entry in MRO.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Reservation</span> represents a material reservation for a task.
  
It inherits from <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">GoodsMovement</span> and therefore uses the inherited <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">QUANTITY</span> property as its material quantity.
+
It links:
  
A material links to:
+
* a task via <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_TASK</span>
 +
* a material via <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_MATERIAL</span>
  
* a material master via <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_MATERIAL_MASTER</span>
+
It stores the planned reservation quantity in <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">QTY_PLANNED</span> and can also store an actual quantity through the overridden <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">QUANTITY</span> property.
* a storage location via <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_STORAGE_LOCATION</span>
+
  
It also exposes calculated reservation and availability logic.
+
=== Important properties ===
 +
 
 +
{| class="wikitable"
 +
! Property
 +
! Type
 +
! Meaning
 +
! Important behavior
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_TASK</span>
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Task</span>
 +
| Link to the task for which the material is reserved.
 +
| Setter is blocked when status is <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Issued</span> or <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Confirmed</span>.
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_MATERIAL</span>
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Material</span>
 +
| Link to the material being reserved.
 +
| Setter is blocked when status is <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Issued</span> or <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Confirmed</span>.
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">STATUS</span>
 +
| int
 +
| Underlying integer value for the reservation status.
 +
| Changes are validated by <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">AllowStatusChange(int newStatus)</span>.
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Status</span>
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">ReservationStatus</span>
 +
| Typed accessor for <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">STATUS</span>.
 +
| Uses the <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">ReservationStatus</span> enum.
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">QTY_PLANNED</span>
 +
| double
 +
| Planned quantity for the reservation.
 +
| Setter validates through <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">AllowQuantityPlanned(double)</span>.
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">QUANTITY</span>
 +
| double
 +
| Actual reservation quantity. Overrides <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">GoodsMovement.QUANTITY</span>.
 +
| Setter validates through <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">AllowQuantity(double)</span>.
 +
|}
 +
 
 +
=== Reservation status ===
 +
 
 +
The reservation status is stored in <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">STATUS</span> and exposed through the typed accessor <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Status</span>.
 +
 
 +
Known values of <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">ReservationStatus</span> are:
 +
 
 +
{| class="wikitable"
 +
! Status
 +
! Numeric value
 +
! Meaning
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Planned</span>
 +
| 0
 +
| Reservation is planned.
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Confirmed</span>
 +
| 10
 +
| Reservation is confirmed and contributes to the material's reserved quantity.
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Issued</span>
 +
| 20
 +
| Material has been physically issued.
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Cancelled</span>
 +
| 30
 +
| Reservation was cancelled. This is only allowed if the reservation has not been issued.
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Expired</span>
 +
| 50
 +
| Reservation has expired.
 +
|}
 +
 
 +
=== Status change rules ===
 +
 
 +
Status changes are controlled by <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">AllowStatusChange(int newStatus)</span>.
 +
 
 +
The following rules are applied:
 +
 
 +
* no status change is allowed when the current status is <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Issued</span>
 +
* changing from <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Confirmed</span> back to <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Planned</span> is not allowed
 +
* other status changes are allowed by this method
 +
 
 +
<div style="border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;">
 +
'''Restriction:''' Once a reservation has status <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Issued</span>, its status can no longer be changed by the normal status setter logic.
 +
</div>
 +
 
 +
=== Planned quantity validation ===
 +
 
 +
The setter of <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">QTY_PLANNED</span> validates changes through <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">AllowQuantityPlanned(double)</span>.
 +
 
 +
A new planned quantity is only allowed if:
 +
 
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Status</span> is <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">ReservationStatus.Planned</span>
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_MATERIAL</span> is assigned
 +
* the new quantity is greater than 0
 +
* the new quantity is lower than or equal to <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_MATERIAL.AvailableQuantity()</span>
 +
 
 +
<div style="border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;">
 +
'''Quantity rule:''' A planned reservation quantity can only be set while the reservation is still <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Planned</span> and only if the selected material has enough available quantity.
 +
</div>
 +
 
 +
=== Actual quantity validation ===
 +
 
 +
The overridden <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">QUANTITY</span> setter validates changes through <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">AllowQuantity(double)</span>.
 +
 
 +
A new actual quantity is only allowed if:
 +
 
 +
* the new quantity is greater than 0
 +
* the status is either <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Planned</span> or <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Confirmed</span>
 +
 
 +
=== Link editing rules ===
 +
 
 +
The setters of <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_TASK</span> and <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_MATERIAL</span> are guarded by reservation status.
 +
 
 +
The links cannot be changed when the reservation is:
 +
 
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Issued</span>
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Confirmed</span>
 +
 
 +
This prevents changing the task or material after the reservation has reached a more binding status.
 +
 
 +
== StorageLocation ==
 +
 
 +
=== Purpose ===
 +
 
 +
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">StorageLocation</span> represents a physical storage location.
 +
 
 +
It is a functional location specialization and can be linked from <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Material</span> via <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_STORAGE_LOCATION</span>.
 +
 
 +
A storage location stores information about storage type, dimensions, access type, label, level, position, and occupancy.
  
 
=== Important properties ===
 
=== Important properties ===
Line 273: Line 457:
 
! Type
 
! Type
 
! Meaning
 
! Meaning
! Stored or calculated
+
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">STORAGE_TYPE</span>
 +
| int
 +
| Underlying integer value for storage type.
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">StorageType</span>
 +
| enum
 +
| Typed accessor for <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">STORAGE_TYPE</span>.
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MAX_WEIGHT</span>
 +
| double
 +
| Maximum allowed weight for the storage location.
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MAX_VOLUME</span>
 +
| double
 +
| Maximum allowed volume for the storage location.
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LENGTH</span>
 +
| double
 +
| Length of the storage location.
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">WIDTH</span>
 +
| double
 +
| Width of the storage location.
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">HEIGHT</span>
 +
| double
 +
| Height of the storage location.
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">ACCESS_TYPE</span>
 +
| int
 +
| Underlying integer value for access type.
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">AccessType</span>
 +
| enum
 +
| Typed accessor for <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">ACCESS_TYPE</span>.
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">STORAGE_LABEL</span>
 +
| string
 +
| Label of the storage location.
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LEVEL</span>
 +
| int
 +
| Level of the storage location.
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">POSITION</span>
 +
| string
 +
| Position identifier.
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">OCCUPANCY_STATUS</span>
 +
| int
 +
| Underlying integer value for occupancy status.
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">OccupancyStatus</span>
 +
| enum
 +
| Typed accessor for <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">OCCUPANCY_STATUS</span>.
 +
|}
 +
 
 +
=== Storage type ===
 +
 
 +
Known values of <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">StorageType</span> are:
 +
 
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Floor</span>
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Shelf</span>
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Rack</span>
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Bin</span>
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Pallet</span>
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Container</span>
 +
 
 +
=== Access type ===
 +
 
 +
Known values of <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">AccessType</span> are:
 +
 
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Manual</span>
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Forklift</span>
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Crane</span>
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Automated</span>
 +
 
 +
=== Occupancy status ===
 +
 
 +
Known values of <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">OccupancyStatus</span> are:
 +
 
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Empty</span>
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Partial</span>
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Full</span>
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Reserved</span>
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Blocked</span>
 +
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">OutOfService</span>
 +
 
 +
<div style="border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;">
 +
'''Open point:''' The inspected <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">StorageLocation</span> information does not show automatic occupancy calculation. It is unclear from code whether <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">OCCUPANCY_STATUS</span> is updated manually, by workflow logic, or by another module.
 +
</div>
 +
 
 +
== Relations ==
 +
 
 +
The following relations are relevant for material management.
 +
 
 +
{| class="wikitable"
 +
! Relation
 +
! Source
 +
! Target
 +
! Meaning
 
|-
 
|-
 
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_MATERIAL_MASTER</span>
 
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_MATERIAL_MASTER</span>
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Material</span>
 
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MaterialMaster</span>
 
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MaterialMaster</span>
| Link to the material master data.
+
| Links a material instance to its master data.
| Stored link
+
 
|-
 
|-
 
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_STORAGE_LOCATION</span>
 
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_STORAGE_LOCATION</span>
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Material</span>
 
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">StorageLocation</span>
 
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">StorageLocation</span>
| Link to the storage location where the material is located.
+
| Defines where the material is stored.
| Stored link
+
 
|-
 
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_MATERIAL</span>
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Reservation</span>
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Material</span>
 +
| Defines which material is reserved.
 +
|-
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_TASK</span>
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Reservation</span>
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Task</span>
 +
| Defines the task for which the material is reserved.
 +
|}
 +
 +
== Quantity concepts ==
 +
 +
=== Material quantity ===
 +
 +
The material quantity is stored in <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Material.QUANTITY</span>.
 +
 +
Because <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Material</span> inherits from <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">GoodsMovement</span>, the property is inherited from the base class.
 +
 +
=== Reserved quantity ===
 +
 +
The reserved quantity is exposed through <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Material.RESERVED_QUANTITY</span>.
 +
 +
It is calculated by summing the <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">QTY_PLANNED</span> values of confirmed reservations for the material.
 +
 +
Only reservations with <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Status</span> equal to <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">ReservationStatus.Confirmed</span> are included in this calculation.
 +
 +
=== Available quantity ===
 +
 +
Available quantity is calculated by <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Material.AvailableQuantity()</span>.
 +
 +
<div style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;">
 +
AvailableQuantity = QUANTITY - RESERVED_QUANTITY
 +
</div>
 +
 +
=== Planned reservation quantity ===
 +
 +
The planned reservation quantity is stored in <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Reservation.QTY_PLANNED</span>.
 +
 +
It can only be set if:
 +
 +
* the reservation is still <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Planned</span>
 +
* a material is assigned
 +
* the quantity is greater than 0
 +
* the quantity does not exceed the material's available quantity
 +
 +
=== Actual reservation quantity ===
 +
 +
The actual reservation quantity is stored in <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Reservation.QUANTITY</span>.
 +
 +
This property overrides <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">GoodsMovement.QUANTITY</span> and can only be set if the status is <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Planned</span> or <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Confirmed</span> and the new quantity is greater than 0.
 +
 +
=== Quantity overview ===
 +
 +
{| class="wikitable"
 +
! Quantity
 +
! Property / method
 +
! Object
 +
! Stored or calculated
 +
! Notes
 +
|-
 +
| Material quantity
 
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">QUANTITY</span>
 
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">QUANTITY</span>
| double
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Material</span>
| Material quantity. Inherited from <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">GoodsMovement</span>.
+
| Stored
| Stored property
+
| Inherited from <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">GoodsMovement</span>.
 
|-
 
|-
 +
| Reserved quantity
 
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RESERVED_QUANTITY</span>
 
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RESERVED_QUANTITY</span>
| double
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Material</span>
| Sum of planned quantities of confirmed reservations for this material.
+
| Calculated
| Calculated property
+
| Sum of <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">QTY_PLANNED</span> of confirmed reservations for the material.
 
|-
 
|-
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MATERIAL_STATUS</span>
+
| Available quantity
| int
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">AvailableQuantity()</span>
| Underlying integer value for the material status.
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Material</span>
| Stored property
+
| Calculated
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">QUANTITY</span> minus <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RESERVED_QUANTITY</span>.
 
|-
 
|-
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MaterialStatus</span>
+
| Planned reservation quantity
| enum
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">QTY_PLANNED</span>
| Typed accessor for <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MATERIAL_STATUS</span>.
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Reservation</span>
| Stored through <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MATERIAL_STATUS</span>
+
| Stored
 +
| Validated by <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">AllowQuantityPlanned(double)</span>.
 +
|-
 +
| Actual reservation quantity
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">QUANTITY</span>
 +
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Reservation</span>
 +
| Stored
 +
| Overrides <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">GoodsMovement.QUANTITY</span> and is validated by <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">AllowQuantity(double)</span>.
 
|}
 
|}
  
 +
== Reservation workflow ==
  
 +
=== Creating or editing a reservation ===
 +
 +
A reservation links a material to a task.
 +
 +
For a reservation to define its planned quantity correctly:
 +
 +
# <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_MATERIAL</span> must be set.
 +
# <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_TASK</span> should point to the task requiring the material.
 +
# <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Status</span> must still be <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Planned</span>.
 +
# <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">QTY_PLANNED</span> must be greater than 0.
 +
# <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">QTY_PLANNED</span> must not exceed <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_MATERIAL.AvailableQuantity()</span>.
 +
 +
=== Confirmed reservations ===
 +
 +
When a reservation is confirmed, it contributes to the material's reserved quantity.
 +
 +
This affects the available quantity of the material because:
 +
 +
<div style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;">
 +
AvailableQuantity = QUANTITY - sum(QTY_PLANNED of confirmed reservations)
 +
</div>
 
{{UnderConstructionEnd}}
 
{{UnderConstructionEnd}}

Revision as of 09:04, 18 June 2026

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, Reservation, GoodsMovement, and StorageLocation. Materials are linked to master data and storage locations. Reservations link materials to tasks and define planned or actual quantities for maintenance work.

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

In a maintenance workflow, users may need to know:

  • which material is required for a task
  • which material master data belongs to a material
  • where the material is stored
  • how much material is available
  • how much material is already reserved
  • which reservations exist for a task
  • whether a reservation is planned, confirmed, issued, cancelled, or expired

The material management implementation separates the general material catalogue from the actual material quantity and reservation handling.

Basic concept

The material management implementation is built around the following main objects:

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 / transaction object Represents a material reservation for a task. It links a material to a task and stores planned and actual quantities.
GoodsMovement Base class Provides the common QUANTITY property used by both materials and reservations.
StorageLocation Storage master / location object Represents a physical storage location and stores storage-related information such as storage type, dimensions, access type, and occupancy status.

Core idea: MaterialMaster defines what the material is. Material represents the material in the MRO 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 Base class Provides QUANTITY to derived objects
Storage Location UBIK.MRO.StorageLocation Functional location specialization Referenced by Material via LK_STORAGE_LOCATION

GoodsMovement

Purpose

GoodsMovement is the base class for material-related quantity-bearing objects.

It defines the common quantity concept used by both:

  • Material
  • Reservation

Important properties

Property Type Meaning
QUANTITY double Quantity value for the goods movement. For Material, this is the material quantity. For Reservation, this is the actual reservation quantity and has reservation-specific validation.

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.

A material master describes the material independently from a concrete reservation or task.

Important properties

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

Material type

The typed material type accessor is MaterialType.

Known values are:

  • SpareParts
  • Consumables
  • Tools

Open point: No explicit SAP or ERP synchronization behavior was found in the inspected classes. ITEM_NUMBER may correspond to an external material number, but the exact SAP/ERP mapping is unclear from the available code information.

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

It also exposes calculated reservation and availability logic.

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 int Underlying integer value for the material status. Stored property
MaterialStatus enum Typed accessor for MATERIAL_STATUS. Stored through MATERIAL_STATUS

Material status

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

Known values are:

Value Numeric value Meaning
Undefined 0 No specific material status is defined.
Inactive 10 Material is inactive.
Active 20 Material is active.

Open point: The inspected class information does not show specific methods that automatically change MaterialStatus. Status changes outside these classes are unclear from code.

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.

Important: RESERVED_QUANTITY is not treated as a normal stored quantity in the business logic. It is computed from confirmed Reservation objects.

Available quantity

The available material quantity is calculated by the method AvailableQuantity().

AvailableQuantity = QUANTITY - RESERVED_QUANTITY

Active reservations

The method HasActiveReservation() checks whether active reservations exist for the material.

It queries reservations where:

  • LK_MATERIAL points to the current material
  • STATUS is lower than or equal to ReservationStatus.Confirmed

This means the method considers reservations up to the confirmed state as active.

Delete behavior

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

Deletion is only allowed if the base delete conditions are fulfilled and:

  • 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 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 can also store an actual quantity through the overridden QUANTITY property.

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 int Underlying integer value for the reservation status. Changes are validated by AllowStatusChange(int newStatus).
Status ReservationStatus Typed accessor for STATUS. Uses the ReservationStatus enum.
QTY_PLANNED double Planned quantity for the reservation. Setter validates through AllowQuantityPlanned(double).
QUANTITY double Actual reservation quantity. Overrides GoodsMovement.QUANTITY. Setter validates through AllowQuantity(double).

Reservation status

The reservation status is stored in STATUS and exposed through the typed accessor Status.

Known 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. This is only allowed if the reservation has not been issued.
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

This prevents changing the task or material after the reservation has reached a more binding status.

StorageLocation

Purpose

StorageLocation represents a physical storage location.

It is a functional location specialization and can be linked from Material via LK_STORAGE_LOCATION.

A storage location stores information about storage type, dimensions, access type, label, level, position, and occupancy.

Important properties

Property Type Meaning
STORAGE_TYPE int Underlying integer value for storage type.
StorageType enum Typed accessor for STORAGE_TYPE.
MAX_WEIGHT double Maximum allowed weight for the storage location.
MAX_VOLUME double Maximum allowed volume for the storage location.
LENGTH double Length of the storage location.
WIDTH double Width of the storage location.
HEIGHT double Height of the storage location.
ACCESS_TYPE int Underlying integer value for access type.
AccessType enum Typed accessor for ACCESS_TYPE.
STORAGE_LABEL string Label of the storage location.
LEVEL int Level of the storage location.
POSITION string Position identifier.
OCCUPANCY_STATUS int Underlying integer value for occupancy status.
OccupancyStatus enum Typed accessor for OCCUPANCY_STATUS.

Storage type

Known values of StorageType are:

  • Floor
  • Shelf
  • Rack
  • Bin
  • Pallet
  • Container

Access type

Known values of AccessType are:

  • Manual
  • Forklift
  • Crane
  • Automated

Occupancy status

Known values of OccupancyStatus are:

  • Empty
  • Partial
  • Full
  • Reserved
  • Blocked
  • OutOfService

Open point: The inspected StorageLocation information does not show automatic occupancy calculation. It is unclear from code whether OCCUPANCY_STATUS is updated manually, by workflow logic, or by another module.

Relations

The following relations are relevant for material management.

Relation Source Target Meaning
LK_MATERIAL_MASTER Material MaterialMaster Links a material instance to its master data.
LK_STORAGE_LOCATION Material StorageLocation Defines where the material is stored.
LK_MATERIAL Reservation Material Defines which material is reserved.
LK_TASK Reservation Task Defines the task for which the material is reserved.

Quantity concepts

Material quantity

The material quantity is stored in Material.QUANTITY.

Because Material inherits from GoodsMovement, the property is inherited from the base class.

Reserved quantity

The reserved quantity is exposed through Material.RESERVED_QUANTITY.

It is calculated by summing the QTY_PLANNED values of confirmed reservations for the material.

Only reservations with Status equal to ReservationStatus.Confirmed are included in this calculation.

Available quantity

Available quantity is calculated by Material.AvailableQuantity().

AvailableQuantity = QUANTITY - RESERVED_QUANTITY

Planned reservation quantity

The planned reservation quantity is stored in Reservation.QTY_PLANNED.

It can only be set if:

  • the reservation is still Planned
  • a material is assigned
  • the quantity is greater than 0
  • the quantity does not exceed the material's available quantity

Actual reservation quantity

The actual reservation quantity is stored in Reservation.QUANTITY.

This property overrides GoodsMovement.QUANTITY and can only be set if the status is Planned or Confirmed and the new quantity is greater than 0.

Quantity overview

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).
Actual reservation quantity QUANTITY Reservation Stored Overrides GoodsMovement.QUANTITY and is validated by AllowQuantity(double).

Reservation workflow

Creating or editing a reservation

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 should 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 because:

AvailableQuantity = QUANTITY - sum(QTY_PLANNED of confirmed reservations)

Wiki Under Construction End.PNG