Margin leaks the standard reports miss
Distribution looks simple from outside. Buy, store, sell. The people who run a wholesale business know the money is made or lost in the details between those steps: what a carton really cost once it cleared the port, whether the supplier paid the rebate they promised, and which customer got the stock when there wasn’t enough to go round.
Standard ERP reports are built around sales and purchase totals. They’re fine for that. They won’t tell you that a best-selling line has been quietly losing money for a year because freight was allocated by value.
Landed cost, worked through
Say one 40ft container holds two products. There are 500 cartons of paper towels, each 0.1 m³ and $8.00 at the supplier, so $4,000 of stock taking up 50 m³. There are also 200 cartons of hand soap, 0.05 m³ each at $30.00, so $6,000 taking 10 m³. Freight and clearing come to $3,000.
Split by value, towels carry 40% of the charges. That’s $1,200, or $2.40 a carton, for a landed cost of $10.40. You sell towels at $12.00 and the margin report shows about 13%. Everyone’s happy.
Split by volume, which is how the shipping line charged you, towels take 50 of the 60 cubic metres. That’s $2,500, or $5.00 a carton, and a landed cost of $13.00. You’re losing a dollar on every carton you sell at $12.00. The soap, meanwhile, is being overcosted and probably overpriced.
Duty is different again. It’s charged on customs value, so value is the right driver for that line. A decent landed cost module lets each charge type carry its own split method. On ERPNext that means extending the Landed Cost Voucher with a per-charge distribution rule and item volumes. Odoo already supports splitting by weight or volume, so there the work is mostly about mapping charge types and getting good dimensions onto products.
What stock ERPNext and Odoo handle well
Credit where it’s due. Both platforms do a lot for distributors before any code is written. ERPNext has Pricing Rules and Promotional Schemes, Pick Lists, batch and serial tracking, multi-UOM items, reorder levels per warehouse and a solid Landed Cost Voucher. Odoo has routes with multi-step receipts and deliveries, reordering rules, vendor price lists, packaging units, backorder handling and wave or batch transfers.
What neither has as a first-class object is a supplier rebate agreement with tiers, periods and a claim process. Allocation rules for short stock are thin too. Those are the two gaps we’re asked to fill most. For multi-bin put-away and pick paths, see the warehouse management module. If buying is where the pain is, the purchase management module covers approval limits and supplier scorecards.
Who gets the stock when there isn’t enough
Allocation is a business decision dressed up as a software problem. Before you ask for a module, agree on the rule. Common ones we generate are strict order date, customer priority tier, a fair share proportional to the quantity ordered, or protecting a minimum for contract customers before anyone else is served.
Pick one, write it down, and let the system apply it when goods are received against open orders. The module then updates the reserved quantity on each sales order line and tells the reps what their customers are getting. The arguments don’t disappear, but they move to a meeting about the rule instead of happening at the warehouse door every morning.
Before you ask for anything custom
Three checks save a lot of wasted effort. First, confirm your item master has real dimensions and weights, because a volume split can’t fix bad data. Second, see whether a Pricing Rule or Odoo price list already covers your “custom pricing” need. Often it does. Third, read ERPNext customization or Odoo customization to see what’s a configuration change and what really needs code. If you’re torn about building at all, our piece on build vs buy for ERP is blunt about the trade-offs.