// The Most Important Points at a Glance
What You'll Take Away from This Article
- Odoo doesn't need classic closing/opening entries: P&L and balance sheet values are calculated directly from all journal items "since the beginning of time" using date filters.
- Three posting options for the profit carryforward: manual posting (not advisable), the Odoo standard via account 9999 (functional, but requires manual upkeep), and automatic calculation in reporting.
- Best solution: automatic calculation, ideally with the syscoon "Retained Earnings" app – maximally transparent, error-free, and with no manual upkeep required.
What Is a Profit Carryforward?
There are various concepts of profit carryforward. Fundamentally, the profit carryforward (before appropriation) is nothing more than all cumulative results from the past. It's shown in the balance sheet under equity alongside net income for the year. Together, both items make up the cumulative result. This, for example, is what's shown in an IFRS balance sheet instead of the two sub-items.
In classic German accounting, you learn that P&L accounts are closed out to the profit carryforward at year-end. There are closing and opening entries: while balance sheet accounts are reopened with the prior year's balance, P&L accounts remain empty and are closed via the profit carryforward.
That's Not How Odoo Works
In Odoo, the main table – the journal items – simply looks at all accounts "from the beginning of time." Date filters let you display exactly what you need:
- Period values (P&L)
- Point-in-time values (balance sheet)
Reports work on this same principle. Based on the account type, Odoo determines whether entering a date (e.g. "12/31/2024") should show all cumulative values (balance sheet) or only the values for that year or month (P&L).
Closing entries are therefore fundamentally unnecessary. There's also no legal requirement for them. Historically, these entries were used mainly for technical reasons, since older software solutions didn't have enough processing power to display cumulative data across multiple periods. Those days are over.
Ways to Post the Profit Carryforward in Odoo
- Manual posting as in the past
Here, all P&L accounts are cleared out on January 1 of the following year, and the amounts are transferred to the profit carryforward account. This method is technically possible (e.g. via an Excel export and subsequent import), but it isn't advisable. All reports would need to be slightly restructured. There's no practical or accounting reason to do it this way. - Odoo standard: posting against account 9999
Odoo's official documentation recommends posting against account 9999, "Undistributed Profits/Losses." This account can be set up once with the type "Current Year Earnings." It appears in neither the P&L nor the balance sheet. In principle, it's a one-sided entry. This method is functional but requires manual postings. Any subsequent postings in the old year also need to be recorded there. Since these "catch-up posting periods" often stretch over several months, the new year's balance sheet is frequently incorrect during that time. - Automatic calculation by Odoo
Since the profit carryforward is nothing more than the cumulative profits from prior years, it can be calculated directly in reporting – similar to net income for the year.
a) Calculation with the Odoo standard
For this, three sub-items are created under the profit carryforward: Profit carryforward manual: This is where the starting value at initial migration or reclassification entries for profit appropriation is posted. Profit carryforward cumulative result (auto): Automatic calculation of the cumulative result over the entire period (date scope: "From the very start"). Profit carryforward current year negative (auto): Calculates the cumulative result up to the end of the previous period ("According to each type of account") and enters it as a negative amount.
b) Automatic calculation with the syscoon "Retained Earnings" app
Instead of creating two items (ii. and iii.), a single item can be set up: Profit carryforward (auto): With the syscoon "Retained Earnings" app, a new date-scope option, "From the start to previous year," is available. This method ensures that the values are always calculated correctly and automatically. Past P&L values remain retrievable at any time.
Recommendation for Profit Appropriation
- If a profit appropriation occurs, it should not be posted to the automatic items. Instead, a reclassification account should be set up under the "profit carryforward manual" item.
- Advantages:
- Maximum transparency
- No manual upkeep of the profit carryforward
- Automatic calculation avoids errors
- No one-sided entries that would be problematic from an accounting standpoint
Conclusion
Odoo takes a different approach to handling the profit carryforward than classic accounting software. Instead of manual postings, the profit carryforward is calculated automatically and displayed via date filters.
A manual posting as in the past is technically possible, but not advisable.
The Odoo standard solution with account 9999 is practical, but requires manual catch-up postings.
The best solution is automatic calculation, either using Odoo's standard options or the syscoon "Retained Earnings" app, which enables an even more precise presentation.
Companies using Odoo should consider these modern methods to manage the profit carryforward more efficiently and error-free.