Où se trouve le bouton et quand faut-il l'utiliser
Où se trouve le bouton Envoyer le stock (Push Stock) et quand apparaît-il ?
Il se trouve sur la fiche de la boutique, dans l'écran Instances Shopify (Shopify Instances). On y accède par le menu Shopify › Configuration › Boutiques (Shopify › Configuration › Stores) ; pour le voir, il faut les droits demandés à chaque niveau : Lecteur (Viewer) pour Shopify et Opérateur (Operator) pour Configuration. Le bouton n'a aucune condition de visibilité : il s'affiche sur la fiche dans les versions 17, 18, 19 et 20 d'Odoo. Le fonctionnement décrit ci-dessous est celui du code du module dans Odoo 20.0. Avec Odoo en espagnol, le bouton s'appelle Envoyer le stock ; en allemand, Bestand übertragen ; en français, Envoyer le stock ; en italien, Invia stock ; en portugais, Envoyer le stock.


Dois-je l'utiliser ou Odoo envoie-t-il le stock tout seul ?
Le chemin normal est automatique : la tâche planifiée Envoyer le stock vers Shopify (Shopify Push Stock) arrive à ce même envoi toutes les 20 minutes et elle est active dès l'installation. Le bouton est l'exception : il sert à lancer l'envoi tout de suite, sans attendre la tâche. Une fois terminé, le champ Dernier envoi de stock (Last Stock Push) porte la date ; il est visible sur la fiche et dans la liste des boutiques, en lecture seule, et c'est le code qui l'écrit, pas vous. Le bouton Réinitialiser la synchronisation (Reset Sync) le vide.
Et le stock dans l'autre sens, de Shopify vers Odoo ?
C'est une autre tâche : Importer le stock Shopify (Shopify → Odoo) (Shopify Pull Stock (Shopify → Odoo)), toutes les 6 heures et active à l'installation. Sa méthode n'agit que si la case Synchronisation du stock activée (Sync Stock Enabled) est cochée ; elle se trouve sur la fiche de Instances Shopify, onglet Opérations (Operations), groupe Paramètres de synchronisation (Sync Settings), et elle est décochée par défaut. La méthode du bouton Envoyer le stock, telle qu'elle est écrite, ne regarde pas cette case.

Ce qu'il vérifie et ce qu'il envoie
Quels produits envoie-t-il ?
Pour chaque boutique, le module cherche les produits liés à celle-ci qui sont actifs et ont un article d'inventaire Shopify attribué. Il écarte ensuite ceux d'une société différente de celle de la boutique (Société, Company), même si le lien existait auparavant. S'il n'en reste aucun, il n'envoie rien à Shopify : il met seulement la date dans Dernier envoi de stock et passe à la boutique suivante.
Quelle quantité envoie-t-il : celle qui existe ou la disponible ?
La libre : les quantités en stock moins ce qui est déjà réservé, calculée avec la société de la boutique, arrondie à un nombre entier et ramenée à zéro s'il n'y a pas de valeur. La raison, selon le code lui-même : une commande Shopify confirmée dans Odoo réserve l'unité, mais le stock ne baisse qu'à la validation de la livraison. Si l'on envoyait les quantités en stock, entre la vente en ligne et l'expédition Shopify verrait de nouveau cette unité comme disponible, et pour la dernière unité un second client pourrait l'acheter. Plus de détails sur les commandes et les bons de livraison dans ce que le module ajoute aux ventes et dans ce qu'il ajoute aux bons de livraison.
Si j'envoie à nouveau les mêmes quantités, Shopify les ignore-t-il comme un doublon ?
Non. Chaque exécution de l'envoi génère sa propre clé et la fait varier à chaque lot, précisément pour que des quantités identiques envoyées plus tard ne soient pas prises pour un doublon. L'envoi se fait par lots de cent produits au maximum. Dans chaque lot, la quantité disponible dans Shopify est fixée telle que la calcule Odoo, avec le motif de correction et sans la comparer à ce que Shopify a à ce moment-là.
Ce qui change et quelles erreurs peuvent survenir
Quel emplacement Shopify utilise-t-il et qu'est-ce qui change dans Odoo ?
Il cherche d'abord l'emplacement : il utilise celui que la boutique a déjà enregistré et, s'il n'y en a aucun, il interroge Shopify, prend le premier qu'il renvoie et enregistre son identifiant et son nom. Dans Odoo, ce qui change, ce sont des dates : après l'envoi de chaque lot, il note la date de synchronisation du stock sur chaque produit de ce lot, et à la fin il écrit Dernier envoi de stock dans la boutique. Si une erreur interrompt l'action, le message s'affiche et cette dernière date n'est pas enregistrée.
Quels messages d'emplacement ou de connexion peuvent s'afficher en cliquant sur le bouton ?
Ceux-ci. Aucun emplacement Shopify trouvé pour … (No Shopify locations were found for …) : la boutique n'avait pas d'emplacement enregistré et Shopify n'en a renvoyé aucun ; à la place des points figure le domaine de la boutique. Shopify n'a pas retourné d'identifiant d'emplacement valide. (Shopify did not return a valid location id.) : Shopify a renvoyé un emplacement sans identifiant. Ces deux messages d'emplacement ne peuvent apparaître que lorsque l'emplacement enregistré manque. Il y a aussi Aucune connexion Shopify pour …. Ouvrez l'onglet Connection et suivez les étapes de configuration. (Shopify is not connected for …. Open the Connection tab and follow the setup steps.) : la boutique n'a toujours pas de jeton d'accès ; à la place des points figure le nom de la boutique. Ouvrez sa fiche, onglet Connection, et suivez les étapes de configuration.
Et les messages de l'appel à Shopify ?
Ils s'affichent aussi en cliquant sur le bouton. L'appel GraphQL Shopify a échoué (…) : … (Shopify GraphQL call failed (…): …) s'affiche quand Shopify répond avec un code d'erreur égal ou supérieur à 400 ; le message contient ce code et le début de la réponse. Avant de renoncer, le module traite le 401 et le 429 : face à un 401, il tente de renouveler l'accès et recommence, s'il y a un jeton de renouvellement ou des identifiants client ; face à un 429, il attend et recommence, avec jusqu'à trois tentatives pour un appel normal. Peuvent aussi s'afficher GraphQL Shopify a retourné des erreurs : … (Shopify GraphQL returned errors: …) et L'appel GraphQL Shopify a épuisé les tentatives. (Shopify GraphQL call exhausted retries.). Dans tous les cas, conservez le texte complet du message : c'est ce dont a besoin la personne qui vérifie la connexion.
Si vous le mettez en place avec de l'aide
FlexigoTech met en œuvre Odoo 17, 18, 19 et 20 et développe des connecteurs et des intégrations sur mesure. Le module est en paiement unique par version d'Odoo (prix sur sa fiche Odoo Apps et sur la page du module) et nécessite l'abonnement à FlexigoTech Cloud : plan Connecteur, 49 €/mois ou 490 €/an HT, jusqu'à 3 comptes de la plateforme. Avec cette connexion, les identifiants sont stockés chiffrés, la synchronisation est surveillée et un e-mail est envoyé en cas d'échec.
Si l'un de ces messages ne se résout pas, écrivez-nous avec le texte complet et la version d'Odoo que vous utilisez.
À lire aussi
Vérifié dans le code du connecteur (version 20.0) et dans les sources citées
Sources
- Code du module : flexigobe_shopify_seller_connector 20.0 (2950bdc0): views/shopify_instance_views.xml
- Code du module : flexigobe_shopify_seller_connector 20.0 (2950bdc0): models/shopify_instance.py
- Code du module : flexigobe_shopify_seller_connector 20.0 (2950bdc0): models/fgt_cloud.py
- apps.odoo.com/apps/modules/20.0/flexigobe_shopify_seller_connector
- flexigotech.com/en/services.html
- flexigotech.com/precios.html
