Forum PgiBat

PgiBat, le logiciel compagnon de Batigest

Vous n'êtes pas identifié(e).

#1 2013-03-15 05:21:51

Jean-Pierre Leon
Administrateur
Inscription : 2013-03-12
Messages : 54

Faire une recherche dans les commandes fournisseurs selon leur contenu

Faire des recherches dans une vue n'est pas compliqué, les outils proposés par Batigest ne manquent pas.

Mais comment peut-on s'y prendre si, par exemple, on veut retrouver une commande fournisseur en fonction des informations saisies dans les lignes de la commande, et non dans l'entête, comme on le fait habituellement ?

Dans ce cas, il nous faut une requête Sql qui va faire une jointure entre la table des commandes et la table des lignes, et une boite de dialogue qui va nous permettre d'envoyer des valeur à cette requête.

Nous allons paramétrer notre boite de dialogue avec 5 variables :

  • le texte que l'on recherche dans le libellé des lignes

  • le code du chantier (même dans le cas de commande multi-chantier)

  • le nom du fournisseur (et non son code)

  • la date de début de période de recherche

  • la date de fin de période de recherche

Voici la syntaxe de cette boite de dialogue :
PARAMETERS Lib Text, Chantier Text, Fournis Text, DateDeb DateTime, DateFin DateTime;

Et maintenant la syntaxe de la requête, qui va utiliser les variables définies ci-dessus, notez qu'il faut faire une jointure sur 4 tables

  • Fournisseur pour avoir le nom du fournisseur,

  • CmdFouLigne pour avoir le libellé,

  • CmdFouChant pour avoir le code chantier,

  • CmdFou pour les dates et que ça marche

SELECT CmdFou.Code AS [Code Cde], CmdFou.DateCmd AS [Date Cde], Fournisseur.Nom AS [Nom Four], CmdFouChant.CodeChantier AS [Code Chant], CmdFouLigne.Libelle AS [Libellé], CmdFouChant.Qte AS [Quantité], CmdFouLigne.PA AS PU
FROM ((Fournisseur
INNER JOIN CmdFou ON Fournisseur.Code = CmdFou.CodeFou)
INNER JOIN CmdFouLigne ON CmdFou.Code = CmdFouLigne.Code)
INNER JOIN CmdFouChant ON (CmdFouLigne.Id = CmdFouChant.Id) AND (CmdFouLigne.Code = CmdFouChant.Code)
WHERE CmdFou.DateCmd >= [DateDeb]
AND CmdFou.DateCmd < [DateFin]
AND CmdFouLigne.Libelle LIKE '*' & [Lib] & '*'
AND CmdFouChant.CodeChantier LIKE '*' & [Chantier] & '*'
AND Fournisseur.Nom LIKE '*' & [Fournis] & '*'
GROUP BY CmdFouLigne.Libelle, CmdFouChant.Qte, CmdFouLigne.PA, CmdFou.DateCmd, CmdFou.Code, Fournisseur.Nom, CmdFouChant.CodeChantier ORDER BY CmdFou.Code

Notez que chaque variable de type Texte est précédée et suivie par le joker *. Cela signifie que la recherche va se faire de la manière la plus large. Par exemple, vous avez indiqué ABC pour le code chantier : les chantiers ABC000, 00ABC00, ou 000ABC seront sélectionnés. On aurait aussi pu gérer les dates avec l'instruction BETWEEN, la différence ici c'est que la date de fin est exclue de la sélection, donc pour sélectionner le mois de janvier en entier, les dates seront 01/01/2013 et 01/02/2013, donc inutile de se demander si la fin du mois est le 28, le 29, le 30 ou le 31.

N'oubliez pas que les 2 parties de la syntaxe sont à placer l'une à la suite de l'autre, ce qui nous donne l'ensemble ci-dessous :

PARAMETERS Lib Text, Chantier Text, Fournis Text, DateDeb DateTime, DateFin DateTime;
SELECT CmdFou.Code AS [Code Cde], CmdFou.DateCmd AS [Date Cde], Fournisseur.Nom AS [Nom Four], CmdFouChant.CodeChantier AS [Code Chant], CmdFouLigne.Libelle AS [Libellé], CmdFouChant.Qte AS [Quantité], CmdFouLigne.PA AS PU
FROM ((Fournisseur
INNER JOIN CmdFou ON Fournisseur.Code = CmdFou.CodeFou)
INNER JOIN CmdFouLigne ON CmdFou.Code = CmdFouLigne.Code)
INNER JOIN CmdFouChant ON (CmdFouLigne.Id = CmdFouChant.Id) AND (CmdFouLigne.Code = CmdFouChant.Code)
WHERE CmdFou.DateCmd >= [DateDeb]
AND CmdFou.DateCmd < [DateFin]
AND CmdFouLigne.Libelle LIKE '*' & [Lib] & '*'
AND CmdFouChant.CodeChantier LIKE '*' & [Chantier] & '*'
AND Fournisseur.Nom LIKE '*' & [Fournis] & '*'
GROUP BY CmdFouLigne.Libelle, CmdFouChant.Qte, CmdFouLigne.PA, CmdFou.DateCmd, CmdFou.Code, Fournisseur.Nom, CmdFouChant.CodeChantier ORDER BY CmdFou.Code

Il suffira de créer une nouvelle vue, normalement dans la liste des commandes, et de coller l'intégralité du texte ci-dessus dans la zone Sql, et de valider.

Hors ligne

#2 2013-05-30 12:56:05

levasseur
Membre
Inscription : 2013-04-03
Messages : 5

Re : Faire une recherche dans les commandes fournisseurs selon leur contenu

Bien vu . Merci Jean-Pierre super pratique je vais le proposer aux clients

Hors ligne

Pied de page des forums

Propulsé par FluxBB 1.5.3