August 25, 2026?3 min

Why Your Margin Report Is Lying to You (And How I Caught It)

Month-end accruals destroy margins that looked solid on the invoice. I learned this the hard way migrating a client from legacy systems to ERPNext.

ERPERPNextOdooBusinessArchitecture

I spent three weeks debugging why a client's margin jumped from 28% to 14% at month-end close. Nothing was wrong. The postings were correct. But nobody was talking about what actually happened.

The problem: they were measuring margin at invoice time, not at cost realization time.

When you bill a customer in week one but don't receive the supplier invoice until week three, your billing system shows profit. Your accounting system knows the truth. The gap between these two moments is where margin dies.

I've seen this pattern everywhere I work with ERPNext and Odoo implementations:

The invoice is happy. You hit margin targets. Sales team celebrates. You book revenue.

Month-end arrives. Accruals kick in. Landed costs post. Currency revaluation hits. Suddenly that 28% margin is 14%. The CFO asks what happened. Nobody has a good answer.

In my Seven Suite builds, I always separate "billing margin" from "accounting margin" in reports. Two different KPIs. One tells you if the deal was good. One tells you the actual financial reality.

The fix isn't complicated:

  1. Stop reporting margin at invoice time. That's a sales metric, not a profit metric.
  2. Build reports on the accounting period close. This is when reality lands.
  3. Make accruals visible. Show expected costs as soon as you know about them, even if the invoice hasn't arrived.
  4. Track the variance. The delta between "margin at billing" and "margin at close" tells you exactly where your forecast breaks.

I automated this in ERPNext for a manufacturing client last year. Every invoice now has a field for "estimated landed cost." At month-end, we compare estimate vs. actual and flag anything over 5%. Saves them days of investigation.

Your margin report isn't lying because of bad data. It's lying because of timing. You're measuring the wrong moment. Fix the moment, and suddenly the variance becomes manageable, predictable, and—most importantly—something you can actually do something about.

This is basic financial control. But I'm still shocked how many ERP implementations skip it entirely.