MYLIST impossible de faire fonctionner ma requete

Bonjour à tous,

Je viens voir su quelqu’un à une idée.

J’ai une requete qui fonctionne sous Heidisql que je n’arrive pas à traduire dans le module Mylist.

Voici la requête :

SELECT
 mo.ref,
 p.label,
 mp.qty AS qty_Initiale,
 2 * mp.qty - SUM(mp.qty) AS qty_prep
FROM
 llx_mrp_production AS mp
 LEFT JOIN llx_product AS p ON mp.fk_product = p.rowid
 LEFT JOIN llx_mrp_mo AS mo ON mp.fk_mo = mo.rowid
WHERE
 mp.role = 'toconsume' OR mp.role = 'consumed'
GROUP BY
 mp.fk_mo,
 mp.fk_product
HAVING
 SUM(mp.qty) < 2 * mp.qty;

Cette requête est pour savoir ce qu’il reste comme produit à consommer dans nos différent OF en cours. ceci afin de faciliter la mise de coté des « matières premières ».

J’ai bien compris qu’il ne fallait pas mettre la partie SELECT qui est gérée par les champs de mylist. la ligne HAVING SUM(mp.qty) < 2 * mp.qty; fait planter la requête sous Mylist. Quand je l’enlève cela fonctionne mais j’ai besoin de ce Having qui permet de filtrer les OF dont toutes les matières premières sont déjà mis de coté.
Autre problème et je n’ai pas trouvé dans la documentation comment faire pour faire apparaitre ma colonne personnalisé 2 * mp.qty - SUM(mp.qty) AS qty_prep.

J’ai vu le Champs personnalisés par défaut mais la documentation ne m’as pas aider. J’avoue ne pas avoir compris l’objectif de ce champs de création.

Si quelqu’un a une idée merci beaucoup.

Bonjour
C’est un module externe !
Ok mais vous arrivez à quoi dans Mylist ?
Avez vous demandé à @defrance , elle devrait pouvoir vous aider :wink:
Au besoin :
https://wiki.patas-monkey.com/index.php?title=MyList
@+

Bonjour @PierreMG

J’ai demandé à l’IA de Perplexity s’il y a une erreur dans ta déclaration SQL, et il semble qu’il puisse y avoir un problème avec la clause HAVING. Je préfère te partager le lien pour que tu puisses le lire toi-même (tu peux aussi lui poser plus de questions là-bas :sunglasses:):

https://www.perplexity.ai/search/Y-atil-une…

Salutations !
Sergi

Bonsoir,

est ce que ça fonctionnerai pas mieux en changeant le nom des champs dans le having par les alias ?

SELECT
 mo.ref,
 p.label,
 mp.qty AS qty_Initiale,
 2 * mp.qty - SUM(mp.qty) AS qty_prep
FROM
 llx_mrp_production AS mp
 LEFT JOIN llx_product AS p ON mp.fk_product = p.rowid
 LEFT JOIN llx_mrp_mo AS mo ON mp.fk_mo = mo.rowid
WHERE
 mp.role = 'toconsume' OR mp.role = 'consumed'
GROUP BY
 mp.fk_mo,
 mp.fk_product
HAVING qty_prep > 0  ;

Bonne soirée

Tout d’abord merci pour vos réponses.

Alors la requête de @daraelmin et la mienne fonctionne parfaitement en SQL, heidi donne le résultat suivant qui est ce que nous recherchons

Voici le résultat en SQL pur.
image

Ensuite dans mylist on ne doit pas mettre les select car on les définies après avec la liste des champs ci dessous un exemple de mylist qui fonctionne pour la même idée mais avec les commande (logique de table sql bien différente). Cela enlève aussi toute les produits de commande déjà présent dans les expeditions.

J’ai pu mettre mon champs qty qui s’obtient avec la formule [cd.qty - COALESCE(SUM(ed2.qty), 0)].

Lorsque que j’essaie avec la requete pour le OM, déjà cela ne marche s’il j’ai ma condition HAVING voila le message d’erreur pour la requete que j’ai faite.
Requête dernier accès en base en erreur: SELECT DISTINCT mo.ref AS mo_ref, p.label AS p_label, mp.qty AS mp_qty FROM\r\n llx_mrp_production AS mp\r\n LEFT JOIN llx_product AS p ON mp.fk_product = p.rowid\r\n LEFT JOIN llx_mrp_mo AS mo ON mp.fk_mo = mo.rowid\r\nWHERE\r\n mp.role = ‹ toconsume › OR mp.role = ‹ consumed ›\r\nGROUP BY\r\n mp.fk_mo,\r\n mp.fk_product\r\nHAVING\r\n SUM(mp.qty) < 2 * mp.qty; ORDER BY 1 DESC LIMIT 26
Code retour dernier accès en base en erreur: DB_ERROR_SYNTAX
Information sur le dernier accès en base en erreur: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‹ ORDER BY 1 DESC LIMIT 26 › at line 11

Et je ne peux pas essayer avec celle de @daraelmin car comme on ne mets pas les selects, qty_prep n’est pas défini.

La j’avoue je sèche un peu. Si quelqu’un à l’habitude de Mylist je suis preneur.

De plus contrairement à l’exemple avec les commande client, je ne peux faire fonctionner le champs avec 2 * mp.qty - SUM(mp.qty).

Et si tu enleve l’alias sur mp.qty ?

SELECT
 mo.ref,
 p.label,
 mp.qty,
 2 * mp.qty - SUM(mp.qty) AS qty_prep
FROM
 llx_mrp_production AS mp
 LEFT JOIN llx_product AS p ON mp.fk_product = p.rowid
 LEFT JOIN llx_mrp_mo AS mo ON mp.fk_mo = mo.rowid
WHERE
 mp.role = 'toconsume' OR mp.role = 'consumed'
GROUP BY
 mp.fk_mo,
 mp.fk_product
HAVING
 SUM(mp.qty) < 2 * mp.qty;

Oui hélas même en utilisant HAVING
SUM(mp.qty) < 2 * mp.qty. Cela ne marche pas.

peut-etre juste enlever le ; qui annonce la fin de la requete or il y a le limit qui vient mettre le souc

Merci beaucoup @defrance c’était le ; !!

Pour le champs « calculé » il faut penser à mettre un alias sans espace !! si pas d’alais il reprends la formule et la requête plante.