Skip to Content

Importer et exporter des données

À l'issue de ce chapitre

  • extraire n'importe quel ensemble d'enregistrements vers un tableur ;
  • comprendre l'identifiant externe et ce qu'il permet ;
  • charger des données sans créer de doublons ;
  • rattacher des enregistrements les uns aux autres à l'import ;
  • diagnostiquer un import en échec.

Un mécanisme unique pour toute la base

L'import et l'export ne sont pas des fonctions propres à une application. Ce sont des gestes du socle, disponibles depuis toute vue liste : produits, contacts, factures, tâches, écritures comptables, emplacements de stock. La procédure est la même partout, seuls les champs changent.

Cette généralité en fait l'outil de référence pour trois besoins :

  • la reprise de données à la mise en service, depuis l'ancien système ou depuis des tableurs ;
  • la modification en masse d'enregistrements existants : une hausse tarifaire, un changement de responsable sur trois cents dossiers ;
  • l'extraction vers un tableur, pour une analyse ou une transmission à un tiers.

Astuce

Ces trois usages reposent sur le même aller-retour : on exporte ce qui existe, on le modifie dans un tableur, on le réimporte. C'est le mode opératoire à privilégier, il garantit que le fichier a exactement la forme qu'Odoo attend.

Exporter

  1. Ouvrir la vue liste et appliquer les filtres qui délimitent le périmètre voulu.
  2. Cocher les enregistrements, ou cocher la case d'en-tête pour tout sélectionner.
  3. Cliquer sur Actions puis Exporter.
  4. Composer la liste des Champs à exporter : chercher le champ voulu dans la colonne Champs disponibles, puis cliquer sur le plus à sa droite. Il rejoint la colonne de droite.
  5. Retirer un champ de la sélection par l'icône de corbeille en regard, et modifier l'ordre des colonnes en faisant glisser un champ par sa poignée.
  6. Choisir le Format : Excel Workbook (.xlsx) ou Plain Text (.csv).
  7. Cliquer sur Exporter.

Astuce

Les champs marqués d'un chevron se déplient : ils désignent un enregistrement lié, et leur contenu donne accès aux champs de celui-ci. C'est ainsi qu'on exporte le pays d'un contact ou le vendeur d'une commande, sans passer par un second export.

La zone de recherche en haut de la colonne évite de parcourir une liste qui compte souvent plusieurs centaines d'entrées.

Assistant d'export de données
Figure 22.1 : Assistant d'export de données

Choisir le format

Format Usage
Excel Workbook (.xlsx) Tableur. Lecture, mise en forme, transmission à un tiers. Les colonnes sont typées et les nombres directement exploitables.
Plain Text (.csv) Fichier texte. Réimport, traitement automatisé, volumes importants. Format brut, sans mise en forme, mais accepté partout.

Préparer un export réimportable

L'interrupteur Updatable fields only, placé en regard du titre Champs disponibles, change la nature du fichier produit. Il réduit la liste des champs proposés à ceux qu'Odoo saura relire, y fait figurer ID externe, et surtout écrit dans la ligne d'en-tête les noms techniques des champs au lieu de leurs libellés. C'est cette ligne d'en-tête technique qui rend le fichier réimportable.

C'est donc cet interrupteur qui distingue un export de consultation d'un export de travail. Sans lui, le fichier se lit mais ne se réimporte pas.

Point d'attention

L'interrupteur ne place pas de lui-même la colonne d'identifiant dans le fichier : ajoutez ID externe à la liste des champs à exporter. Sans cette colonne, le réimport créera des doublons au lieu de mettre à jour.

Astuce

Lorsqu'une liste de champs doit resservir (un état mensuel, un fichier destiné à un partenaire), enregistrez-la comme modèle. La liste déroulante en haut de la colonne de droite rappelle les sélections déjà nommées ; l'icône voisine enregistre la sélection en cours sous un nom, et les deux icônes qui la remplacent ensuite permettent de la renommer ou de la supprimer.

Exporter les champs traduits

Lorsque plusieurs langues sont installées et qu'au moins un champ traduisible figure dans la colonne de droite, un sélecteur de langues apparaît sous cette colonne. Chaque langue retenue produit sa propre colonne pour chaque champ traduisible, l'en-tête portant le nom du champ suivi d'une arobase et du code de la langue : name@fr_FR. La colonne sans suffixe disparaît, pour ne pas exporter deux fois la même valeur sous deux en-têtes différents.

Note

L'import reconnaît la même écriture : une colonne name@fr_FR alimente la traduction française du champ, et non la valeur de la langue active. L'aller-retour entre les deux gestes reste donc possible sur les bases multilingues.

L'identifiant externe

C'est la notion à comprendre avant tout import. Elle explique à la fois pourquoi un import crée des doublons et comment l'empêcher.

Chaque enregistrement d'Odoo porte un numéro interne, invisible et propre à la base. Il ne peut pas servir de repère : le produit numéro 412 d'une base n'est pas le même dans une autre. L'identifiant externe est un second nom, textuel et stable, que l'on choisit soi-même : par exemple produit_vis_m6_inox.

Il sert de clé de rapprochement à l'import :

  • si la valeur de la colonne ID externe est inconnue de la base, Odoo crée l'enregistrement et lui attribue cet identifiant ;
  • si elle est déjà connue, Odoo met à jour l'enregistrement existant au lieu d'en créer un autre.

Pourquoi c'est décisif

Sans identifiant externe, réimporter deux fois le même fichier crée deux jeux d'enregistrements. Avec lui, le second import corrige simplement le premier. C'est ce qui rend une reprise de données reprenable : on peut charger, constater une erreur, corriger le tableur et recharger, autant de fois qu'il le faut, sans jamais polluer la base.

Astuce

Adoptez une convention lisible et durable : la référence du catalogue d'origine, le code client de l'ancien système, le numéro de compte. L'identifiant externe est le pont entre les deux systèmes, et il survit à la reprise.

Importer

  1. Ouvrir la vue liste du type d'enregistrement concerné.
  2. Ouvrir le menu d'actions par l'icône à trois points de la barre supérieure, elle n'apparaît que si aucun enregistrement n'est coché, puis cliquer sur Importer.
  3. Charger le fichier par Charger, ou le déposer directement sur la zone centrale. Une fois l'aperçu affiché, le bouton devient Charger à nouveau et sert à remplacer le fichier.
  4. Si le classeur comporte plusieurs onglets, désigner le bon dans Feuille :. Ce sélecteur n'apparaît pas si le fichier n'en compte qu'un.
  5. Vérifier que Utiliser la première ligne comme en-tête est coché lorsque le fichier porte une ligne de titres.
  6. Contrôler ligne à ligne la correspondance entre la Colonne de fichier et le Champ Odoo. Odoo propose une association pour chaque colonne, qu'une croix permet de retirer et de refaire.
  7. Lire la dernière colonne du tableau, qui ne porte pas de titre : elle signale les erreurs, mais aussi les conventions de saisie attendues.
  8. Cliquer sur Tester : Odoo analyse la totalité du fichier sans rien écrire.
  9. Corriger les erreurs, retester, puis cliquer sur Importer.

Astuce

Le volet Aide, à gauche, propose un modèle d'importation prêt à l'emploi pour les principaux types d'enregistrement : contacts, produits, commandes, tâches, employés, écritures. Il porte les bonnes colonnes, dans le bon ordre, avec une ligne d'exemple. Les modèles moins courants n'en ont pas. C'est le point de départ le plus sûr, plus encore qu'un export, puisqu'il ne contient que ce qui est réellement importable.

Assistant d'import de données
Figure 22.2 : Assistant d'import de données

Note

Tester n'écrit rien : la base reste intacte, quelles que soient les erreurs rencontrées, et un essai concluant répond Tout semble correct. Il n'y a donc aucune raison de s'en dispenser.

Le panneau latéral

Outre le volet Aide, le panneau de gauche porte les réglages du chargement :

  • Feuille :, l'onglet du classeur à lire ;
  • Utiliser la première ligne comme en-tête ;
  • Suivre les modifications dans le chatter, décoché par défaut : coché, chaque écriture est inscrite dans l'historique du document et ses abonnés sont notifiés, ce qui ralentit le chargement ;
  • Pièces jointes, qui n'apparaît que sur les modèles portant un champ de fichier : un second bouton Charger y prend les images et documents que les cellules du tableau désignent par leur nom.

Le volet Formatage règle l'interprétation du fichier : séparateur de colonnes, séparateur décimal, format de date, encodage. Odoo les détecte seul dans la plupart des cas ; ils se corrigent ici lorsque les nombres ou les dates sortent faux à l'aperçu.

Note

Ce volet n'apparaît que pour les fichiers CSV. Un classeur XLSX porte ses propres types de données, et ces réglages n'auraient pas d'objet : c'est d'ailleurs une raison de préférer le tableur pour une reprise, les erreurs de séparateur décimal étant la première cause de montants faux à l'import.

Rattacher des enregistrements liés

Un produit renvoie à une catégorie, un contact à un pays, une facture à un client. Ces liens se chargent par la valeur qui désigne l'enregistrement visé, selon trois écritures possibles.

Colonne Contenu Quand l'employer
Catégorie Le nom affiché Lisible, mais échoue si le nom est absent ou ambigu.
Catégorie/ID externe L'identifiant externe Le plus sûr. Insensible aux renommages et aux homonymes.
Catégorie/ID base de données Le numéro interne Réservé aux transferts entre deux copies d'une même base.

Point d'attention

Les trois écritures s'excluent : renseigner à la fois le nom et l'identifiant externe pour le même champ fait échouer la ligne, Odoo ne pouvant trancher entre les deux indications.

Pour un champ qui accepte plusieurs valeurs (les étiquettes d'un contact, les taxes d'une ligne) séparez-les par des virgules dans la même cellule : Prospect,Grand compte,Export.

Astuce

Ces colonnes composées sont pénibles à écrire de mémoire. Exportez d'abord deux ou trois enregistrements déjà corrects en activant Updatable fields only : les en-têtes obtenus donnent la syntaxe exacte, y compris pour les champs liés.

Note

Sur une base où plusieurs langues sont installées, l'assistant d'import ajoute une colonne Langue en regard de chaque champ traduisible. Elle désigne la langue que la colonne du fichier alimente, et dispense d'écrire soi-même le suffixe @fr_FR dans l'en-tête.

Mettre à jour en masse

La modification de plusieurs centaines d'enregistrements suit toujours le même aller-retour :

  1. Filtrer la liste sur les enregistrements à modifier.
  2. Les exporter en activant Updatable fields only, colonne ID externe comprise.
  3. Ouvrir le fichier dans un tableur et modifier les seules colonnes concernées, sans toucher à la colonne d'identifiant externe.
  4. Réimporter le fichier.

Odoo reconnaît chaque ligne par son identifiant externe et applique les modifications aux enregistrements existants.

Point d'attention

Ne supprimez pas de lignes du fichier pour "ne pas les modifier" : c'est inutile, une ligne inchangée est réécrite à l'identique. Ne supprimez surtout pas la colonne d'identifiant externe, qui transformerait la mise à jour en création de doublons.

Ordonner une reprise de données

Un fichier qui référence une valeur inexistante échoue, ligne par ligne. L'ordre de chargement découle donc des dépendances : ce qui est désigné doit exister avant ce qui le désigne.

  1. Les données de référence : catégories, unités de mesure, conditions de paiement, taxes, étiquettes.
  2. Les tiers : contacts, sociétés, puis leurs adresses de livraison rattachées.
  3. Le catalogue : produits, puis tarifs fournisseurs et listes de prix.
  4. Les données de mouvement : stocks initiaux, commandes en cours, écritures d'à-nouveau.

Astuce

Sur un fichier de plusieurs milliers de lignes, isolez d'abord une vingtaine de lignes représentatives dans un fichier séparé et importez-les. Une erreur de format détectée sur vingt lignes se corrige en quelques minutes ; la même erreur constatée après le chargement complet impose une reprise.

Diagnostiquer un échec

Les erreurs signalées portent le numéro de ligne et le champ en cause. Les plus fréquentes :

Message Cause habituelle
Valeur introuvable Le nom ou l'identifiant désigné n'existe pas encore. Vérifier l'ordre d'import, l'orthographe, les espaces en fin de cellule.
Valeur ambiguë Deux enregistrements portent le même nom. Passer à l'identifiant externe.
Champ inconnu L'en-tête ne correspond à aucun champ. Corriger la correspondance dans l'assistant, ou reprendre l'en-tête d'un export.
Format de date ou de nombre Le fichier n'emploie pas les séparateurs attendus. Les ajuster dans le volet Formatage.

Point d'attention

Un import est atomique par lot, non sur la totalité du fichier. Si une ligne est refusée, aucune ligne du lot en cours n'est écrite et l'import s'arrête, mais les lots déjà traités, de 2 000 lignes par défaut, restent en base. Sur un fichier de moins de 2 000 lignes, tout se passe donc comme si l'import échouait en bloc ; au-delà, un import partiel est possible, et c'est le bouton Reprendre qui poursuit le chargement à la première ligne non traitée.

Charger de gros volumes

Au-delà de cent lignes, Odoo découpe le chargement en lots de 2 000 lignes. Une fenêtre de progression annonce le lot en cours, le nombre total de lots et le temps restant estimé ; la croix rouge en bout de barre interrompt le chargement, après avoir laissé le lot en cours se terminer.

Il n'y a rien à renseigner pour reprendre un chargement arrêté avant la fin, qu'il ait été interrompu ou refusé sur une ligne : le bouton Importer devient Reprendre et un message indique la ligne à laquelle la reprise se fera. Les lots déjà écrits restent en base, et vous pouvez tester ou recharger le fichier avant de reprendre.

Note

La Taille du lot ne se règle qu'en mode développeur, dans le panneau latéral, et seulement au-delà de cent lignes. La réduire soulage la base sur les modèles lourds ; la valeur par défaut convient dans tous les autres cas.

Note

La taille du fichier chargé est plafonnée à 128 Mo, sauf configuration serveur différente.

Astuce

Planifiez les reprises volumineuses hors des heures d'utilisation. Un import massif sollicite la base et ralentit les autres utilisateurs.