METHOD08 - Combined Method
Overview
The Combined Method is the most sophisticated handling unit calculation method, combining layer-based and height-based calculations with multiple constraints. This method calculates full handling units, layer handling units, and pick handling units separately, then combines them for an optimal result that respects both capacity and height limitations.
Purpose
This method calculates the Expected Shipment Handling Unit Qty. by:
- Calculating full handling units based on capacity
- Calculating layer handling units based on height constraints
- Calculating pick handling units for remaining quantity using volume
- Optionally converting to EUR pallet equivalent
- Handling interleave handling units and rounding scenarios
Parameters
| Parameter Name | Type | Description | Default |
|---|---|---|---|
ROUND_TO_FULL_LAYERS |
Boolean | Round to full layers when interleave is required | true |
INTERLEAVE_COND_FILT |
Text | Filter to check for interleave condition(s) | (empty) |
MIX_REMINT_COND_FILT |
Text | Filter to check for "remove interleave condition for mix handling unit" condition(s) | (empty) |
USE_EQUIVALENT |
Boolean | Convert result to standard handling unit equivalent (EUR pallet) | false |
Algorithm
The algorithm follows a structured decision tree with numbered steps and clear flow.
Step 1: Determine Handling Unit Type
Determine which handling unit type to use:
- Get first shipment handling unit type from conditions
- If empty, use
DocumentLine."Handling Unit Type Code" - If empty, get from Customer Item (Shipment or Receipt)
- If empty, get from Handling Unit Content table
Go to Step 2
Step 2: Get Handling Unit Type UOM
Retrieve the Handling Unit Type Unit of Measure:
- Look up
CarrierTypeUOMfor customer item, unit of measure, and handling unit type - If not found, try handling unit type group
Go to Step 3
Step 3: Calculate Full Handling Unit Height
Calculate the height of a full handling unit:
FullCarrierHeight = (CarrierTypeUOM."Qty. per UOM Code" div CarrierTypeUOM."Qty. per Layer") × CarrierTypeUOM.Height
Go to Step 4
Step 4: Determine Maximum Height
Get maximum allowed height:
- If maximum height from conditions > 0:
MaxHeight = MaxHeight from Conditions - CarrierType.Height- (Condition height includes ground handling unit, so subtract handling unit height)
- Else:
MaxHeight = CarrierType."Pick Max. Load Height"- (Handling Unit height excludes ground handling unit)
Go to Step 5
Step 5: Check Full Handling Unit Height vs Maximum Height
If FullCarrierHeight > MaxHeight:
- Full handling units cannot fit within height constraint
- Go to Step 6A
Else:
- Full handling units can fit within height constraint
- Go to Step 6B
Step 6A: Full Handling Unit Height Exceeds Maximum (FullCarriers = 0)
If UseInterleave AND RoundToFullLayers:
- Calculate full layers:
FullLayers = Round(Quantity / CarrierTypeUOM."Qty. per Layer", 1, '>') RestQty = 0- Go to Step 7
Else:
- Calculate full layers:
FullLayers = Quantity div CarrierTypeUOM."Qty. per Layer" - Calculate remaining:
RestQty = Quantity mod CarrierTypeUOM."Qty. per Layer" - Go to Step 7
Step 6B: Full Handling Unit Height Within Maximum
If UseInterleave AND RoundToFullLayers:
- Calculate full handling units:
FullCarriers = Quantity div CarrierTypeUOM."Qty. per UOM Code" - Calculate full layers:
FullLayers = Round((Quantity - FullCarriers × Qty. per UOM Code) / Qty. per Layer, 1, '>') RestQty = 0- Go to Step 7
Else:
- Calculate full handling units:
FullCarriers = Quantity div CarrierTypeUOM."Qty. per UOM Code" - Calculate full layers:
FullLayers = (Quantity - FullCarriers × Qty. per UOM Code) div Qty. per Layer - Calculate remaining:
RestQty = (Quantity - FullCarriers × Qty. per UOM Code) mod Qty. per Layer - Go to Step 7
Step 7: Calculate Layer Handling Units
Calculate handling units needed for layers:
ThisHeight = FullLayers × CarrierTypeUOM.Height
LayerCarriers = ThisHeight / MaxHeight
If LayerCarriers > 0 AND UseInterleave:
- Add interleave height:
ThisHeight = ThisHeight + CarrierType.Height - Recalculate:
LayerCarriers = ThisHeight / MaxHeight
Go to Step 8
Step 8: Calculate Pick Handling Units (if RestQty > 0)
If RestQty > 0:
Determine Order Pick Handling Unit Type:
- Get from conditions
- If empty, use same as full handling unit type
- Get Order Pick Handling Unit Type UOM
Check Interleave Conditions:
- If interleave condition exists AND mix remove interleave condition does NOT exist:
- Calculate pick handling units with rounding to 1 decimal:
PickCarriers = Round((UnitOfMeasure.Cubage / (Length × Width × MaxHeight)) × RestQty, 1, '>')
- Calculate pick handling units with rounding to 1 decimal:
- Else:
- Calculate pick handling units with normal rounding:
PickCarriers = Round((UnitOfMeasure.Cubage / (Length × Width × MaxHeight)) × RestQty, 0.001, '>')
- Calculate pick handling units with normal rounding:
- If interleave condition exists AND mix remove interleave condition does NOT exist:
Go to Step 9
Step 9: Calculate Final Result
Result = FullCarriers + LayerCarriers + PickCarriers
Go to Step 10
Step 10: Convert to EUR Equivalent (if USE_EQUIVALENT = true)
If USE_EQUIVALENT parameter is enabled:
- Get default handling unit type from WMS Setup (EUR pallet)
- Calculate equivalent factor:
Equivalent = Round((CarrierType.Length × CarrierType.Width) / (EURCarrierType.Length × EURCarrierType.Width), 0.001, '>') - Convert result:
Result = Round(Result × Equivalent, 0.001, '>')
End
Mermaid Flowchart
flowchart TD
Start([Start Calculation]) --> Step1[Step 1: Determine Handling Unit Type<br/>From conditions, document line, or customer item]
Step1 --> Step2[Step 2: Get Handling Unit Type UOM<br/>Lookup UOM for handling unit type]
Step2 --> Step3[Step 3: Calculate Full Handling Unit Height<br/>FullCarrierHeight = Qty per UOM div Qty per Layer × Height]
Step3 --> Step4[Step 4: Determine Maximum Height<br/>From conditions or handling unit type]
Step4 --> Step5{Step 5: FullCarrierHeight<br/>> MaxHeight?}
Step5 -->|Yes| Step6A[Step 6A: FullCarriers = 0<br/>Cannot fit full handling units]
Step5 -->|No| Step6B[Step 6B: Calculate Full Handling Units<br/>FullCarriers = Quantity div Qty per UOM Code]
Step6A --> CheckInterleaveA{UseInterleave AND<br/>RoundToFullLayers?}
Step6B --> CheckInterleaveB{UseInterleave AND<br/>RoundToFullLayers?}
CheckInterleaveA -->|Yes| CalcLayersA1[FullLayers = Round Quantity / Qty per Layer UP<br/>RestQty = 0]
CheckInterleaveA -->|No| CalcLayersA2[FullLayers = Quantity div Qty per Layer<br/>RestQty = Quantity mod Qty per Layer]
CheckInterleaveB -->|Yes| CalcLayersB1[FullCarriers = Quantity div Qty per UOM Code<br/>FullLayers = Round remainder / Qty per Layer UP<br/>RestQty = 0]
CheckInterleaveB -->|No| CalcLayersB2[FullCarriers = Quantity div Qty per UOM Code<br/>FullLayers = remainder div Qty per Layer<br/>RestQty = remainder mod Qty per Layer]
CalcLayersA1 --> Step7
CalcLayersA2 --> Step7
CalcLayersB1 --> Step7
CalcLayersB2 --> Step7
Step7[Step 7: Calculate Layer Handling Units<br/>ThisHeight = FullLayers × Height<br/>LayerCarriers = ThisHeight / MaxHeight] --> CheckInterleaveStep7{LayerCarriers > 0<br/>AND UseInterleave?}
CheckInterleaveStep7 -->|Yes| AddInterleave[Add CarrierType.Height<br/>Recalculate LayerCarriers]
CheckInterleaveStep7 -->|No| Step8
AddInterleave --> Step8
Step8{Step 8: RestQty > 0?} -->|Yes| GetOrderPickType[Get Order Pick Handling Unit Type<br/>From conditions or use full handling unit type]
GetOrderPickType --> CheckInterleaveCond{Interleave condition exists<br/>AND Mix Remove NOT exists?}
CheckInterleaveCond -->|Yes| CalcPickCarriers1[PickCarriers = Round Volume calc × RestQty<br/>Round to 1 decimal UP]
CheckInterleaveCond -->|No| CalcPickCarriers2[PickCarriers = Round Volume calc × RestQty<br/>Round to 0.001 UP]
Step8 -->|No| Step9
CalcPickCarriers1 --> Step9
CalcPickCarriers2 --> Step9
Step9[Step 9: Calculate Final Result<br/>Result = FullCarriers + LayerCarriers + PickCarriers] --> Step10{Step 10: USE_EQUIVALENT<br/>= true?}
Step10 -->|Yes| CalcEquivalent[Calculate Equivalent Factor<br/>Convert to EUR pallet equivalent]
Step10 -->|No| End
CalcEquivalent --> End([End])
Calculation Steps
Variable Definitions
- A = Full handling units (integer)
- B = Full layers (integer)
- C = Remaining quantity (RestQty)
- D = Total height for layers (ThisHeight)
- E = Layer handling units (decimal)
- F = Pick handling units (decimal)
- G = Final result before equivalent
- H = Equivalent factor (if applicable)
- I = Final result (after equivalent if applicable)
Step-by-Step Formula
Calculate full handling unit height:
FullCarrierHeight = (CarrierTypeUOM."Qty. per UOM Code" div CarrierTypeUOM."Qty. per Layer") × CarrierTypeUOM.HeightDetermine maximum height:
If MaxHeight from Conditions > 0: MaxHeight = MaxHeight from Conditions - CarrierType.Height Else: MaxHeight = CarrierType."Pick Max. Load Height"Calculate full handling units and layers (based on height constraint):
If FullCarrierHeight > MaxHeight: A = 0 B = Quantity div CarrierTypeUOM."Qty. per Layer" (or rounded if interleave) C = Quantity mod CarrierTypeUOM."Qty. per Layer" (or 0 if rounded) Else: A = Quantity div CarrierTypeUOM."Qty. per UOM Code" B = (Quantity - A × Qty. per UOM Code) div CarrierTypeUOM."Qty. per Layer" C = (Quantity - A × Qty. per UOM Code) mod CarrierTypeUOM."Qty. per Layer"Calculate layer handling units:
D = B × CarrierTypeUOM.Height E = D / MaxHeight If E > 0 AND UseInterleave: D = D + CarrierType.Height E = D / MaxHeightCalculate pick handling units (if C > 0):
If Interleave condition AND NOT Mix Remove condition: F = Round((UnitOfMeasure.Cubage / (Length × Width × MaxHeight)) × C, 1, '>') Else: F = Round((UnitOfMeasure.Cubage / (Length × Width × MaxHeight)) × C, 0.001, '>')Calculate final result:
G = A + E + FConvert to equivalent (if USE_EQUIVALENT = true):
H = (CarrierType.Length × CarrierType.Width) / (EURCarrierType.Length × EURCarrierType.Width) I = Round(G × H, 0.001, '>')
Examples
Example 1: Full Handling Units Within Height Limit
Scenario:
Quantity= 200 piecesCarrierTypeUOM."Qty. per UOM Code"= 50 pieces per handling unitCarrierTypeUOM."Qty. per Layer"= 10 pieces per layerCarrierTypeUOM.Height= 0.20 m per layer- Full handling unit height = (50 div 10) × 0.20 = 1.00 m
MaxHeight= 1.60 m (from handling unit type)- No interleave, no rounding to full layers
Calculation:
- Full handling unit height: 1.00 m < 1.60 m → Can fit full handling units
- Full handling units: A = 200 div 50 = 4 handling units (200 pieces)
- Remaining: 200 - (4 × 50) = 0 pieces
- Full layers: B = 0 div 10 = 0 layers
- Remaining quantity: C = 0 pieces
- Layer handling units: E = 0 / 1.60 = 0 handling units
- Pick handling units: F = 0 (no remainder)
- Result: G = 4 + 0 + 0 = 4 handling units
Result: 4 handling units
Example 2: Full Handling Units Exceed Height Limit
Scenario:
Quantity= 450 piecesCarrierTypeUOM."Qty. per UOM Code"= 90 pieces per handling unitCarrierTypeUOM."Qty. per Layer"= 10 pieces per layerCarrierTypeUOM.Height= 0.20 m per layer- Full handling unit height = (90 div 10) × 0.20 = 1.80 m
MaxHeight= 1.50 m (from conditions)- No interleave, no rounding
Calculation:
- Full handling unit height: 1.80 m > 1.50 m → Cannot fit full handling units
- Full handling units: A = 0 (cannot fit)
- Full layers: B = 450 div 10 = 45 layers
- Remaining quantity: C = 450 mod 10 = 0 pieces
- Layer height: D = 45 × 0.20 = 9.00 m
- Layer handling units: E = 9.00 / 1.50 = 6.0 handling units
- Pick handling units: F = 0 (no remainder)
- Result: G = 0 + 6.0 + 0 = 6.0 handling units
Result: 6.0 handling units
Example 3: With Remaining Quantity and Pick Handling Units
Scenario:
Quantity= 175 piecesCarrierTypeUOM."Qty. per UOM Code"= 50 pieces per handling unitCarrierTypeUOM."Qty. per Layer"= 10 pieces per layerCarrierTypeUOM.Height= 0.20 m per layer- Full handling unit height = (50 div 10) × 0.20 = 1.00 m
MaxHeight= 1.60 mUnitOfMeasure.Cubage= 0.05 m³ per piece- Order pick handling unit: Length = 1.2 m, Width = 0.8 m
- No interleave conditions
Calculation:
- Full handling unit height: 1.00 m < 1.60 m → Can fit full handling units
- Full handling units: A = 175 div 50 = 3 handling units (150 pieces)
- Remaining: 175 - (3 × 50) = 25 pieces
- Full layers: B = 25 div 10 = 2 layers (20 pieces)
- Remaining quantity: C = 25 mod 10 = 5 pieces
- Layer height: D = 2 × 0.20 = 0.40 m
- Layer handling units: E = 0.40 / 1.60 = 0.25 handling units
- Pick handling units: F = Round((0.05 / (1.2 × 0.8 × 1.60)) × 5, 0.001, '>') = Round(0.163, 0.001, '>') = 0.163 handling units
- Result: G = 3 + 0.25 + 0.163 = 3.413 handling units
Result: 3.413 handling units
Example 4: With Interleave and Rounding to Full Layers
Scenario:
Quantity= 87 piecesCarrierTypeUOM."Qty. per UOM Code"= 50 pieces per handling unitCarrierTypeUOM."Qty. per Layer"= 10 pieces per layerCarrierTypeUOM.Height= 0.15 m per layer- Full handling unit height = (50 div 10) × 0.15 = 0.75 m
MaxHeight= 1.50 mCarrierType.Height= 0.15 m (interleave)ROUND_TO_FULL_LAYERS= true- Interleave enabled
Calculation:
- Full handling unit height: 0.75 m < 1.50 m → Can fit full handling units
- Full handling units: A = 87 div 50 = 1 handling unit (50 pieces)
- Remaining: 87 - 50 = 37 pieces
- Full layers: B = Round(37 / 10, 1, '>') = 4 layers (rounded up)
- Remaining quantity: C = 0 (rounded to full layers)
- Layer height: D = 4 × 0.15 = 0.60 m
- Add interleave: D = 0.60 + 0.15 = 0.75 m
- Layer handling units: E = 0.75 / 1.50 = 0.5 handling units
- Pick handling units: F = 0 (no remainder)
- Result: G = 1 + 0.5 + 0 = 1.5 handling units
Result: 1.5 handling units
Example 5: With EUR Equivalent Conversion
Scenario:
- Same as Example 1, but
USE_EQUIVALENT= true - Result from Example 1: G = 4 handling units
- Actual handling unit type: Block pallet (1000 × 1200 mm)
- EUR pallet (default): 1200 × 800 mm
Calculation:
- Base result: G = 4 handling units
- Equivalent factor: H = (1000 × 1200) / (1200 × 800) = 1.25
- EUR equivalent: I = Round(4 × 1.25, 0.001, '>') = 5.0 EUR pallets
Result: 5.0 EUR pallet equivalent
Important Notes
- This is the most complex calculation method with multiple decision points
- Full handling unit height check determines the calculation path
- Interleave handling units affect both layer calculation and pick handling unit rounding
- The
MIX_REMINT_COND_FILTparameter allows removing interleave requirement for mixed handling units - Maximum height interpretation differs between conditions (includes ground handling unit) and handling unit type (excludes ground handling unit)
- Pick handling units use volume-based calculation for remaining quantity