1. Calculer la marge réelle des missions en cours
L'analytique répond à une question simple que toute direction se pose tôt ou tard : « Quelle marge brute pour chaque mission ? ». Prenons une ESN qui pilote trois missions en parallèle — « Audit Réseau », « App Métier », « Déploiement WiFi ». Sur une seule semaine, le pivot Feuilles de temps préparé par la responsable opérationnelle — voir Feuilles de temps en Odoo CE — affiche 42 heures consommées : 16h sur « Audit Réseau », 16h sur « App Métier », 10h additionnelles sur « Audit Réseau ». Le pivot timesheet livre les heures, mais ni les coûts associés, ni la double lecture demandée par le pilotage : marge par projet et charge par département IT.
Les 42h saisies en feuille de temps doivent être ventilées : combien sur « Audit Réseau », combien sur « App Métier », combien d'heures internes du département IT-Réseaux ? L'analytique répond à cette question. Pour l'agence, l'étape suivante consiste à configurer un second axe de pilotage en parallèle du plan Projet natif. Direction Comptabilité > Configuration > Comptabilité analytique > Plans analytiques.
📖 Définition — Plan vs compte analytique
Un plan analytique = un axe d'analyse (Projet, Département, Produit…). Un compte analytique = une valeur prise par cet axe. Exemple : Audit Réseau est un compte du plan Projet ; IT-Réseaux est un compte du plan Département. Chaque ligne ventilée porte une combinaison de comptes appartenant à plusieurs plans.
2. Pourquoi l'analytique : trois axes naturels
Trois axes structurent toute analyse de gestion en ingénierie de services : par projet, par département, par produit ou catégorie. Chaque projet créé en Démarrer ses projets dans Odoo CE dispose déjà d'un compte analytique sur le plan natif Projet — il suffit de le compléter par les autres axes de pilotage.
Axe Projet
Répond à « Cette mission est-elle rentable ? ». Agrège revenus facturés, coûts directs (timesheets, factures fournisseurs ventilées) et fait apparaître une marge brute. Axe pilote dans une ESN — chaque devis client se retrouve en compte analytique projet.
Axe Département
Répond à « Quel pôle interne consomme le plus de charges fixes et de licences ? ». Croise plusieurs missions sur un même département (IT-Réseaux porte autant « Audit Réseau » que « Déploiement WiFi ») et chiffre un coût de structure indépendant du carnet de commandes.
Axe Produit / catégorie
Répond à « Quels produits ou prestations génèrent quelle marge ? ». Moins utilisé en service pur, mais clé pour les hybrides produit + projet (revente matériel + intégration).
L'ESN active les deux premiers axes. Le plan Projet existe nativement depuis l'installation du module Projet. Le plan Département, lui, se crée manuellement.
3. Plans analytiques refondus depuis v17
Le menu cible est Comptabilité > Configuration > Comptabilité analytique > Plans analytiques. Clique Nouveau, renseigne name="Département", default_applicability="Optional", color=4 (vert sauge), puis ouvre l'onglet Comptes analytiques et ajoute quatre lignes : IT-Audit, IT-Dev, IT-Réseaux, Commercial. Sauvegarde. Le plan est créé.
📖 Définition — Refonte v17
Avant Odoo 17, l'analytique reposait sur des Tags + un compte unique. Depuis la v17, l'architecture est passée à deux modèles distincts : account.analytic.plan (l'axe) et account.analytic.account (la valeur). Chaque plan racine génère une colonne Many2one dynamique sur les écritures analytiques (account_id pour le plan Projet, x_plan{N}_id pour les autres). Confirmé en Odoo 19 CE.
⚠️ Piège v19 — menu masqué sans le groupe
Le menu Configuration > Comptabilité analytique > Plans analytiques n'apparaît QUE si le groupe analytic.group_analytic_accounting est activé. Tu actives la case dans Comptabilité > Configuration > Paramètres > Comptabilité analytique avant de chercher le menu. Sans cela, rien n'est visible — erreur classique de premier setup.
Sur chaque compte, renseigne un code court (IT-AUD, IT-DEV, IT-NET, COM) pour les exports comptables. Le champ plan_id est obligatoire — impossible de créer un compte analytique sans plan, rupture avec les anciennes versions.
4. Comptes analytiques : créer, hiérarchiser, lier projet
Côté plan Projet (natif), trois comptes ont été créés automatiquement à la création des projets de l'agence — un par mission : Audit Réseau, App Métier, Déploiement WiFi. Chaque enregistrement project.project porte le champ account_id qui pointe vers son compte analytique. Tu peux le vérifier sur la fiche projet, onglet Paramètres.
L'étape suivante consiste à rattacher chaque projet à son département sur l'axe Département. Ouvre la fiche projet Audit Réseau, descends dans la section analytique de l'onglet Paramètres, et renseigne IT-Réseaux sur la colonne dynamique du plan Département. Même geste pour Déploiement WiFi (IT-Réseaux) et App Métier (IT-Dev). Le projet Interne hérite du département Commercial.
Conséquence directe : à chaque fois qu'une feuille de temps est saisie sur l'un de ces projets, la ligne analytique générée portera automatiquement deux comptes — un sur le plan Projet, un sur le plan Département. Pas de double saisie pour les consultants. La hiérarchie de plans (parent_id) reste optionnelle ici : l'agence ne crée pas de sous-plans. Les 4 comptes du département vivent à plat.
5. Distribution analytique : pourcentages, multi-plans, format JSON
Passons maintenant à la facturation fournisseurs. Une facture matérielle de 12 000 DA vient d'arriver — switchs réseau et câbles RJ45 pour la mission « Déploiement WiFi ». Sur la ligne facture, clique la cellule Distribution analytique : un pop-up apparaît avec deux colonnes (Projet et Département) et une zone de saisie de pourcentage.
{"5,2": 100}.
📖 Définition — Format JSON de la distribution
Le champ analytic_distribution est un dictionnaire JSON stocké sur la ligne facture ou achat. Trois patterns à retenir :
{"5": 100}= 100 % sur compte id=5 (un seul plan).{"5,2": 100}= 100 % sur compte 5 ET compte 2 combinés (deux plans différents alimentés par la même ligne).{"5": 60, "7": 40}= 60 % sur compte 5 + 40 % sur compte 7 (deux comptes du même plan, en split).
La virgule dans la clé "5,2" ne signifie pas deux lignes — elle signifie deux plans alimentés simultanément à 100 % chacun.
Pour la facture matériel WiFi, on saisit Déploiement WiFi (compte 5) à 100 % et IT-Réseaux (compte 2) à 100 %. Le widget enregistre {"5,2": 100}. Une seule entrée JSON, deux plans alimentés. La facture passe en Posted — Odoo crée alors deux lignes analytiques (une par compte combiné) avec amount=-12000 chacune.
⚠️ Piège v19 — analytic_distribution n'est pas sur account.analytic.line
Le champ JSON analytic_distribution vit sur account.move.line et purchase.order.line (via la mixin analytic.mixin). Mais sur le modèle des écritures analytiques account.analytic.line, il n'existe pas. Les lignes analytiques utilisent des colonnes Many2one dynamiques : account_id pour le plan Projet, x_plan{N}_id pour les autres plans. Si tu cherches le champ JSON dans la vue Écritures analytiques, tu ne le trouveras pas.
6. Auto-distribution depuis le projet vers le timesheet
Le mécanisme clé qui fait gagner du temps en exploitation : chaque ligne de feuille de temps hérite automatiquement de la distribution analytique du projet. C'est ce mécanisme qui propage automatiquement vers les écritures analytiques chaque ligne timesheet validée en Feuilles de temps en Odoo CE — sans saisie manuelle de distribution.
Concrètement, quand le responsable IT saisit 10h sur la tâche Reconnaissance terrain du projet Audit Réseau, Odoo applique la logique suivante : lecture du project.account_id (compte du plan Projet = Audit Réseau), puis lecture des colonnes additionnelles du projet (compte du plan Département = IT-Réseaux). La ligne analytique générée porte donc deux références d'un coup : account_id=Audit Réseau et x_plan{N}_id=IT-Réseaux. Le consultant n'a rien à saisir côté analytique.
Même mécanisme pour le développeur senior sur App Métier (16h) — la ligne porte App Métier (Projet) et IT-Dev (Département). Et pour la technicienne réseaux sur Audit Réseau (10h) — la ligne porte Audit Réseau et IT-Réseaux. Au final, le département IT-Réseaux capture 26h (responsable IT 16h + technicienne réseaux 10h), IT-Dev en capture 16h. Sans aucune saisie analytique manuelle.
7. Distribution sur facture client / achat / timesheet — trois angles concrets
Trois angles concrets matérialisent la distribution analytique au quotidien dans une ESN. Sur une facture fournisseur saisie dans le plan comptable SCF (voir l'article La comptabilité dans Odoo 19 : plan comptable algérien, taxes et journaux), la ventilation se fait au niveau ligne par ligne — chaque ligne porte son propre dictionnaire JSON.
Angle 1 — Facture fournisseur matérielle (multi-plans)
Matériel réseau 12 000 DA, vu plus haut. Une ligne, deux plans alimentés en un seul JSON {"5,2": 100}. Charge imputée à la fois côté Projet (rentabilité mission WiFi) et côté Département (charge IT-Réseaux). Pattern idéal quand le coût est sans ambiguïté rattachable à une mission ET à un département.
Angle 2 — Facture fournisseur de structure (split département)
Licences éditeur 8 000 DA pour des outils de développement. La charge n'est attachable à aucun projet client précis : c'est une licence outillage répartie entre les pôles IT-Dev (60 %, utilisateurs principaux) et IT-Réseaux (40 %, postes complémentaires).
Angle 3 — Feuilles de temps (auto-distribution)
Aucune saisie manuelle, propagation auto via project.account_id + colonnes dynamiques (§6). La ligne account.analytic.line se crée avec account_id et x_plan{N}_id directement renseignés, amount=-cout_horaire * heures. Au total : 42h ventilées sur 3 projets et 2 départements, sans une seule saisie analytique côté consultants.
{"7": 60, "2": 40}.
Côté facture client (cas F11·5), le même widget se présente — chaque ligne de vente porte sa distribution, qui hérite du compte analytique projet lié à la commande.
8. Reporting analytique CE : Écritures analytiques et pivot
Pour préparer un tableau de pilotage, direction Comptabilité > Comptabilité > Écritures analytiques. Bascule sur la vue Pivot (icône ⊞ dans le coin haut droit) — la mesure par défaut est Montant.
La vue par défaut agrège la mesure Montant mais le groupement de colonnes initial est générique. Pour basculer sur l'axe Département analytique, ouvre le menu déroulant ⊞ de l'en-tête de colonne et sélectionne Département. La vue se rafraîchit : 4 colonnes (IT-Audit, IT-Dev, IT-Réseaux, Commercial) × 3 lignes projet. Les deux factures fournisseurs totalisent -20 000 DA — IT-Réseaux capture 15 200 DA (12 000 matériel + 3 200 licences à 40 %), IT-Dev capture 4 800 DA (licences à 60 %).
💡 Astuce — marge projet rapide en CE
Pour obtenir une marge projet sans rapport dédié, tu ouvres Comptabilité > Comptabilité > Écritures analytiques, tu filtres par compte projet (account_id = Audit Réseau par exemple), tu bascules en vue Pivot ou Graph, et tu mesures sur Montant. Les charges (timesheets valorisés, factures fournisseurs ventilées) apparaissent en négatif, les revenus de vente en positif. Le solde affiché = marge brute du projet. Pas besoin d'un rapport dédié.
9. Bonus : règles d'applicabilité
Une dernière brique pour fiabiliser la saisie : les règles d'applicabilité (account.analytic.applicability). Elles permettent de forcer la présence d'un plan sur certaines opérations métier, ou au contraire de le masquer.
Configure deux règles sur le plan Département. Direction Plans analytiques > Département > Applicabilité. Règle 1 : business_domain=general, applicability=optional — par défaut, le plan reste optionnel. Règle 2 : business_domain=timesheet, applicability=mandatory — sur chaque ligne timesheet, le département devient obligatoire. Conséquence : si un projet n'a pas son département renseigné, Odoo bloque la saisie de la feuille de temps tant que la lacune n'est pas corrigée. Garde-fou efficace contre les trous de ventilation.
Huit domaines business_domain sont disponibles en CE : general, invoice, bill, timesheet, purchase_order, sale_order, expense, stock_picking. Chacun activé par son module respectif. Sur chaque règle, tu peux additionner un préfixe de compte comptable (account_prefix="60" pour les charges) ou une catégorie produit pour un ciblage fin.
🔵 La rentabilité projet en CE vs Enterprise
En Odoo 19 CE, la section Profitabilité du projet existe (module project_account, auto-installé en CE) — mais elle ne s'affiche que dans la Vue Mise à jour du projet (bouton « Mise à jour » en haut à droite de la fiche projet), pas dans la vue form standard. Elle agrège Factures clients, Notes de frais, Autres coûts et Autres revenus à partir du compte analytique du projet. Pour aller plus loin (marge par phase, projection budgétaire, comparaison réel/prévisionnel), il faut soit construire ses propres vues pivot sur les Écritures analytiques (CE), soit basculer vers Odoo Enterprise.
Ce que débloque l'upgrade Enterprise sur la rentabilité projet :
- Tableau de bord Rentabilité complet avec marge calculée, comparaison période, alertes de dépassement budget.
- Budget analytique multi-période (planifié vs réel par plan analytique).
- Rapport d'analyse multi-axe avec filtres croisés Projet × Département × Période × Produit.
- Vue de profitabilité enrichie intégrée nativement à la fiche projet (sans détour par « Mise à jour »).
En CE, le contournement pragmatique consiste à utiliser le pivot Écritures analytiques avec les bons groupements (§8) et à exporter en tableur pour les rapports périodiques.
Conclusion
Tu sors avec un plan Département créé à 4 comptes, une distribution multi-plans maîtrisée (matériel WiFi 12 000 DA = {"5,2": 100}), un split département (licences éditeur 8 000 DA = {"7": 60, "2": 40}), l'auto-distribution timesheet câblée pour les 42h ventilées sur trois missions, et un pivot Écritures analytiques qui livre la marge projet par croisement. Sans aucun module additionnel. La bascule complète Heures saisies → marge projet calculée → facture client est traitée dans l'article suivant, qui clôt la saison S11 sur le volet comptabilité analytique appliqué à la facturation au temps passé.
Voir aussi dans ce hub Projet & Services
F11·4 — Comptabilité analytique Odoo CE
Plans, distribution, marges projet.
Articles complémentaires
#47 — La comptabilité dans Odoo 19
Plan comptable SCF DZ — derrière la distribution analytique sur factures.
#48 — Facturation et paiements dans Odoo 19
Pipeline facturation client — sortie naturelle d'une mission projet.