> For the complete documentation index, see [llms.txt](https://docs.solutioo.de/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.solutioo.de/entwicklerdokumentationen-business-central-dhl-connector/dhl-connector-entwicklerdokumentation/codeunit-referenz/72242980-soudhl-packing-mgt.md).

# 72242980 SOUDHL Packing Mgt

## Verantwortung

Erzeugt aus Verkaufszeilen konsistente Package Header und Lines. Die Codeunit zentralisiert Gewicht, Maße, Boxauswahl und mehrere Verteilalgorithmen.

## Öffentliche Procedures

### Paketbildung

* `CreatePackages(var SalesHeader: Record "Sales Header"; FixedPackageCount: Integer; BoxCode: Code[20])` – nutzt den Packing Mode der Konfiguration.
* `CreatePackagesWithPackingMode(var SalesHeader: Record "Sales Header"; FixedPackageCount: Integer; BoxCode: Code[20]; PackingMode: Enum "SOUDHL Packing Mode")` – expliziter Mode für Host-Apps.

Ist `FixedPackageCount > 0`, hat die feste Anzahl Vorrang vor dem Mode.

### Gewicht

* `ResolveUnitWeightKg(Item: Record Item): Decimal`
* `ResolveUnitWeightKg(Item: Record Item; UOMCode: Code[10]): Decimal`

Reihenfolge: Item-UoM-Gewicht bei entsprechender Gewichtsquelle, sonst Gross oder Net Weight × Qty. per Unit of Measure. Gramm werden in Kilogramm konvertiert.

### Maße

* `ResolveItemUnitDimensions(ItemNo: Code[20]; UOMCode: Code[10]; var LengthCm: Decimal; var WidthCm: Decimal; var HeightCm: Decimal)`
* `ResolvePackageDimensionsCm(PackageHeader: Record "SOUDHL Package Header"; var LengthCm: Decimal; var WidthCm: Decimal; var HeightCm: Decimal)`

Item-UoM-Maße und Paket-/Boxmaße werden in Zentimeter normalisiert.

### Limits und Hilfen

* `ResolveMaxPackageWeightKg(BoxCode: Code[20]): Decimal` – Boxlimit, Setupdefault, danach 31,5 kg.
* `MaxPackageWeightKg(): Decimal` – Setupdefault ohne Box.
* `UnitFitsInBox(UnitLengthCm: Decimal; UnitWidthCm: Decimal; UnitHeightCm: Decimal; BoxLengthCm: Decimal; BoxWidthCm: Decimal; BoxHeightCm: Decimal): Boolean` – sortierter Achsenvergleich; fehlende Maße blockieren nicht.
* `SuggestPackageCount(TotalWeightKg: Decimal; TotalVolumeCm3: Decimal; BoxCode: Code[20]): Integer` – Maximum aus Gewichts- und Volumenbedarf.
* `ComputeOrderTotals(SalesHeader: Record "Sales Header"; var TotalWeightKg: Decimal; var TotalVolumeCm3: Decimal)` – Summen packbarer Verkaufszeilen.
* `ClearExistingPackages(OrderNo: Code[20])` – löscht nur nicht hochgeladene Sales-Order-Pakete und Lines.

## Interner Ablauf

`CreatePackagesInternal` → `BuildPackingPlan` → `CreateDhlPackages`.

Vor dem Löschen bestehender Pakete werden alle Einheiten auf Maximalgewicht und Box-Fit validiert. Dadurch zerstört ein ungültiger Vorschlag keine vorhandenen Pending-Pakete.

## Algorithmen

* `BuildPlanBinPacking`: schwerste Zeilen zuerst, First-Fit.
* `BuildPlanAllOnFirst`: Auftragsreihenfolge; separate Artikel schließen das Paket.
* `BuildPlanSmartDistribute`: separat zu packende Einheiten zuerst; Rest auf leichtestes passendes Paket.
* `BuildPlanFixedCount`: exakt N Pakete, Fehler bei Restmenge oder leeren Paketen.

Relevante Helper: `CollectOrderLines`, `ValidateOrderUnits`, `ResolveBoxCode`, `FindFirstFitPackage`, `FindLightestFittingPackage`, `FindEmptyPackage`, `ChunkCapFor`, `PackingQuantity`, `CeilDiv` und Listen-Mutatoren.

## Boxauswahl

1. expliziter `BoxCode`,
2. Preferred Box der Item Category,
3. kleinste passende Kategoriebox,
4. kleinste passende aktive Box.

## Datenwirkung

Die Codeunit löscht und erzeugt Package Header/Lines, aber committet nicht explizit. Headergewicht wird in Gramm gespeichert, Linegewicht in Kilogramm pro Einheit.

## Fehlerfälle

Keine Box, keine packbare Position, Einzelstück zu schwer oder zu groß, feste Paketanzahl unzureichend. `Qty. to Ship` wird bevorzugt; andernfalls gilt Quantity.

## Externe Verwendung

Die öffentlichen Methoden sind die unterstützte Packing-Fassade. Consumer-Apps sollen nicht eigene Varianten der Algorithmen gegen dieselben Tabellen parallel pflegen.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.solutioo.de/entwicklerdokumentationen-business-central-dhl-connector/dhl-connector-entwicklerdokumentation/codeunit-referenz/72242980-soudhl-packing-mgt.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
