Requête SQL sur Editions Pilotées

Cette section est consacrée aux développements d'applications interfacées avec les logiciels Sage.

Modérateurs: Super-Apogea, Super Modérateur

Requête SQL sur Editions Pilotées

de GOLLIOT » Ven 2 Sep 2016 11:47

Bonjour,

J'ai besoin de faire une requête SQL dans les Editions Pilotées de Sage Gestion Commerciale qui me permettrait de rentrer dans 3 niveaux de Nomenclatures dans une base "Articles".

1er Niveau est mon article
2ème Niveau est la nomenclature de cet article
3ème Niveau est la sous-nomenclature de la nomenclature de cet article.

Je sais descendre au 2ème niveau mais pas au 3ème.

Quelqu'un a t'il la requête SQL qui va bien ?

Bien à vous !

Thierry
Sage 100 Gestion commerciale i7 Pack+ pour SQL Server - v8.12
Sage 100 Entreprise Edition Pilotée 5.1.9
Avatar de l’utilisateur
Contributeur
Contributeur
 
Messages: 67
Inscription: Mer 28 Jan 2009 15:45

Re: Requête SQL sur Editions Pilotées

de asr31 » Ven 2 Sep 2016 13:17

Bonjour,

Si tu peux montrer ce que tu attends comme résultat et indiquer la requête actuelle ...

Cordialement,
ASR31

En recherche de missions.
Avatar de l’utilisateur
Super Contributeur
Super Contributeur
 
Messages: 2975
Inscription: Mer 13 Fév 2008 15:31
Localisation: TOULOUSE

Re: Requête SQL sur Editions Pilotées

de GOLLIOT » Lun 5 Sep 2016 12:10

Voici la requête actuelle (liste des articles et leur nomenclature, avec réf commençant par 'D')

select ar.AR_REF, ar.AR_DESIGN, nm.NO_REFDET, art.AR_DESIGN, nm.NO_Qte
from F_ARTICLE ar
join F_NOMENCLAT nm on ar.AR_REF=nm.AR_REF
join F_ARTICLE art on nm.NO_REFDET=art.AR_REF
where ar.AR_REF LIKE 'D%'

Résultat :
AR.AR_REF | AR.AR_DESIGN | NM.NO_REFDET | ART.AR_DESIGN | NM.NO_QTE
| NM.NO_REFDET | ART.AR_DESIGN | NM.NO_QTE
| NM.NO_REFDET | ART.AR_DESIGN | NM.NO_QTE

J'aimerais avoir un 3ème niveau :
AR.AR_REF | AR.AR_DESIGN | NM.NO_REFDET | ART.AR_DESIGN | NM.NO_QTE | NOM.NO_REFDET | AT.AR_DESIGN
| NOM.NO_REFDET | AT.AR_DESIGN
| NOM.NO_REFDET | AT.AR_DESIGN
| NOM.NO_REFDET | AT.AR_DESIGN
| NM.NO_REFDET | ART.AR_DESIGN | NM.NO_QTE | NOM.NO_REFDET | AT.AR_DESIGN
| NOM.NO_REFDET | AT.AR_DESIGN
| NOM.NO_REFDET | AT.AR_DESIGN
Sage 100 Gestion commerciale i7 Pack+ pour SQL Server - v8.12
Sage 100 Entreprise Edition Pilotée 5.1.9
Avatar de l’utilisateur
Contributeur
Contributeur
 
Messages: 67
Inscription: Mer 28 Jan 2009 15:45

Re: Requête SQL sur Editions Pilotées

de asr31 » Jeu 29 Sep 2016 12:16

Bonjour,

Si tu veux des nomenclatures à 2 niveaux, il faut rajouter à nouveau F_Nomenclat et F_article et les lier.

Code: Tout sélectionner
SELECT  ar.AR_Ref AS [Produit Fini], ar.AR_Design AS [Designation PF],
 nm.NO_RefDet AS [Composant Niv1], art.AR_Design AS [Nom Composant Niv 1],
 nm.NO_Qte AS [Qte Niv1],nm.NO_Type AS [Type N1], nm.NO_Repartition AS [Repartition N1],
 NM2.NO_RefDet AS [Composant Niv2],Art2.AR_Design AS [Nom Composant Niv2],
 NM2.NO_Qte AS [Qte Niv2], NM2.NO_Type AS [Type N2], NM2.NO_Repartition AS [Repartition N2]
FROM F_ARTICLE AS Art2 INNER JOIN
   F_NOMENCLAT AS NM2 ON Art2.AR_Ref = NM2.NO_RefDet RIGHT OUTER JOIN
   F_ARTICLE AS ar INNER JOIN
   F_NOMENCLAT AS nm ON ar.AR_Ref = nm.AR_Ref INNER JOIN
   F_ARTICLE AS art ON nm.NO_RefDet = art.AR_Ref ON NM2.AR_Ref = art.AR_Ref
where ar.AR_REF LIKE 'D%'


Pour mieux voir les jointures, dans le SQL Management Studio, sélectionner le texte de la requête et dans le menu requête, demander Concevoir une requête dans l'éditeur ....

J'espère que c'est ce que tu cherchais à faire.

Cordialement,
ASR31

En recherche de missions.
Avatar de l’utilisateur
Super Contributeur
Super Contributeur
 
Messages: 2975
Inscription: Mer 13 Fév 2008 15:31
Localisation: TOULOUSE

Re: Requête SQL sur Editions Pilotées

de GOLLIOT » Mar 11 Oct 2016 16:21

Merci pour ton retour asr31, ça fonctionne bien.

Maintenant que le test fonction pour la base Articles, j'ai besoin de le faire pour les réf articles nomenclaturés commençant par "ZECOCONT", facturés depuis le 01/01/2016.

J'ai donc remplacé la base et les données "Articles" par la base et les données "Docligne" et mis un filtre sur mais je plante car la recherche est trop lourde...

Voici mon code :

Code: Tout sélectionner
SELECT
  dl.AR_Ref AS [Produit Fini],
  dl.DL_Design AS [Designation PF],

  nm1.NO_RefDet AS [Composant Niv1],
  dl1.DL_Design AS [Nom Composant Niv 1],
  nm1.NO_Qte AS [Qte Niv1],
  nm1.NO_Type AS [Type N1],
  nm1.NO_Repartition AS [Repartition N1],

  nm2.NO_RefDet AS [Composant Niv2],
  dl2.DL_Design AS [Nom Composant Niv2],
  nm2.NO_Qte AS [Qte Niv2],
  nm2.NO_Type AS [Type N2],
  nm2.NO_Repartition AS [Repartition N2]

FROM  F_DOCLIGNE AS dl2 INNER JOIN
  F_NOMENCLAT AS nm2 ON dl2.AR_Ref = nm2.NO_RefDet RIGHT OUTER JOIN
  F_DOCLIGNE AS dl INNER JOIN
  F_NOMENCLAT AS nm1 ON dl.AR_Ref = nm1.AR_Ref INNER JOIN
  F_DOCLIGNE AS dl1 ON nm1.NO_RefDet = dl1.AR_Ref ON nm2.AR_Ref = dl1.AR_Ref

WHERE (dl1.AR_Ref LIKE 'ZECOCONT%' OR dl2.AR_Ref LIKE 'ZECOCONT%')
  AND (dl.DO_Date>31/12/2016)
  AND (dl.DO_Domaine=0 AND dl.DO_Type=7)


Peux tu m'aider, stp ? :(
Sage 100 Gestion commerciale i7 Pack+ pour SQL Server - v8.12
Sage 100 Entreprise Edition Pilotée 5.1.9
Avatar de l’utilisateur
Contributeur
Contributeur
 
Messages: 67
Inscription: Mer 28 Jan 2009 15:45

Re: Requête SQL sur Editions Pilotées

de asr31 » Mer 12 Oct 2016 19:23

Bonjour,

Grosso modo,tu veux le même résultat que la première requête mais en limitant les 'produits' finis, ceux vendus, normalement, à ceux dont la référence commence par "ZECOCONT" et facturés sur 2016 ...
Dans ta requête, vu rapidement comme ça, je ne vois pas trop pourquoi il y aurait deux fois F_DOCLIGNE...

je ferais plutôt un truc du genre :
Code: Tout sélectionner
SELECT * FROM
    (<<<la première requête qui semble marcher en modifiant la clause where sur AR_Ref>>>)
WHERE [Produit_Fini] IN
 (SELECT DISTINCT AR_Ref FROM F_DOCLIGNE
 WHERE YEAR(DO_Date)=2016 AND DO_Type=7 AND AR_Ref LIKE 'ZECOCONT%')

(Attention, je n'ai pas vérifié la syntaxe)

DO_Type=7 pour les factures comptabilisées, de tête..., tu peux faire DO_Type IN (6,7) si nécessaire.

On filtre donc le résultat de la première vue avec tes nouvelles contraintes.

Attention, selon le volume de lignes de document, ça risque aussi d'être un peu long ...
Mais on doit pouvoir optimiser

Cordialement,
ASR31

En recherche de missions.
Avatar de l’utilisateur
Super Contributeur
Super Contributeur
 
Messages: 2975
Inscription: Mer 13 Fév 2008 15:31
Localisation: TOULOUSE

Re: Requête SQL sur Editions Pilotées

de GOLLIOT » Jeu 13 Oct 2016 13:10

Code: Tout sélectionner
SELECT
  ar.AR_Ref AS [Produit Fini],
  ar.AR_Design AS [Designation PF],

  nm1.NO_RefDet AS [Composant Niv1],
  ar1.AR_Design AS [Nom Composant Niv 1],
  nm1.NO_Qte AS [Qte Niv1],
  nm1.NO_Type AS [Type N1],
  nm1.NO_Repartition AS [Repartition N1],

  nm2.NO_RefDet AS [Composant Niv2],
  ar2.AR_Design AS [Nom Composant Niv2],
  nm2.NO_Qte AS [Qte Niv2],
  nm2.NO_Type AS [Type N2],
  nm2.NO_Repartition AS [Repartition N2]

FROM  F_ARTICLE AS ar2 INNER JOIN
  F_NOMENCLAT AS nm2 ON ar2.AR_Ref = nm2.NO_RefDet RIGHT OUTER JOIN
  F_ARTICLE AS ar INNER JOIN
  F_NOMENCLAT AS nm1 ON ar.AR_Ref = nm1.AR_Ref INNER JOIN
   F_ARTICLE AS ar1 ON nm1.NO_RefDet = ar1.AR_Ref ON nm2.AR_Ref = ar1.AR_Ref

WHERE [Produit Fini] IN
 (SELECT DISTINCT AR_Ref FROM F_DOCLIGNE
 WHERE YEAR(DO_Date)=2016 AND DO_Type IN (6,7) AND AR_Ref LIKE 'ZECOCONT%')


ça ne fonctionne pas :-( et me renvoie le message 'Erreur lors de l'execution du SQL: (DA0003) => [Microsoft][ODBC SQL Server Driver][SQL Server]Nom de colonne non valide : 'Produit Fini'.207"

Ce n'est pas dans les produits finis que je recherche les articles 'ZECOCONT%', mais bien dans leurs nomenclatures de 1er et 2ème niveaux !
Sage 100 Gestion commerciale i7 Pack+ pour SQL Server - v8.12
Sage 100 Entreprise Edition Pilotée 5.1.9
Avatar de l’utilisateur
Contributeur
Contributeur
 
Messages: 67
Inscription: Mer 28 Jan 2009 15:45

Re: Requête SQL sur Editions Pilotées

de asr31 » Jeu 13 Oct 2016 21:09

Bonjour,

Mauvais cahier des charges => mauvaise réponse.

SQL reste de la pure logique, si on connait la structure des données que l'on gère.

Je pense que le forum t'a ouvert pas mal de voies d'analyse et de compréhension déjà.

Analyse ce que tu veux faire, conceptualise et cherche sur les sites de Dev. SQL comment le réaliser.

Sinon, la société dans laquelle je travaille propose des développements sur cahier des charges ou même des formations SQL ...

Si tu veux du tout cuit, c'est plus cher, sinon, continue à bosser, comme chacun de nous.

Faut pas abuser non plus ...

tchao

P.S. Recherche où tu veux mettre dans ta clause Where.
ASR31

En recherche de missions.
Avatar de l’utilisateur
Super Contributeur
Super Contributeur
 
Messages: 2975
Inscription: Mer 13 Fév 2008 15:31
Localisation: TOULOUSE

Re: Requête SQL sur Editions Pilotées

de GOLLIOT » Ven 14 Oct 2016 09:23

Désolé de t'avoir importuné asr31, mais ce n'est pas mon métier et ma société n'investira jamais dans une formation SQL.

En cherchant toute la soirée, j'ai trouvé quelque chose :

Code: Tout sélectionner
SELECT
  dl.DO_Piece AS [N° Facture],
  dl.DO_Date AS [Date Facture],
  dl.AR_Ref AS [Réf Article Vendu],
  dl.DL_Design AS [Designation AV],
  dl.DL_Qte AS [Qté Vendue],

  nm1.NO_RefDet AS [Réf Nomenclat Niv 1],
  ar1.AR_Design AS [Désignation Nomenclat Niv 1],
  nm1.NO_Qte AS [Qte Nomenclat Niv 1],

  nm2.NO_RefDet AS [Réf Nomenclat Niv 2],
  ar2.AR_Design AS [Désignation Nomenclat Niv 2],
  nm2.NO_Qte AS [Qte Nomenclat Niv 2]

FROM  F_ARTICLE AS ar2 INNER JOIN
  F_NOMENCLAT AS nm2 ON ar2.AR_Ref = nm2.NO_RefDet RIGHT OUTER JOIN
  F_DOCLIGNE AS dl INNER JOIN
  F_NOMENCLAT AS nm1 ON dl.AR_Ref = nm1.AR_Ref INNER JOIN
  F_ARTICLE AS ar1 ON nm1.NO_RefDet = ar1.AR_Ref ON nm2.AR_Ref = ar1.AR_Ref

WHERE YEAR(dl.DO_Date)=2016 AND dl.DO_Type IN (6,7)
 AND (nm1.NO_RefDet LIKE 'ZECOCONT%' OR nm2.NO_RefDet LIKE 'ZECOCONT%')


Est-ce correct ?? Je l'espère...

Merci pour ton aide asr31
Sage 100 Gestion commerciale i7 Pack+ pour SQL Server - v8.12
Sage 100 Entreprise Edition Pilotée 5.1.9
Avatar de l’utilisateur
Contributeur
Contributeur
 
Messages: 67
Inscription: Mer 28 Jan 2009 15:45


Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité