🛒 CommandesIntermédiaire PS 1.6 PS 1.7 PS 8.x

Extraire les données de facturation PrestaShop via requête SQL

Requête SQL complète pour extraire factures, clients et produits depuis PrestaShop. Compatible 1.6, 1.7 et 8.x avec export CSV via le back-office.

En bref : Requête SQL complète pour extraire toutes les données de facturation PrestaShop (factures, clients, adresses, produits, TVA, remises) depuis le gestionnaire SQL du back-office, avec filtres par date et statut, compatible de PrestaShop 1.6 à 8.x.

Publié le 21 mars 2026 5 min de lecture Alexandre Carette

Pourquoi extraire les données de facturation par SQL

Le back-office PrestaShop permet d'exporter les commandes au format CSV, mais ce fichier reste limité : il ne croise pas les informations de facturation, les détails produits, les adresses clients et les remises en une seule vue. Pour alimenter un logiciel comptable, produire un reporting fiscal ou simplement auditer vos ventes, une requête SQL sur mesure est souvent la solution la plus rapide et la plus flexible.

PrestaShop intègre un gestionnaire de requêtes SQL directement dans le back-office (*Paramètres avancés → Gestionnaire SQL*), ce qui permet d'exécuter ces extractions sans accéder à phpMyAdmin ni ouvrir un terminal.

Structure des tables de facturation PrestaShop

Avant d'écrire la requête, il est essentiel de comprendre comment PrestaShop organise les données de facturation. Voici les tables principales impliquées :

TableRôle `ps_order_invoice`Facture : numéro, date, totaux HT/TTC, frais de port `ps_orders`Commande : référence, moyen de paiement, statut `ps_order_detail`Lignes de commande : produit, quantité, prix unitaire `ps_customer`Client : nom, prénom, email `ps_address`Adresse de facturation complète `ps_order_cart_rule`Codes promo et remises appliquées

Note : Le préfixe ps_ est celui par défaut. Si vous avez personnalisé le préfixe lors de l'installation (recommandé pour la sécurité), adaptez la requête en conséquence.

Requête SQL complète d'extraction

Cette requête joint l'ensemble des tables nécessaires pour obtenir une vue complète de chaque ligne de facturation :


SELECT
    oi.id_order_invoice       AS N_facture,
    oi.date_add               AS Date_facture,
    oi.id_order               AS N_commande,
    o.reference               AS Ref_commande,
    c.lastname                AS Nom,
    c.firstname               AS Prenom,
    c.email                   AS Email,
    CONCAT(
        a.address1,
        IF(a.address2 != '', CONCAT(' ', a.address2), ''),
        ' ', a.postcode,
        ' ', a.city
    )                         AS Adresse_facturation,
    a.country                 AS Pays,
    o.payment                 AS Moyen_paiement,
    od.product_name           AS Nom_produit,
    od.product_reference      AS Ref_produit,
    od.product_ean13          AS EAN13_produit,
    od.product_quantity       AS Quantite,
    od.unit_price_tax_excl    AS Prix_unitaire_HT,
    od.total_price_tax_incl   AS Total_ligne_TTC,
    oi.total_products         AS Total_produits_HT,
    (oi.total_paid_tax_incl
     - oi.total_paid_tax_excl) AS Montant_TVA,
    (oi.total_paid_tax_incl
     - oi.total_shipping_tax_incl) AS Total_produits_TTC,
    oi.total_shipping_tax_excl AS Frais_expedition_HT,
    oi.total_shipping_tax_incl AS Frais_expedition_TTC,
    oi.total_paid_tax_incl    AS Total_paye_TTC,
    ocr.name                  AS Nom_reduction,
    ocr.value                 AS Montant_reduction
FROM ps_order_invoice oi
LEFT JOIN ps_orders o
    ON oi.id_order = o.id_order
LEFT JOIN ps_order_detail od
    ON o.id_order = od.id_order
LEFT JOIN ps_customer c
    ON o.id_customer = c.id_customer
LEFT JOIN ps_address a
    ON o.id_address_invoice = a.id_address
LEFT JOIN ps_order_cart_rule ocr
    ON o.id_order = ocr.id_order
ORDER BY oi.date_add DESC;

Explications des jointures

  • **`ps_order_invoice → ps_orders`** : Lie chaque facture à sa commande. Une commande peut générer plusieurs factures (livraisons partielles).
  • **`ps_orders → ps_order_detail`** : Récupère chaque ligne produit de la commande. C'est une relation 1-N, donc la requête produit une ligne par produit commandé.
  • **`ps_orders → ps_customer`** : Identifie le client via `id_customer`.
  • **`ps_orders → ps_address`** : Utilise `id_address_invoice` (et non `id_address_delivery`) pour obtenir l'adresse de facturation.
  • **`LEFT JOIN ps_order_cart_rule`** : Récupère les éventuelles réductions. `LEFT JOIN` car toutes les commandes n'ont pas de code promo.

Utilisation dans le gestionnaire SQL du back-office

  1. Rendez-vous dans **Paramètres avancés → Gestionnaire SQL**
  2. Cliquez sur **Ajouter une nouvelle requête SQL**
  3. Donnez un nom explicite (ex : *Export facturation complet*)
  4. Collez la requête ci-dessus
  5. Cliquez sur **Enregistrer** puis **Lancer**
  6. Utilisez le bouton **Exporter en CSV** pour récupérer le fichier
  7. Astuce : Le gestionnaire SQL de PrestaShop n'autorise que les requêtes SELECT. Aucun risque de modifier vos données par erreur.

    Filtrer par période

    Pour extraire uniquement les factures d'une période donnée (typiquement pour une déclaration trimestrielle de TVA), ajoutez une clause WHERE :

    
    WHERE oi.date_add BETWEEN '2026-01-01 00:00:00'
                          AND '2026-03-31 23:59:59'
    ORDER BY oi.date_add DESC;
    

    Filtrer par statut de commande

    Pour n'exporter que les commandes effectivement payées et éviter les paniers abandonnés ou les commandes annulées :

    
    WHERE o.current_state IN (
        SELECT id_order_state
        FROM ps_order_state
        WHERE paid = 1
    )
    ORDER BY oi.date_add DESC;
    

    Cette approche est plus robuste que de coder en dur les identifiants de statut, car elle s'adapte automatiquement aux statuts personnalisés marqués comme « payé ».

    Adaptation pour PrestaShop 8.x

    La structure des tables de facturation est restée stable de PrestaShop 1.6 à 8.x. Les principales différences à connaître :

    • **Préfixe de tables** : En PS 8.x, le préfixe personnalisé est encore plus recommandé. Vérifiez votre préfixe dans `app/config/parameters.php` (clé `database_prefix`).
    • **Champ `product_ean13`** : Renommé en `ean13` dans certaines versions intermédiaires de PS 1.7, puis toujours présent dans `ps_order_detail` en 8.x. Vérifiez avec `DESCRIBE ps_order_detail` si la colonne existe.
    • **Symfony et le nouveau back-office** : Le gestionnaire SQL est toujours disponible en 8.x, mais il se trouve désormais dans *Paramètres avancés → Base de données → Gestionnaire SQL*.
    • **Multidevise** : Si votre boutique gère plusieurs devises, ajoutez `o.id_currency` et joignez `ps_currency` pour afficher le code devise (EUR, USD…) dans votre export.

    Bonnes pratiques pour l'export comptable

    Automatiser l'extraction

    Pour les boutiques à fort volume, l'export manuel devient fastidieux. Deux approches :

    1. **Cron + script PHP** : Exécutez la requête via un script CLI qui génère un CSV déposé sur un espace sécurisé.
    2. **Module dédié** : Développez un module PrestaShop qui expose un endpoint sécurisé (token + IP whitelistée) retournant le CSV, consommable par votre logiciel comptable.
    3. Sécurité des données

      • Ne stockez jamais les exports contenant des données personnelles (noms, adresses, emails) dans un répertoire accessible publiquement.
      • Respectez le RGPD : les données de facturation doivent être conservées 10 ans (obligation légale française), mais les données personnelles associées peuvent être pseudonymisées après ce délai.
      • Dans le gestionnaire SQL, seuls les profils administrateurs y ont accès par défaut. Vérifiez vos permissions dans *Administration → Profils*.

      Cohérence des montants

      Attention aux arrondis TVA : PrestaShop peut calculer la TVA ligne par ligne ou sur le total. Le mode de calcul se configure dans *Commandes → Factures → Options de taxes*. Votre requête SQL reflète le résultat stocké, pas le mode de calcul. Si les montants ne correspondent pas à vos attentes, vérifiez ce paramètre.

#facturation #SQL #export données #comptabilité #back-office #requête SQL

Questions fréquentes

Tout ce que vous devez savoir sur ce sujet.

Un projet PrestaShop ?

Discutons-en directement.

★★★★★

193 projets livrés

Gratuit & sans engagement — réponse sous 24h

Alexandre Carette

Alexandre Carette

Expert PrestaShop & Architecture E-commerce

Développeur PrestaShop depuis 2014, 193 projets livrés. Je conçois des architectures headless Nuxt + PrestaShop et des outils d'automatisation IA pour les e-commerçants.