Product UOM system: base, alternative, default
Every product has one base UOM (EA) for inventory accounting, any number of alternative UOMs with conversions, a default UOM for documents, and a reserved billing UOM. UOM fields are dropdowns everywhere.
Since 2026-10-18, product units follow the industry model (SAP MM / Oracle / Manhattan): one product, one unit system, four roles that each mind their own business. If you only remember one thing: inventory is always accounted in the base UOM (EA).
The four UOM roles#
- Base UOM: the inventory accounting unit — exactly one per product, fixed to EA. Once the product has inventory movements, the base row cannot be deleted, its conversion cannot be changed, and it cannot be migrated. This is a hard ledger guard.
- Alternative UOM: CASE, PLT and friends — each carries a conversion to the base (the form reads like plain language: "1 CASE = N EA").
- Default UOM: a per-product dropdown, single choice. Documents (PO lines, outbound lines, transfer lines…) default to it; change it per line when needed.
- Billing UOM: a per-product reserved field — the billing engine does not read it yet, so you can ignore it for now.
Creating and editing products#
- Creating a product automatically creates an EA unit row (base + default). If the unit row fails, the product row is rolled back too — you never get a product with no units.
- On the product form (Master Data → Products → open the product → UOM tab): the old billing-UOM-per-row input is gone — billing UOM is now a product-level dropdown.
- Default UOM must be picked from the product’s own UOM list — clearing it is rejected.
UOM inputs are dropdowns everywhere now#
PO lines, customs declarations, transfer orders, outbound lines — every place that asks for a unit is now a dropdown. If the line is tied to a product, you pick from that product’s UOM list; otherwise you get the standard fallback (EA, CASE, PLT, KG, LB, BOX, SET). The old problem of "typed the unit by hand and it never matched" is gone.