Jump to content
wizwill

requête SQL pour faire un inventaire

Recommended Posts

Bonjour la communauté,

Je souhaite réaliser un inventaire des stocks pour ma fin d'année fiscale.

Je cherche une requête SQL à utilisé dans menu GESTIONNAIRE SQL de mon Prestashop 1.7

mon prefice est rm_ et non pas ps_

Les diverses requêtes que j'ai pu trouver me font une erreur 500 ou alors une page vide à l'exportation .csv

Il me faudrais en gros :

  • ID produit
  • nom produit
  • quantité stock
  • prix d'achat HT
  • prix de vente TTC
  • nom du fabricant
  • référence produit
  • produit actif 0/1

 

merci de votre aide.

 

Share this post


Link to post
Share on other sites

L'inventaire des stocks se fait au 31 décembre, non ?

Ajustez les préfixes et l'id_lang:

SELECT 
	if(m.name != '', m.name, '-') as Fabricant, 
	pl.name as Produit, 
	p.reference as Reference, 
	if(sa.quantity is null, 0, sa.quantity) as `Quantité`, 
	'' as `Réel`,
	if(p.active = 0,'Non','Oui') as `Activé`, 
	round(ps.wholesale_price,2) as `Prix Achat`, 
	round(ps.price,2) as `Prix Vente`, 
	if(sa.quantity is null, 0, round(sa.quantity*ps.wholesale_price,2)) as `Total Achat`, 
	if(sa.quantity is null, 0, round(sa.quantity*ps.price,2)) as `Total Vente`
FROM ps_product p
INNER JOIN ps_product_shop ps ON (ps.id_product = p.id_product)
INNER JOIN ps_product_lang pl ON (pl.id_product = p.id_product)
LEFT JOIN  ps_stock_available sa ON (p.id_product = sa.id_product)
LEFT JOIN ps_manufacturer m ON (m.id_manufacturer = p.id_manufacturer)
WHERE pl.id_lang = 2
ORDER BY m.name ASC, pl.name ASC;

 

Share this post


Link to post
Share on other sites

Merci,

en effet c'est souvent en fin d'année mais nous avons fait le choix de fin mars.

concernant le préfixe dois-je mettre rm_ à la place de tous les ps_ ?

 

Share this post


Link to post
Share on other sites

sur une requete simple cela fonctionne comme :

SELECT email FROM rm_customer

mais dès que je demande plus d'info : page vide

SELECT p.id_product, pl.name, p.quantity,  p.id_manufacturer, p.reference, p.wholesale_price, p.price, p.active FROM rm_product p

 

Edited by wizwill (see edit history)

Share this post


Link to post
Share on other sites

Où faites-vous votre requete ?

Si vous utilisez le sql manager du BO, cette requete fonctionne parfaitement et vous sort le csv correspondant.

Share this post


Link to post
Share on other sites

c'est bien dans le SQL MANAGER du Backoffice.

voici une capture ci-jointe

Seule la requête du haut fonctionne, les 2 autres n'ont aucune données

Il me semble que cela pourrait venir de la précision "rm-product p" du faite que je ne soit plus en préfxe "ps_" , c'est possible ?

Excusez mon faible niveau je n'opère que par déduction et observation.

Capture.JPG

Edited by wizwill (see edit history)

Share this post


Link to post
Share on other sites

Non, aucun rapport p est un alias

Que la requete n°3 ne vous donne rien, c'est normal, elle est incomplète et pl.name vient de la table product_lang que vous n'intégrez pas

 

Pouvez-vous me coller ici ma requete modifiée par vos soins svp ?

Share this post


Link to post
Share on other sites
SELECT 
	if(m.name != '', m.name, '-') as Fabricant, 
	pl.name as Produit, 
	p.reference as Reference, 
	if(sa.quantity is null, 0, sa.quantity) as `Quantité`, 
	'' as `Réel`,
	if(p.active = 0,'Non','Oui') as `Activé`, 
	round(ps.wholesale_price,2) as `Prix Achat`, 
	round(ps.price,2) as `Prix Vente`, 
	if(sa.quantity is null, 0, round(sa.quantity*ps.wholesale_price,2)) as `Total Achat`, 
	if(sa.quantity is null, 0, round(sa.quantity*ps.price,2)) as `Total Vente`
FROM rm_product p
INNER JOIN rm_product_shop ps ON (ps.id_product = p.id_product)
INNER JOIN rm_product_lang pl ON (pl.id_product = p.id_product)
LEFT JOIN  rm_stock_available sa ON (p.id_product = sa.id_product)
LEFT JOIN rm_manufacturer m ON (m.id_manufacturer = p.id_manufacturer)
WHERE pl.id_lang = 2
ORDER BY m.name ASC, pl.name ASC;

voici les modifications que j'ai apporté à votre requête.

Share this post


Link to post
Share on other sites

ok

La langue 2 existe sur votre shop ?

Il y a 2 heures, Eolia a dit :

Ajustez les préfixes et l'id_lang:

 

Share this post


Link to post
Share on other sites

Bonjour,

 

Je confirme que la requête de wizwill fonctionne bien, une fois le bon id_lang choisi.

 

Y a-t-il possibilité d'ajouter la déclinaison svp ?

Edited by P i l o u (see edit history)

Share this post


Link to post
Share on other sites

dans la page des langues activées vous avez l'id (1er chiffre de chaque ligne)

Donc si c'est 1, oui vous mettez 1

image.thumb.png.f07486280227c5d45a0df5071d90c71f.png

Share this post


Link to post
Share on other sites

génial Eolia,

merci beaucoup pour ton aide très précieuse. Cela fonctionne très bien. ;)

Share this post


Link to post
Share on other sites

Bonjour, désolé de ressortir ce topic mais ca m'inéresse, par contre je n'arrive pas à le faire fonctionner avec PS 1.7.5 j'ai une erreur CHecked form...

 

je suis un bille en SQL.... désolé.

Share this post


Link to post
Share on other sites

Idem... avec PS 1.7.5.1 et cette même requête pour l'inventaire annuel.

J'ai bien mis le prefixe des tables de ma BDD à moi. Mais j'ai aussi cette erreur : Erreur non définie "checkedForm"

Dommage, ça semblait bien simple, et j'ai pas trop envie d'acheter un module type https://www.prestatoolbox.fr/outils-administration/201-export-du-catalogue-au-format-csv.html ou https://addons.prestashop.com/fr/gestion-stocks-fournisseurs/29781-wk-gestion-inventaire.html?ab=1#seller qui me permettraient de faire l'inventaire, mais qui me serviraient plus ou moins qu'une fois par an, à moins de me créer de nouveaux besoins...

Si quelqu'un a la solution pour effectuer la requête ci-dessus sur une boutique PS 1.7.5.1, je suis preneur.

Antoine

Share this post


Link to post
Share on other sites

Hello,

En fouillant ce forum, et en adaptant la requête trouvée à ma propre BDD (je ne voulais que les produits actifs, et je n'utilise pas le préfixe pa défaut ps_ ), voici la requête SQL que j'ai utilisé sur mon PS 1.7.5.1 pour comptabiliser la valeur de mon inventaire.

Et ça fonctionne !!! Youpi ! 😎

J'ai par ailleurs utilisé le module gratuit Big Data qui permet de tester facilement ses requêtes SQL, et de faire des exports CSV tout aussi simplement : https://www.prestashop.com/forums/topic/504883-big-data-récupérer-des-données-sql-en-csv-facilement/

Cette requête SQL liste les produits actifs de mon stock, et en extrait certaines informations, toutes ne sont pas nécessaires, on peut ajouter ou supprimer facilement (pour ceux qui savent faire) les colonnes nécessaires ou non. Moi, ça me convient comme ça. Je précise que je n'ai pas de déclinaisons de produits, j'ai une seule boutique, un seul entrepôt.

Le module Big Data permet un export facile en CSV. Une fois dans Excel (ou équivalent), il ne reste qu'à remplacer les points par des virgules sur la colonne des prix fournisseurs (pour Excel FR en tout cas, il n'aime pas trop les points).

Ensuite, appliquez une formule dans une nouvelle colonne  type = "=H2*G2" où la cellule H2 est le prix fournisseur, et G2 la cellule quantité. On copie la formule sur toutes les lignes de son tableau, un fait le total, et on a la valeur totale de son inventaire🧚‍♀️

C'est simple et ne prend que quelques minutes! 

Bien sûr, on pourrait optimiser cette requête SQL, ou les manips à faire dans Excel, mais bon, je ne suis pas un spécialiste SQL, et au moins, je n'ai pas de module à acheter ! ;)

Voici la requête utilisée (à noter, remplacer le préfixe ps_ des tables par celui utilisée par votre boutique si ce n'est pas celui-ci).

Merci @Appolline pour la requête. Elle sera bien utile dans mon cas ! Je peux maintenant facilement faire mon inventaire comptable annuel.

 

SELECT 
	p.id_product, 
	p.active, 
	pl.name, 
	GROUP_CONCAT(DISTINCT(cl.name) SEPARATOR ",") as categories, 
	p.reference, 
	p.price, 
	p.wholesale_price, 
	p.reference,  
	man.name, 
	qp.quantity, 
	pl.name,  
	qp.quantity
	
	FROM ps_product p 
	
	LEFT JOIN ps_stock_available qp ON (p.id_product = qp.id_product) 
	LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product) 
	LEFT JOIN ps_category_product cp ON (p.id_product = cp.id_product) 
	LEFT JOIN ps_category_lang cl ON (cp.id_category = cl.id_category) 
	LEFT JOIN ps_category c ON (cp.id_category = c.id_category) 
	LEFT JOIN ps_product_tag pt ON (p.id_product = pt.id_product) 
	LEFT JOIN ps_manufacturer man ON (man.name = p.id_manufacturer) 
	
	WHERE pl.id_lang = 1 AND cl.id_lang = 1 AND p.id_shop_default = 1 AND c.id_shop_default = 1 AND p.active = 1
	
	GROUP BY p.reference

.Et comme le dit Appolline : "Voilà ! et de rien pour la requête c'est cadeau ! "

Antoine

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More