Mis à jour le 28 septembre 2026 : coût des ventes rétroactif dans Odoo 20, précisions sur le change et les Incoterms.
Dans le négoce, une phrase revient souvent : « ma marge, c'est le prix de vente moins le prix d'achat fournisseur ». C'est faux dès que la marchandise voyage. Fret, assurance, droits de douane, transitaire, manutention : ces frais d'approche font partie du coût d'acquisition, le Plan comptable général l'écrit noir sur blanc. Le change, lui, fixe la valeur en euros du prix d'achat. Tant qu'ils dorment dans un compte de charges au lieu d'être imputés aux articles, votre résultat n'est faussé que de la part des frais afférente au stock de clôture. Mais la marge négoce affichée produit par produit est fausse. Et c'est sur elle que vos commerciaux fixent leurs prix. Nous avons vérifié les textes, les Incoterms 2020 et la documentation d'Odoo 19 disponibles au 4 septembre 2026. Voici où se cachent ces frais, qui les paie selon l'Incoterm, comment les intégrer dans Odoo et ce qui se passe quand la facture du transitaire arrive trop tard.
- Le coût d'acquisition d'un stock comprend les droits de douane, le transport, la manutention et les autres coûts directement attribuables (Plan comptable général, art. 213-31).
- Dans notre exemple fictif, 4 800 € de frais d'approche sur un conteneur de 20 000 € font tomber la marge de 33,3 % à 17,3 %.
- L'Incoterm décide des frais qui restent à votre charge : presque tous en EXW, presque aucun en DDP.
- Odoo 19 impute ces frais aux réceptions avec les coûts logistiques (Landed Costs), en coût moyen ou en FIFO uniquement.
- Sous Odoo 19, validez-les avant de livrer : sinon, la part des unités déjà vendues n'entre pas dans la marge des commandes concernées. Odoo 20 met à jour rétroactivement la valeur des livraisons.
Pourquoi la marge « facture » ment
Idée reçue : marge = prix de vente − prix d'achat fournisseur. Réalité : selon le Plan comptable général publié par l'ANC (version au 1er janvier 2026), le coût des stocks comprend tous les coûts encourus pour les amener à l'endroit et dans l'état où ils se trouvent (art. 213-30). Le coût d'acquisition réunit le prix d'achat, droits de douane et taxes non récupérables compris, après remises, plus le transport, la manutention et les autres coûts directement attribuables (art. 213-31).
Prenons un exemple fictif : un négociant importe d'Asie un conteneur payé 20 000 € FOB et le revend 30 000 € HT.
- Marge « facture » : 10 000 €, soit 33,3 % du prix de vente.
- Frais d'approche : 4 800 €. Le coût de revient passe à 24 800 €, soit un coefficient d'approche de 1,24.
- Marge réelle : 5 200 €, soit 17,3 %.
Le piège est subtil. La facture du transitaire finit bien en charges, mais aucun article ne la porte. Vos prix et vos remises reposent sur un coût faux, et votre stock de clôture est sous-évalué.
Les frais d'approche, poste par poste
Notre conteneur fictif, revendu 30 000 € HT, avec l'impact en points de marge.
| Poste | Exemple (fictif) | Où le saisir dans Odoo | Impact sur la marge |
|---|---|---|---|
| Prix fournisseur (FOB) | 20 000 € | Bon de commande fournisseur ; la réception est valorisée au prix de la commande | Base : 33,3 % |
| Fret maritime | 2 400 € | Facture du transporteur, article « coût logistique », répartition par volume | −8,0 points |
| Assurance transport | 100 € | Facture de l'assureur ou du transitaire, répartition par coût actuel | −0,3 point |
| Droits de douane | 900 € (taux fictif de 4 % sur 22 500 € de valeur en douane) | Facture du transitaire (débours), répartition par coût actuel | −3,0 points |
| Honoraires du transitaire | 450 € | Même facture, répartition égale ou par quantité | −1,5 point |
| Post-acheminement port → entrepôt | 650 € | Facture du transporteur routier, répartition par poids | −2,2 points |
| Manutention, dépotage | 300 € | Facture du prestataire, répartition par quantité | −1,0 point |
| Change | Commande en devise | Devise du bon de commande ; Odoo convertit la valeur dans la devise de la société | Variable |
| TVA à l'import | Autoliquidée | Déclaration de TVA, hors coût du stock | Aucun, si elle est récupérable |
| Total | 4 800 € | Plusieurs factures, un seul coût de revient | −16 points : marge réelle de 17,3 % |
Les droits portent sur la valeur en douane. Selon la fiche de la douane sur la valeur en douane à l'importation (mise à jour le 10 novembre 2025), on ajoute à la valeur transactionnelle le transport, l'assurance et la manutention jusqu'au lieu d'introduction dans l'Union, pas au-delà. D'où nos 22 500 €.
Côté change, un stock acheté en devise entre au cours du jour de l'opération (PCG, art. 420-1) ; l'écart au règlement, lui, ne se rattache pas au stock, sauf couverture de change, dont l'effet s'intègre à la valeur d'entrée (art. 420-1). En Suisse, enfin, les produits industriels ne supportent plus de droits de douane depuis le 1er janvier 2024 (décision du Conseil fédéral du 2 février 2022). Fret, assurance, transitaire et manutention restent.
Incoterm : qui paie quoi, et jusqu'où
Les Incoterms 2020 de la Chambre de commerce internationale comptent 11 règles. Ils répartissent frais, risques et formalités entre vendeur et acheteur. Pour vous, importateur, ils fixent les frais d'approche restant à votre charge.
- EXW (à l'usine) : vous payez presque tout, du chargement aux droits d'import.
- FOB (franco à bord, maritime) : le vendeur dédouane à l'export et charge à bord. Fret, assurance, import, droits et post-acheminement sont pour vous.
- CIF (coût, assurance et fret, maritime) : le vendeur paie fret et assurance minimale (clauses C) jusqu'au port de destination, mais le risque vous est transféré dès le chargement à bord. Import, droits et post-acheminement restent pour vous.
- DAP (rendu au lieu de destination) : le vendeur achemine jusqu'au lieu convenu. Déchargement, dédouanement import et droits sont pour vous.
- DDP (rendu droits acquittés) : le vendeur prend aussi l'import et les droits. Il vous reste le déchargement.
FOB et CIF restent courants pour les conteneurs, mais la CCI recommande plutôt FCA et CPT/CIP.
Deux pièges. Payer n'est pas porter le risque : en CIF, une avarie en mer vous concerne. Et un prix EXW plus bas peut coûter plus cher, rendu entrepôt, qu'un prix DAP.
Dans Odoo 19, l'Incoterm et son lieu se renseignent dans l'onglet « Autres informations » du bon de commande et de la facture ; l'Incoterm du bon de commande est repris sur la facture. Depuis Odoo 19.4 en SaaS (notes de version de juillet 2026), un Incoterm par défaut se règle aussi sur la fiche fournisseur et se reporte sur ses bons de commande. C'est une information : ce champ ne calcule aucun frais.
Intégrer les frais d'approche dans Odoo
La fonction s'appelle Landed Costs (« Coûts logistiques » en français). Selon la documentation Odoo 19.0 sur les landed costs, elle intègre transport, assurance, droits et autres frais à la valorisation des produits. Prérequis : une catégorie de produits en coût moyen (AVCO) ou en FIFO, pas au prix standard.
- Activez la fonction : Inventaire > Configuration > Paramètres, section Valorisation, case Coûts logistiques, puis choisissez le journal par défaut.
- Créez un article par nature de frais : type Service, onglet Achats, case « Est un coût logistique », avec une méthode de répartition par défaut : égale, par quantité, par coût actuel, par poids ou par volume.
- Recevez la marchandise : seuls les transferts validés peuvent recevoir des frais.
- Saisissez la facture du transitaire en brouillon avec vos articles de frais et enregistrez : le bouton « Créer des coûts logistiques » apparaît.
- Rattachez les réceptions dans le champ Transferts et cliquez sur Calculer. L'onglet « Correction de valorisation » affiche la valeur d'origine, les coûts additionnels et la nouvelle valeur.
- Validez : en valorisation permanente, l'écriture est passée dans le journal choisi.
Un coût logistique peut aussi se créer depuis Inventaire > Opérations > Coûts logistiques, pour saisir une estimation dès l'arrivée, à régulariser avec votre expert-comptable.
Suivre la marge réelle par produit et par fournisseur
Un coût juste doit encore être visible. Les outils documentés :
- La marge sur les commandes : activez « Marges » dans Ventes > Configuration > Paramètres. Les devis affichent la marge totale ; les colonnes Marge et Marge (%) s'activent sur les lignes via le sélecteur de colonnes. Odoo calcule prix de vente − coût : si ce coût ignore vos frais d'approche, la marge est fausse dès le devis.
- L'analyse par produit : vue pivot ou graphique des devis, mesure Marge, regroupement par produit.
- Le coût unitaire : dans le rapport Stock d'Inventaire, un clic sur le coût unitaire montre ses mises à jour et leur origine en coût moyen.
- Le coefficient d'approche par fournisseur : chaque coût logistique affiche valeur d'origine et nouvelle valeur. Leur rapport, réception par réception, révèle le vrai coût de chaque fournisseur rendu entrepôt.
- Le prix à partir de la marge : depuis Odoo 19.4 en SaaS, la marge se modifie sur la ligne de commande et le prix de vente est recalculé. Utile, si le coût est juste.
L'IA peut-elle imputer vos frais d'approche ?
Elle peut lire la facture du transitaire. Elle ne décide pas de la répartition.
Ce qui existe dans Odoo 19
La numérisation des factures fournisseurs combine OCR et IA, contre des crédits : elle accélère la saisie de la facture du transitaire, mais les lignes restent à affecter à vos articles de frais. Depuis la SaaS 19.3, on peut demander à un agent IA de créer des enregistrements, y compris en lui confiant un fichier d'instructions, par exemple un PDF. Aucune fonction IA documentée ne calcule ni ne répartit les frais d'approche : ce sont les coûts logistiques, avec leurs méthodes égale, par quantité, par coût, par poids ou par volume.
Ce que font les concurrents
Microsoft Dynamics 365 Business Central répartit les frais annexes à parts égales, par montant, par poids ou par volume, et un traitement d'ajustement des coûts reporte un frais tardif sur le coût des ventes. C'est de la règle de gestion, pas de l'IA, mais elle répond au cas que nous avons soulevé.
- Disponible · payantNumérisation de la facture du transitaireOCR et IA, contre des crédits ; les lignes restent à affecter.Source
- Disponible · sans IACoûts logistiquesRépartition égale, par quantité, par coût, par poids ou par volume.Source
- Disponible · SaaS 19.3Agents IA qui créent des enregistrementsY compris à partir d'un fichier d'instructions, par exemple un PDF ; aucune répartition de frais documentée.Source
- Non documentéRépartition des frais par IAAucune fonction IA ne calcule ni ne répartit les frais d'approche.
- Chez les concurrentsFrais tardif reporté au coût des ventesBusiness Central le fait par un ajustement des coûts, sans IA.Source
Questions fréquentes
Les frais d'approche entrent-ils dans la valeur du stock ?
Oui, en France : le PCG les inclut dans le coût d'acquisition (art. 213-30 et 213-31). La TVA récupérable et les coûts administratifs non dédiés restent dehors. Dans Odoo 19, un coût logistique validé augmente la valeur des biens déjà reçus sans changer leur quantité. En Suisse, faites valider la méthode par votre fiduciaire.
Comment répartir un transport sur plusieurs produits ?
Suivez ce qui fait le coût : volume pour un conteneur, poids pour la route, valeur pour l'assurance, répartition égale pour un forfait. Exemple fictif : deux articles valent chacun 10 000 € ; l'un occupe 20 m³, l'autre 8 m³. Un fret de 2 400 € réparti par coût donne 1 200 € à chacun ; par volume, 1 714 € et 686 €. Soit 514 € d'écart par article. Renseignez poids et volume sur vos fiches articles. Et si vos taux de droits varient d'un code à l'autre, la répartition par coût reste une approximation.
Et si la facture du transitaire arrive après la vente ?
C'est le point clé de notre enquête. La documentation 19.0 ne traite pas ce cas ; nous avons donc lu le code source public du module, branche 19.0. En valorisation permanente, l'écriture ne porte au stock que la quote-part des unités encore présentes ; le reste demeure en charges. La valeur des livraisons passées n'est pas recalculée : la marge des commandes concernées reste surestimée. Résultat global juste, marge par produit fausse. Validez vos coûts logistiques avant la première livraison et testez ce scénario sur une copie de votre base. Odoo 20, présenté le 24 septembre 2026, change ce comportement : selon ses notes de version, quand un coût logistique modifie le coût d'un produit déjà livré, la valeur de la livraison est mise à jour rétroactivement, ainsi que le coût facturé en valorisation permanente. Sous Odoo 19, la règle reste de valider avant de livrer.
Conclusion
La marge d'un négociant ne se lit pas sur la facture fournisseur. Le coût d'achat import intègre fret, assurance, droits, transitaire, manutention et la conversion au cours du jour. L'Incoterm dit lesquels vous paierez. Les landed costs Odoo font le reste, à deux conditions sous Odoo 19 : travailler en coût moyen ou en FIFO, et valider les frais avant de livrer. Odoo 20, présenté le 24 septembre 2026, met à jour rétroactivement la valeur des livraisons et le coût facturé en valorisation permanente quand un coût logistique arrive après la vente, et permet d'affecter un coût logistique à certains produits d'une réception (voir notre enquête sur Odoo 20 et le négoce). Dès maintenant, calculez le coefficient d'approche de vos trois derniers conteneurs.
Votre marge par produit intègre-t-elle vraiment vos frais d'approche ?
Nous passons en revue avec vous vos réceptions, vos coûts logistiques et vos marges dans Odoo.
Réserver un appel diagnostic gratuitVous êtes négociant et vous voulez voir ce que ça donne chez vous ? Notre page Odoo pour le négoce achat-revente détaille les flux, les modules et les frais d'approche, avec un diagnostic gratuit à la clé.