Skip to Content

Analytic accounting in Odoo: where margin comes from (or goes)

Practical guide to plans, cost distribution and profitability
​ October 9, 2026 by
Analytic accounting in Odoo: where margin comes from (or goes)

Financial accounting tells you if you made a profit. Analytic accounting tells you where. It is not a tax. It is not the official P&L. It is an internal tree: plans (dimensions) and accounts, to see a business, a customer, or a grant without touching the chart of accounts.

In Odoo 16 tags became plans. Accounts kept the same name. The video is recorded in Odoo 19 Enterprise. In Community the base module is the same. Albert Cabedo, Contaldia. About 67 minutes plus Q&A.

3 plans

project, business, grant
at ~70% of Contaldia clients

100 %

a mandatory plan must sum to 100
or Odoo will not let you post

67 min

the full video
demo in Odoo 19 + Q&A

Turn on analytic accounting

You need the Spanish localization (Spanish accounting installed). Accounting → Configuration → one checkbox turns on analytic accounting. In Enterprise there is nothing else to install. In Community the base module is the same; extras (parents, product category in older versions) are OCA.

Accounting settings: checkbox that turns on analytic accounting

Accounting settings. The checkbox that turns on plans and accounts. Video screenshot, 04:29.

Invoice analysis in a pivot table: category, month, base, and margin

Before you create a plan

Invoice analysis (pivot table) is not analytic accounting. Albert uses it every day and has not configured anything. Columns: base, quantity, margin, average price, product category, month, customer, year, product, country.

Other paths he shows before touching a plan: 629 and 700 subaccounts, several sales journals, the margins module. Invoice sequences: in 99% of cases he does not recommend them; that is what analytic accounting is for.

Plans and accounts (the tree)

Create few plans. The three that show up at ~70% of Contaldia clients: project or customer, business, and grants. Install Projects if you want the customer plan: each project creates the account and nests it. On each plan, the actual accounts. Overhead: a «general expenses» or «administration» account on the business plan.

In the demo: project plan → PL SL and Peter SL; business plan → IT and Recursos humanos; grants plan → one ICO. On the plan: optional / mandatory / unavailable, color, and a domain only if needed.

Analytic accounts created and nested by the project on the customer plan

The project already is an account

When you install Projects, the plan appears. Each project creates the nested analytic account. In the demo, Power/Peter is linked to the plan. You do not need to invent the tree twice.

Analytic plan form: sub-plans, optional or mandatory, color, and domain

Plan form: sub-plans, optional / mandatory / unavailable, color, and domain. 16:42.

Automate: distribution models

By hand on every invoice it does not hold: it is a nest of errors. Configuration → analytic distribution models. Turn on columns (product category is often hidden). Criteria: contact, product, product category, GL accounts.

Albert's usual recipe: contact → customer plan; product category → business plan. Limit to accounts 6 and 7. A grant with its own account: often by hand. Sort the list: the one on top wins if they clash (in the video he flags it with doubt).

Analytic distribution models with contact, product, and category columns

Distribution models. Turn on the product category column if it is hidden. 23:10.

Customer invoice with analytic distribution filled in automatically

It has to fill itself in

Test: an invoice for the contact or a product (Bodyboard in the demo) must carry analytic without typing it. In the demo, everything from Pau Muñoz goes to Paul SL. The product gets the analytic accounts when you pick it.

Want to build the tree on your Spanish chart of accounts?

info@contaldia.com · 931 94 94 80

Where it is fed from (always the journal entry)

It is fed from financial accounting, wherever it comes from. Posted invoice → the 6/7 journal item carries the distribution. Manual journal entry (inventory variation, payroll): distribution on the line. Sale or subscription: there is an analytic column (you have to turn it on); it counts when you post the invoice, not on a draft quotation.

Assets: analytic goes on depreciation (681), not on the asset purchase. The purchase is not group 6/7. You set it on the asset or on the asset model. You can automate it: everything on 681 → general expenses.

Asset model with analytic distribution on account 681

681 yes, purchase no

The fixed-asset purchase does not carry analytic. Depreciation does. On the asset model you set the 681 distribution. 32:30 in the video.

42

group 7 lines
with no analytic, in the demo

14

group 6 lines
also empty

6 and 7

the only accounts
that should carry analytic

Check that nothing is missing (or extra)

In v19: Journal Entries (create few) versus Journal Items (Review) = every line. Accounting → Review → Journal Items. Filter: account 6… or 7… + analytic not set → fill in. The other way: if a 430, a VAT, or a 2xx carries analytic, remove it. Add the column if it is hidden and save the filter.

Journal items filtered: group 6 and analytic account not set

Journal items. Group 6 + analytic account not set. 38:09. Forty-two and fourteen empty, as in the demo, mean the tree exists and automation does not cover everything.

Analytic items: −5,000 on general expenses and allocation to businesses

Reallocate general expenses

Analytic items are not journal entries: one line, no debit or credit. The 5,000 of overhead is not moved with a journal entry. You post a manual analytic item: −5,000 on general expenses (it goes to 0), +3,000 on IT, +2,000 on the other line. Basis: sales, hours, whatever the company uses. It is internal.

Reports: pivot, P&L, and MIS

Analytic items → pivot view. Month, business, customer. «None» = expense with no customer. If «analytic report» exists, it is the same pivot; if it is not there, the pivot view is in every version. Enterprise: Reporting → P&L → filter by plan and by account. Community: MIS → analytic filter.

One plan at a time. Two plans at once on the v19 P&L show as columns. To filter a plan on journal items: «project is set», not an «analytic plan» field. One hundred percent on the customer and one hundred percent on the business is not double income: they are two readings. Adding them into a single total is the mistake. This does not replace knowing the company: without clear lines the tree is useless. Analytic accounting comes in when the invoice pivot is not enough.

Profit and Loss filtered by analytic plans and accounts

P&L filtered by plans and accounts: one business, one customer, one grant. 49:41. In the demo, Peter account: 1,100 € of income and 5,000 € of expense → the customer is not profitable.

October 29 · 12:00–14:00 · online

Full course on Spanish accounting in Odoo 20.

Sign up for the course

Full video: YouTube. Tree on your Spanish chart: info@contaldia.com · 931 94 94 80.