Table of Contents

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:

  1. Calculating full handling units based on capacity
  2. Calculating layer handling units based on height constraints
  3. Calculating pick handling units for remaining quantity using volume
  4. Optionally converting to EUR pallet equivalent
  5. 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:

  1. Get first shipment handling unit type from conditions
  2. If empty, use DocumentLine."Handling Unit Type Code"
  3. If empty, get from Customer Item (Shipment or Receipt)
  4. 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 CarrierTypeUOM for 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:

  1. 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
  2. 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, '>')
        
    • Else:
      • Calculate pick handling units with normal rounding:
        PickCarriers = Round((UnitOfMeasure.Cubage / (Length × Width × MaxHeight)) × RestQty, 0.001, '>')
        

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:

  1. Get default handling unit type from WMS Setup (EUR pallet)
  2. Calculate equivalent factor:
    Equivalent = Round((CarrierType.Length × CarrierType.Width) / (EURCarrierType.Length × EURCarrierType.Width), 0.001, '>')
    
  3. 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

  1. Calculate full handling unit height:

    FullCarrierHeight = (CarrierTypeUOM."Qty. per UOM Code" div CarrierTypeUOM."Qty. per Layer") × CarrierTypeUOM.Height
    
  2. Determine maximum height:

    If MaxHeight from Conditions > 0:
        MaxHeight = MaxHeight from Conditions - CarrierType.Height
    Else:
        MaxHeight = CarrierType."Pick Max. Load Height"
    
  3. 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"
    
  4. Calculate layer handling units:

    D = B × CarrierTypeUOM.Height
    E = D / MaxHeight
    
    If E > 0 AND UseInterleave:
        D = D + CarrierType.Height
        E = D / MaxHeight
    
  5. Calculate 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, '>')
    
  6. Calculate final result:

    G = A + E + F
    
  7. Convert 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 pieces
  • CarrierTypeUOM."Qty. per UOM Code" = 50 pieces per handling unit
  • CarrierTypeUOM."Qty. per Layer" = 10 pieces per layer
  • CarrierTypeUOM.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:

  1. Full handling unit height: 1.00 m < 1.60 m → Can fit full handling units
  2. Full handling units: A = 200 div 50 = 4 handling units (200 pieces)
  3. Remaining: 200 - (4 × 50) = 0 pieces
  4. Full layers: B = 0 div 10 = 0 layers
  5. Remaining quantity: C = 0 pieces
  6. Layer handling units: E = 0 / 1.60 = 0 handling units
  7. Pick handling units: F = 0 (no remainder)
  8. Result: G = 4 + 0 + 0 = 4 handling units

Result: 4 handling units

Example 2: Full Handling Units Exceed Height Limit

Scenario:

  • Quantity = 450 pieces
  • CarrierTypeUOM."Qty. per UOM Code" = 90 pieces per handling unit
  • CarrierTypeUOM."Qty. per Layer" = 10 pieces per layer
  • CarrierTypeUOM.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:

  1. Full handling unit height: 1.80 m > 1.50 m → Cannot fit full handling units
  2. Full handling units: A = 0 (cannot fit)
  3. Full layers: B = 450 div 10 = 45 layers
  4. Remaining quantity: C = 450 mod 10 = 0 pieces
  5. Layer height: D = 45 × 0.20 = 9.00 m
  6. Layer handling units: E = 9.00 / 1.50 = 6.0 handling units
  7. Pick handling units: F = 0 (no remainder)
  8. 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 pieces
  • CarrierTypeUOM."Qty. per UOM Code" = 50 pieces per handling unit
  • CarrierTypeUOM."Qty. per Layer" = 10 pieces per layer
  • CarrierTypeUOM.Height = 0.20 m per layer
  • Full handling unit height = (50 div 10) × 0.20 = 1.00 m
  • MaxHeight = 1.60 m
  • UnitOfMeasure.Cubage = 0.05 m³ per piece
  • Order pick handling unit: Length = 1.2 m, Width = 0.8 m
  • No interleave conditions

Calculation:

  1. Full handling unit height: 1.00 m < 1.60 m → Can fit full handling units
  2. Full handling units: A = 175 div 50 = 3 handling units (150 pieces)
  3. Remaining: 175 - (3 × 50) = 25 pieces
  4. Full layers: B = 25 div 10 = 2 layers (20 pieces)
  5. Remaining quantity: C = 25 mod 10 = 5 pieces
  6. Layer height: D = 2 × 0.20 = 0.40 m
  7. Layer handling units: E = 0.40 / 1.60 = 0.25 handling units
  8. 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
  9. 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 pieces
  • CarrierTypeUOM."Qty. per UOM Code" = 50 pieces per handling unit
  • CarrierTypeUOM."Qty. per Layer" = 10 pieces per layer
  • CarrierTypeUOM.Height = 0.15 m per layer
  • Full handling unit height = (50 div 10) × 0.15 = 0.75 m
  • MaxHeight = 1.50 m
  • CarrierType.Height = 0.15 m (interleave)
  • ROUND_TO_FULL_LAYERS = true
  • Interleave enabled

Calculation:

  1. Full handling unit height: 0.75 m < 1.50 m → Can fit full handling units
  2. Full handling units: A = 87 div 50 = 1 handling unit (50 pieces)
  3. Remaining: 87 - 50 = 37 pieces
  4. Full layers: B = Round(37 / 10, 1, '>') = 4 layers (rounded up)
  5. Remaining quantity: C = 0 (rounded to full layers)
  6. Layer height: D = 4 × 0.15 = 0.60 m
  7. Add interleave: D = 0.60 + 0.15 = 0.75 m
  8. Layer handling units: E = 0.75 / 1.50 = 0.5 handling units
  9. Pick handling units: F = 0 (no remainder)
  10. 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:

  1. Base result: G = 4 handling units
  2. Equivalent factor: H = (1000 × 1200) / (1200 × 800) = 1.25
  3. 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_FILT parameter 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