Forum PgiBat

PgiBat, le logiciel compagnon de Batigest

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

#1 2013-07-19 11:39:56

Foued.C
Membre
Inscription : 2013-07-19
Messages : 1

Comment afficher la ville d'intervention dans la vue des contrat

Bonjour,

Je cherche à afficher la ville d’intervention dans la liste des contrats Multiservice Evolution.

Voici la requête :

SELECT Contrat.Code, Client.Nom, Contrat.Libelle, Contrat.CodeFam, Contrat.Etat, CadencierInt.DateInt, Contrat.DateSous, Contrat.DateFin, Contrat.FacCp, Contrat.FacVille, Contrat.FacTel, Contrat.CodeTVA, Contrat.MontantHT, Contrat.MontantTTC, Contrat.Note FROM [Contrat] left join [CadencierInt] on contrat.code=cadencierint.codecontrat ORDER BY CadencierInt.DateInt desc

Bien à vous

Hors ligne

#2 2013-07-20 02:34:30

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

Re : Comment afficher la ville d'intervention dans la vue des contrat

Bonjour !

Votre question est intéressante, et elle peut s'appliquer aussi bien à Multiservice qu'à Batigest, puisque ce dernier possède désormais également les fonctions de gestion de contrat, et que la structure générale des tables est quasiment la même.

Tout d'abord, la requête que vous indiquez ne peut pas fonctionner telle que vous l'avez rédigée, car vous avez placé Client.Nom dans la liste des champs sélectionnés, sans faire de jointure avec la table Client
Pour que ça marche, il faudrait donc ajouter cette jointure, ce qui donnerait la syntaxe ci-dessous pour Multiservice :

SELECT Contrat.Code, Client.Nom, Contrat.Libelle, Contrat.CodeFam, Contrat.Etat, CadencierInt.DateInt, Contrat.DateSous, Contrat.DateFin, Contrat.FacCp, Contrat.FacVille, Contrat.FacTel, Contrat.CodeTVA, Contrat.MontantHT, Contrat.MontantTTC, Contrat.Note
FROM (Contrat LEFT JOIN Client ON Contrat.CodeClient=Client.Code) LEFT JOIN CadencierInt ON Contrat.Code=CadencierInt.CodeContrat
ORDER BY CadencierInt.DateInt DESC

et cette syntaxe si elle doit être utilisée dans Batigest, seule la table Client change de nom et devient ClientDef :

SELECT Contrat.Code, ClientDef.Nom, Contrat.Libelle, Contrat.CodeFam, Contrat.Etat, CadencierInt.DateInt, Contrat.DateSous, Contrat.DateFin, Contrat.FacCp, Contrat.FacVille, Contrat.FacTel, Contrat.CodeTVA, Contrat.MontantHT, Contrat.MontantTTC, Contrat.Note
FROM (Contrat LEFT JOIN ClientDef ON Contrat.CodeClient=ClientDef.Code) LEFT JOIN CadencierInt ON Contrat.Code=CadencierInt.CodeContrat
ORDER BY CadencierInt.DateInt DESC

Néanmoins, je doute que le résultat puisse vous donner satisfaction, car en faisant la jointure entre Contrat et ContratInterv, vous allez obtenir, pour un seul contrat, autant d'enregistrements qu'il y a d'interventions dans la table ContraInterv, et cette requête ne permet toujours pas de faire de lien avec le site d'intervention...

Si votre attente est d'avoir la liste des sites, il serait plus logique d'aller chercher l'information en passant par la table ContratInterv et, avec celle-ci, de faire une jointure avec la table ClientSite. Comme nous souhaitons conserver la jointure avec la table Client, cela nous fait donc 4 tables dans notre requête !

La syntaxe serait donc celle-ci dans Multiservice :

SELECT Contrat.Code, Client.Nom, Contrat.Libelle, Contrat.CodeFam, Contrat.Etat, Contrat.DateSous, Contrat.DateFin, Contrat.FacCp, Contrat.FacVille, Contrat.FacTel, Contrat.CodeTVA, Contrat.MontantHT, Contrat.MontantTTC, Contrat.Note, ClientSite.Nom, ClientSite.Ville
FROM Client INNER JOIN ((Contrat INNER JOIN ContratInterv ON Contrat.Code = ContratInterv.CodeContrat)
INNER JOIN ClientSite ON (Contrat.CodeClient = ClientSite.CodeClient) AND (ContratInterv.NomSite = ClientSite.Nom)) ON Client.Code = Contrat.CodeClient
GROUP BY Contrat.Code, Client.Nom, Contrat.Libelle, Contrat.CodeFam, Contrat.Etat, Contrat.DateSous, Contrat.DateFin, Contrat.FacCp, Contrat.FacVille, Contrat.FacTel, Contrat.CodeTVA, Contrat.MontantHT, Contrat.MontantTTC, Contrat.Note, ClientSite.Nom, ClientSite.Ville

L'insertion de GROUP BY permet de ne pas avoir de doublons dans la liste obtenue.

Dans Batigest, la syntaxe sera différente car si la table Client est à peut près identique à la table ClientDef, il n'en est pas de même pour les Sites : c'est la table ClientAdr qui est mise à contribution. Cette table existe depuis l'origine de Batigest, mais elle avait été un peu oubliée, car la table Multidonnées était supposée la remplacer, la voici remise au premier plan, et c'est une bonne chose !

SELECT Contrat.Code, ClientDef.Nom, Contrat.Libelle, Contrat.CodeFam, Contrat.Etat, Contrat.DateSous, Contrat.DateFin, Contrat.FacCp, Contrat.FacVille, Contrat.FacTel, Contrat.CodeTVA, Contrat.MontantHT, Contrat.MontantTTC, Contrat.Note, ClientAdr.Libelle, ClientAdr.Ville
FROM (ClientDef INNER JOIN (Contrat
INNER JOIN ContratInterv ON Contrat.Code = ContratInterv.CodeContrat) ON ClientDef.Code = Contrat.CodeClient)
INNER JOIN ClientAdr ON (ContratInterv.NomSite = ClientAdr.Libelle) AND (Contrat.CodeClient = ClientAdr.Code)
GROUP BY Contrat.Code, ClientDef.Nom, Contrat.Libelle, Contrat.CodeFam, Contrat.Etat, Contrat.DateSous, Contrat.DateFin, Contrat.FacCp, Contrat.FacVille, Contrat.FacTel, Contrat.CodeTVA, Contrat.MontantHT, Contrat.MontantTTC, Contrat.Note, ClientAdr.Libelle, ClientAdr.Ville

Comme pour la requête de Multiservice, l'insertion de GROUP BY permet de ne pas avoir de doublons dans la liste obtenue, il restera néanmoins autant de lignes pour un contrat qu'il y a de sites associés à ce contrat.

Voilà, à vos claviers pour tester ces requêtes !

N'oubliez pas que OpenSea est à votre service pour rédiger des requêtes selon vos attentes et créer les paramétrages sur mesure selon vos cahiers des charges !
La liste des prestations proposées par OpenSea est sur cette page : http://www.opensea.fr/prestation.html

Hors ligne

Pied de page des forums

Propulsé par FluxBB 1.5.3