(→Goods movement usage) |
|||
| (12 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
| − | |||
== MRO Material Management == | == MRO Material Management == | ||
<div style="border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;"> | <div style="border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;"> | ||
| − | '''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 <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;">Reservation | + | '''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 <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>, 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;">Reservation</span>. Materials are linked to master data and storage locations. Reservations are created manually by users and link materials to tasks. |
</div> | </div> | ||
| − | MRO material management is used to support maintenance work with | + | 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 == | == Basic concept == | ||
| − | |||
| − | |||
{| class="wikitable" | {| class="wikitable" | ||
| Line 38: | Line 25: | ||
|- | |- | ||
| <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;">Reservation</span> | ||
| − | | Workflow | + | | Workflow object |
| − | | Represents a material reservation for a task. It links a material to a task and stores planned and actual quantities. | + | | Represents a manually created material reservation for a task. It links a material to a task and stores planned and actual quantities. |
|- | |- | ||
| <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> | | <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> | ||
| − | | | + | | Technical base class |
| Provides the common <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 used by both materials and reservations. | | Provides the common <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 used by both materials and reservations. | ||
|- | |- | ||
| <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> | ||
| − | | | + | | Related storage object |
| − | | Represents a physical storage location | + | | Represents a physical storage location for materials. |
|} | |} | ||
<div style="border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;"> | <div style="border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;"> | ||
| − | '''Core idea:''' <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> defines what the material 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;">Material</span> represents the material in | + | '''Core idea:''' <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> defines what the material 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;">Material</span> represents the material in stock or material context. <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> links a material to a task and reserves a planned quantity for maintenance execution. |
</div> | </div> | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
== MaterialMaster == | == MaterialMaster == | ||
| Line 118: | Line 51: | ||
It stores item-level master data that can be referenced by material instances in MRO. | It stores item-level master data that can be referenced by material instances in MRO. | ||
| − | |||
| − | |||
=== Important properties === | === Important properties === | ||
| Line 130: | Line 61: | ||
| <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;">ITEM_NUMBER</span> | ||
| string | | string | ||
| − | | Item number or material number | + | | Item number or material number. |
|- | |- | ||
| <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;">PACKAGING_UNIT</span> | ||
| string | | string | ||
| − | | Packaging unit | + | | Packaging unit. |
|- | |- | ||
| <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;">PACKAGING_SIZE</span> | ||
| Line 146: | Line 77: | ||
| <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> | | <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 | | string | ||
| − | | Unit of measure | + | | Unit of measure. |
|- | |- | ||
| − | | <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_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;">MaterialType</span> |
| − | + | | int / enum | |
| − | + | | Material type. | |
| − | + | ||
| − | + | ||
| − | | 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;">MANUFACTURER_COMPANY_NAME</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> | ||
| Line 167: | Line 94: | ||
=== Material type === | === Material type === | ||
| − | + | 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;">MaterialType</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;">SpareParts</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;">SpareParts</span> | ||
| Line 175: | Line 100: | ||
* <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> | * <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> | ||
| − | |||
| − | |||
| − | |||
== Material == | == Material == | ||
| Line 191: | Line 113: | ||
* 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> | * 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> | ||
* 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> | * 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> | ||
| − | |||
| − | |||
=== Important properties === | === Important properties === | ||
| Line 222: | Line 142: | ||
| Calculated property | | 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;">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;">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;">MaterialStatus</span> |
| − | + | | int / enum | |
| − | + | | Material status. | |
| − | + | | User/admin managed property | |
| − | + | ||
| − | + | ||
| − | | enum | + | |
| − | | | + | |
| − | | | + | |
|} | |} | ||
=== Material status === | === Material status === | ||
| − | 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 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 <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>. |
| − | + | The property is managed by the user or administrator. The system does not change it automatically. | |
{| class="wikitable" | {| class="wikitable" | ||
| Line 250: | Line 165: | ||
| <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> | | <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 | | 10 | ||
| − | | Material is inactive. | + | | Material is inactive and should not be used for new reservations. |
|- | |- | ||
| <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;">Active</span> | ||
| 20 | | 20 | ||
| − | | Material is active. | + | | Material is active and can be used for reservations. |
|} | |} | ||
| − | |||
| − | |||
| − | |||
| − | |||
=== Reserved quantity === | === Reserved quantity === | ||
| Line 271: | Line 182: | ||
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. | 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. | ||
| − | |||
| − | |||
| − | |||
| − | |||
=== Available quantity === | === Available quantity === | ||
| − | The available material quantity is calculated by | + | The available material 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;">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;"> | <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 | AvailableQuantity = QUANTITY - RESERVED_QUANTITY | ||
</div> | </div> | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
=== Delete behavior === | === 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. | <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. | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
<div style="border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;"> | <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. | '''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> | ||
| + | |||
== Reservation == | == Reservation == | ||
| Line 312: | Line 204: | ||
=== 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;">Reservation</span> represents a material reservation for a task. | + | <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 manually created material reservation for a task. |
It links: | It links: | ||
| Line 319: | Line 211: | ||
* 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 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> | ||
| − | 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 | + | 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 the actually issued or consumed 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;">QUANTITY</span>. |
=== Important properties === | === Important properties === | ||
| Line 339: | Line 231: | ||
| 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>. | | 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> | + | | <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;">Status</span> |
| − | | int | + | | int / enum |
| − | | | + | | 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>. | | 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;">QTY_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> | ||
| Line 356: | Line 243: | ||
| <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 | | double | ||
| − | | | + | | Actually issued or consumed 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>. | | 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>. | ||
|} | |} | ||
| Line 362: | Line 249: | ||
=== Reservation status === | === Reservation status === | ||
| − | + | 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" | {| class="wikitable" | ||
| Line 385: | Line 270: | ||
| <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> | | <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 | | 30 | ||
| − | | Reservation was cancelled | + | | Reservation was cancelled. |
|- | |- | ||
| <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> | | <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> | ||
| Line 391: | Line 276: | ||
| Reservation has expired. | | Reservation has expired. | ||
|} | |} | ||
| + | |||
=== Status change rules === | === Status change rules === | ||
| Line 415: | Line 301: | ||
* <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 | * <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 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> | + | * 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;"> | <div style="border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;"> | ||
| Line 438: | Line 324: | ||
* <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;">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> | * <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> | ||
| − | |||
| − | |||
== StorageLocation == | == StorageLocation == | ||
| Line 445: | Line 329: | ||
=== 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;">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> is a related object used to represent a physical storage location. |
| − | + | A material can reference 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>. | |
| − | + | === Important properties and values === | |
| − | + | ||
| − | === Important properties === | + | |
{| class="wikitable" | {| class="wikitable" | ||
! Property | ! Property | ||
! Type | ! Type | ||
| − | ! | + | ! Values / 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;">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;">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;">StorageType</span> |
| − | | int | + | | int / 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;">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> |
|- | |- | ||
| − | | <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;"> | + | | <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;">AccessType</span> |
| − | | enum | + | | int / 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;">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> |
|- | |- | ||
| − | | <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;"> | + | | <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> / <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> |
| − | + | | int / 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;">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> | |
| − | + | ||
| − | + | ||
| − | | | + | |
| − | + | ||
| − | + | ||
| − | | <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;"> | + | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
|- | |- | ||
| <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> | | <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> | ||
| Line 505: | Line 363: | ||
| string | | string | ||
| Position identifier. | | Position identifier. | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
|} | |} | ||
| − | == | + | == GoodsMovement == |
| − | + | <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> is a technical base class. | |
| − | + | It provides the common <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 for material-related objects such as <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> 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;">Reservation</span>. | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
== Quantity concepts == | == Quantity concepts == | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
{| class="wikitable" | {| class="wikitable" | ||
| Line 644: | Line 396: | ||
|- | |- | ||
| Available quantity | | Available 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;">AvailableQuantity()</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;">AvailableQuantity()</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;">Material</span> | ||
| Calculated | | Calculated | ||
| Line 655: | Line 407: | ||
| 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>. | | 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>. | ||
|- | |- | ||
| − | | | + | | Actually issued or consumed 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> | ||
| <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;">Reservation</span> | ||
| Line 665: | Line 417: | ||
=== Creating or editing a reservation === | === Creating or editing a reservation === | ||
| + | |||
| + | Reservations are created manually by the user. | ||
A reservation links a material to a task. | A reservation links a material to a task. | ||
| Line 671: | Line 425: | ||
# <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_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> | + | # <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> must 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;">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 be greater than 0. | ||
| Line 680: | Line 434: | ||
When a reservation is confirmed, it contributes to the material's reserved quantity. | When a reservation is confirmed, it contributes to the material's reserved quantity. | ||
| − | This affects the available quantity of the material | + | This affects the available quantity of the material. |
<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;"> | <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;"> | ||
| Line 689: | Line 443: | ||
When a task is finished, the task logic calls <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;">CloseReservations()</span>. | When a task is finished, the task logic calls <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;">CloseReservations()</span>. | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
<div style="border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;"> | <div style="border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;"> | ||
'''Workflow effect:''' Finishing a task closes its reservations. Confirmed reservations become <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>; other active reservations become <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>. | '''Workflow effect:''' Finishing a task closes its reservations. Confirmed reservations become <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>; other active reservations become <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>. | ||
</div> | </div> | ||
| + | |||
== Usage in tasks == | == Usage in tasks == | ||
| Line 710: | Line 458: | ||
* the task 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;">LK_TASK</span> | * the task 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;">LK_TASK</span> | ||
* the planned quantity 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;">QTY_PLANNED</span> | * the planned quantity 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;">QTY_PLANNED</span> | ||
| + | * the actually issued or consumed quantity 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;">QUANTITY</span> | ||
* the reservation state 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;">Status</span> | * the reservation state 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;">Status</span> | ||
| − | This means that material usage is tracked at task level | + | This means that material usage is tracked at task level. |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
== Example workflow == | == Example workflow == | ||
| − | |||
| − | |||
| − | |||
| − | |||
=== Step 1: Material master exists === | === Step 1: Material master exists === | ||
| − | + | A spare part is defined as 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;">MaterialMaster</span>. | |
{| class="wikitable" | {| class="wikitable" | ||
| Line 776: | Line 503: | ||
| 0 | | 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;">AvailableQuantity()</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;">AvailableQuantity()</span> |
| 10 | | 10 | ||
|} | |} | ||
| Line 782: | Line 509: | ||
=== Step 3: Reservation is created for a task === | === Step 3: Reservation is created for a task === | ||
| − | 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;">Reservation</span> links the material to the task. | + | A user manually creates 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;">Reservation</span> and links the material to the task. |
{| class="wikitable" | {| class="wikitable" | ||
| Line 800: | Line 527: | ||
| 1 | | 1 | ||
|} | |} | ||
| − | |||
| − | |||
=== Step 4: Reservation is confirmed === | === Step 4: Reservation is confirmed === | ||
| Line 819: | Line 544: | ||
| 1 | | 1 | ||
|- | |- | ||
| − | | <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> | + | | <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> |
| 9 | | 9 | ||
|} | |} | ||
| − | === Step 5: Task is finished === | + | === Step 5: Actual quantity is entered === |
| + | |||
| + | The actually issued or consumed 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>. | ||
| + | |||
| + | {| class="wikitable" | ||
| + | ! Property | ||
| + | ! Example | ||
| + | |- | ||
| + | | <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> | ||
| + | | 1 | ||
| + | |} | ||
| + | |||
| + | === Step 6: Task is finished === | ||
When the task is finished, <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;">CloseReservations()</span> is called. | When the task is finished, <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;">CloseReservations()</span> is called. | ||
| Line 830: | Line 567: | ||
== Validation and business rules == | == Validation and business rules == | ||
| − | |||
| − | |||
{| class="wikitable" | {| class="wikitable" | ||
! Area | ! Area | ||
! Rule | ! Rule | ||
| − | |||
|- | |- | ||
| Planned reservation quantity | | Planned 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;">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 be greater than 0. | ||
| − | |||
|- | |- | ||
| Planned reservation quantity | | Planned 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;">QTY_PLANNED</span> can only be changed while 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;">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> can only be changed while 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;">Planned</span>. | ||
| − | |||
|- | |- | ||
| Planned reservation quantity | | Planned 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;">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>. | | <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>. | ||
| − | |||
|- | |- | ||
| − | | Actual | + | | Actual issued or consumed 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> 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;">QUANTITY</span> must be greater than 0. | ||
| − | |||
|- | |- | ||
| − | | Actual | + | | Actual issued or consumed 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> can only be changed while 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;">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>. | | <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> can only be changed while 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;">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>. | ||
| − | |||
|- | |- | ||
| Reservation status | | Reservation status | ||
| Status cannot be changed once 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>. | | Status cannot be changed once 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>. | ||
| − | |||
|- | |- | ||
| Reservation status | | Reservation status | ||
| A reservation cannot be changed 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>. | | A reservation cannot be changed 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>. | ||
| − | |||
|- | |- | ||
| Reservation links | | Reservation links | ||
| <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> cannot be changed 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_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> cannot be changed 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>. | ||
| − | |||
|- | |- | ||
| Material deletion | | Material deletion | ||
| Material cannot be deleted while <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 greater than 0. | | Material cannot be deleted while <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 greater than 0. | ||
| − | |||
|- | |- | ||
| Material deletion | | Material deletion | ||
| Material cannot be deleted while active reservations exist. | | Material cannot be deleted while active reservations exist. | ||
| − | |||
|} | |} | ||
| − | + | ||
| + | == See also == | ||
| + | * [[MRO (Plugin)]] | ||
| + | * [[MRO_Objects_(Client)]] | ||
| + | * [[MRO_Implemented_Objects]] | ||
| + | * [[MROMaintenancePlans]] | ||
Latest revision as of 13:42, 23 June 2026
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.
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.
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:
- LK_MATERIAL must be set.
- LK_TASK must point to the task requiring the material.
- Status must still be Planned.
- QTY_PLANNED must be greater than 0.
- 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().
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 |
|---|---|
| Planned reservation quantity | QTY_PLANNED must be greater than 0. |
| Planned reservation quantity | QTY_PLANNED can only be changed while the reservation is Planned. |
| Planned reservation quantity | QTY_PLANNED must not exceed LK_MATERIAL.AvailableQuantity(). |
| Actual issued or consumed quantity | QUANTITY must be greater than 0. |
| Actual issued or consumed quantity | QUANTITY can only be changed while the reservation is Planned or Confirmed. |
| Reservation status | Status cannot be changed once the reservation is Issued. |
| Reservation status | A reservation cannot be changed from Confirmed back to Planned. |
| Reservation links | LK_TASK and LK_MATERIAL cannot be changed when status is Issued or Confirmed. |
| Material deletion | Material cannot be deleted while QUANTITY is greater than 0. |
| Material deletion | Material cannot be deleted while active reservations exist. |