Page 1 sur 2
[Base]Gestion de Fidélité
Publié : 27 févr. 2018 10:57
par Zicaflex
Bonjour à tous,
Voici quelques mois que je travail sur un projet de création d'une base de données pour la gestion de la fidélité sur une gamme de produit de mon entreprise.
OBJECTIF: Lorsque le client atteint les 10 paquets de protection achetés il en a 1 offert.
Mon fichier est déja bien avancé, seulement pour le finaliser, je souhaiterai insérer une boite de dialogue permettant d'avertir la personne en caisse lorsque le client dépasse la dizaine de paquets achetés. Ceci dans le but de ne pas oublier de donner le paquet offert.
Alors je me rapproche de vos compétences pour savoir comment je pourrais l'envisager s'il vous plait ?
Vous trouverez ma base de donnée en pièce jointe.
Merci par avance
Re: Gestion de Fidelite
Publié : 27 févr. 2018 10:58
par micmac
Bonjour et bienvenue sur le forum,
votre signature a écrit : Open Office 4.1.3 Mac OS Sierra 10.12.6
Votre signature indique une version de OpenOffice qui n'est plus maintenue.
Est-ce une une erreur, un oubli, un choix, une obligation ?
Dans ce dernier cas, mentionnez-le dans votre signature par "Obligation de version".
Pour connaître la version que vous possédez :
https://forum.openoffice.org/fr/forum/v ... 582#p11582
Il est fortement recommandé d'être à jour de la dernière version :
Soyez à jour de la dernière version
Dans votre signature il est nécessaire d'indiquer :
1-
La version exacte de AOO ou LibO (AOO 4.1.5, LibO 5.4.5 par exemple) ;
2-
La version exacte du système d'exploitation (Windows XP
SP3, Vista
SP2, Windows 7
SP1, Win 8.1, Win 10, Ubuntu 17.04, MacOS 10.13.3, par exemple).
Accès direct à votre signature pour la corriger.
Cordialement.
Re: [Base]Gestion de Fidelite
Publié : 27 févr. 2018 11:56
par Piaf
Bonjour
Un petit exemple
Code : Tout sélectionner
Sub Main(oEv as Object)
If oEv.Source.EffectiveValue > 10 Then
MsgBox("Il y a " & oEv.Source.EffectiveValue & " paquets pour le produit " & oEv.Source.Parent.getByName("NomProduit").CurrentValue,64,"Fidélité")
End If
End Sub
A+
Re: [Base]Gestion de Fidelite
Publié : 27 févr. 2018 12:37
par Zicaflex
Bonjour Piaf,
Pouvez vous me dire ou est ce que je dois coller ce script s’il vous plait ?
Merci
Re: [Base]Gestion de Fidelite
Publié : 27 févr. 2018 12:47
par Piaf
Re
Récupère la base jointe à mon message pour test.
A+
Re: [Base]Gestion de Fidelite
Publié : 27 févr. 2018 16:12
par Zicaflex
Je suis désolé, mais je ne parviens pas à voir à quel moment le message apparait.
Pouvez vous m'en dire plus ?
Merci
Re: [Base]Gestion de Fidelite
Publié : 27 févr. 2018 17:39
par Piaf
Re
La procédure est affectée à l'événement
Après l'actualisation de la colonne
Quantité du contrôle de table du sous-formulaire
ToutesLesLignes.
MsgBox.png
Elle est activée quand la quantité pour un produit est supérieure à 10 soit au changement d'enregistrement dans le contrôle de table, soit à l'appuie sur le bouton
Valider le produit et la quantité.
Il n'y a pas de macro sur le bouton, juste l'action
Enregistrer
A+
Re: [Base]Gestion de Fidelite
Publié : 28 févr. 2018 11:16
par Zicaflex
Bonjour Piaf,
J'ai du mal m'exprimer lorsqe j'ai énoncé l'objectif de mon projet.
Le message doit apparaitre lorsque la somme des pacquets acheté par le client dépasse chaque dizaine.
Soit à 10 paquets achetés -> 1 offert
Lorsque l'on arrive à 20 paquets achetés -> 1 offert
Lorsque l'on arrive à 30 paquets achetés -> 1 offert
...
En tout cas, merci pour votre réactivité et votre aide précieuse.
Re: [Base]Gestion de Fidelite
Publié : 28 févr. 2018 11:26
par Zicaflex
Pour info, la somme des paquets achetés apparait dans le contrôle de table du formulaire ''ConsltationParClient''.
La modération vous a écrit: Merci de ne pas poster plusieurs messages à la suite, si vous devez ajouter un complément d'information, le bouton "Editer" à la droite du message permet d'y remédier.
En attendant une prochaine réponse, vous pouvez participer également en répondant à d'autres questions sur notre forum.
Re: [Base]Gestion de Fidelite
Publié : 28 févr. 2018 13:38
par Piaf
Bonjour
Un peu plus difficile à mettre en œuvre
A tester
Code : Tout sélectionner
Option Explicit
Sub totalProduitClient(oEv as Object)
Dim maConnexion As Object, maRequete As Object, Resultat As Object
Dim IdProduit as Integer, IdClient as Integer, strSQL as String, nbrCadeaux as Integer, InstrSQL as String
Dim nbrTotal as Integer, nbEnCours as Integer, Reponse as Long
MajDonnees(oEv.Source.Parent.Parent)
maConnexion = oEv.Source.Parent.Parent.Parent.ActiveConnection
IdProduit = oEv.Source.Parent.getByName("NomProduit").valueItemList(oEv.Source.Parent.getByName("NomProduit").SelectedItems(0))
IdClient = oEv.Source.Parent.Parent.Parent.getByName("ListBox").valueItemList(oEv.Source.Parent.Parent.Parent.getByName("ListBox").SelectedItems(0))
strSQL = "SELECT ""Nbre paquet offert"" FROM ""Fidélité"" WHERE ""RefClient"" = " & IdClient & " AND ""RéfProduit"" = " & IdProduit
maRequete = maConnexion.createStatement()
Resultat = maRequete.executeQuery(strSQL)
If Resultat.Next Then
nbrCadeaux = Resultat.Columns(0).Int
Else
InstrSQL = "INSERT INTO ""Fidélité"" (""RéfProduit"", ""RefClient"", ""Nbre paquet offert"") VALUES (" & IdProduit & " , " & IdClient & " , 0)"
maRequete.executeUpdate(instrSQL)
nbrCadeaux = 0
End If
strSQL = "SELECT SUM( ""DétailsCommande"".""Quantité"" ) AS ""Qte"" FROM ""DétailsCommande"", ""Commandes"" WHERE ""DétailsCommande"".""RéfCommande"" = ""Commandes"".""RéfCommande"" GROUP BY ""DétailsCommande"".""RéfProduit"", ""Commandes"".""RéfClient"" HAVING ( ( ""DétailsCommande"".""RéfProduit"" = " & IdProduit & " AND ""Commandes"".""RéfClient"" = " & IdClient & " ) )"
Resultat = maRequete.executeQuery(strSQL)
Resultat.Next
nbrTotal = Resultat.Columns(0).Int
nbEnCours = nbrTotal - (nbrCadeaux * 10)
If nbEnCours >= 10 Then
Reponse = MsgBox("Il y a " & nbEnCours & " paquets pour le produit " & oEv.Source.Parent.getByName("NomProduit").CurrentValue & Chr(13) & "Voulez-vous ajouter le(s) paquet(s) cadeau",4+32,"Fidélité")
Select Case Reponse
Case 6
InstrSQL = "UPDATE ""Fidélité"" SET ""Nbre paquet offert"" = " & CInt(Left(nbEnCours,1)) & " WHERE ""RéfProduit"" = " & IdProduit & " AND ""RefClient"" = " & IdClient
maRequete.executeUpdate(instrSQL)
Case 7
Exit Sub
End Select
End If
End Sub
Sub MajDonnees(oForm as Object)
With oForm
If .isModified Then
If .IsNew Then
.insertRow
Else
.updateRow
End If
End If
End With
End Sub
A+
Re: [Base]Gestion de Fidelite
Publié : 28 févr. 2018 14:51
par Zicaflex
Re,
C'est plutot bien, on progresse ...
Seulement dans cette configuration nous avons le message à chaque incrémentation.
Est il possible d'avoir le message a chaque fois que l'on change de Dizaine ?
Par Exemple:
Le client a acheté 6 paquets le 12/01/2018, il reviens au magasin et il achete 6 paquets. Nous sommes donc passé de 6 paquets à 12 paquets. Alors je souhaiterai que le message ''Donner un paquet offert de '' Nom du produit'' à ''Nom et prénom du client''.
Le client revient le 03/03/2018 et achéte 4 paquets soit 16 paquets achetés depuis sa première venue. Alors, nous n'aurions pas de message.
Le client reviens le 04/04/2018 et achète 5 Paquets soit 21 paquets au total. Alors nous aurions l'affichage du message.
Merci
Re: [Base]Gestion de Fidelite
Publié : 28 févr. 2018 16:35
par Piaf
Re
Il y avait une erreur dans l'attribution des paquets cadeaux.
le code suivant devrait le faire.
Code : Tout sélectionner
InstrSQL = "UPDATE ""Fidélité"" SET ""Nbre paquet offert"" = " & nbrCadeaux + CInt(Left(nbEnCours,1)) & " WHERE ""RéfProduit"" = " & IdProduit & " AND ""RefClient"" = " & IdClient
Zicaflex a écrit :Seulement dans cette configuration nous avons le message à chaque incrémentation.
Je ne reproduis pas.
J'ai mis en œuvre ton exemple.
Création d'un client.
Création d'une nouvelle facture pour le 12/1/2018,de 6 paquets de FORM_EXTRA_COTTON_FEEL.
Pas de message.
Création d'une nouvelle facture pour le 12/1/2018 de 6 paquets de FORM_EXTRA_COTTON_FEEL.
Affichage du message, réponse Oui, la table Fidélité est bien mise à jour.
Création d'une nouvelle facture pour le 3/3/2018 de 4 paquets de FORM_EXTRA_COTTON_FEEL.
Pas de message.
Création d'une nouvelle facture pour le 4/4/2018 pour 5 paquets de FORM_EXTRA_COTTON_FEEL.
Affichage du message.
Msg.png
Réponse Oui, la table Fidélité est bien mise à jour.
A+
Re: [Base]Gestion de Fidélité
Publié : 08 mars 2018 11:32
par Zicaflex
Bonjour Piaf,
Je fais des test avec la base de données, mais j'ai un message d'erreur dû à une mauvaise syntaxe SQL. Pouvez vous me dire pourquoi SVP ?
Je joins la nouvelle base de donnée complété, ainsi qu'un Imprim Ecran du message.
Merci pour votre réponse.
Cordialement
Re: [Base]Gestion de Fidélité
Publié : 08 mars 2018 11:33
par Zicaflex
Voici les pièces jointes
Capture d’écran 2018-03-08 à 12.08.28.jpg
La modération vous a écrit: Merci de ne pas poster plusieurs messages à la suite, si vous devez ajouter un complément d'information, le bouton "Editer" à la droite du message permet d'y remédier.
En attendant une prochaine réponse, vous pouvez participer également en répondant à d'autres questions sur notre forum.
Re: [Base]Gestion de Fidélité
Publié : 08 mars 2018 14:13
par DLE
Bonjour,
Vous obtenez ce message parce que vous voulez insérer un "RéfProduit" déjà inscrit mais pour un autre client, une solution serait de mettre les champs "RéfProduit" et "RefClient" comme clé primaire.
A+
Re: [Base]Gestion de Fidélité
Publié : 08 mars 2018 15:52
par Zicaflex
Bonjour DLE,
Est il possible de mettre 2 clefs Primaire dans la même table ? Si oui, comment fait on ?
Merci
Re: [Base]Gestion de Fidélité
Publié : 08 mars 2018 16:00
par DLE
Re,
En mode modification sur la table, sélectionner les deux colonnes, clic droit et affecter "clé primaire".
A+
Re: [Base]Gestion de Fidélité
Publié : 08 mars 2018 16:03
par Zicaflex
Ok, cela fonctionne. Merci
D'autre part, je ne comprend pas pourquoi dans ma Requête ''RConsultation'' la somme des quantité par produit ne se fait pas correctement ?????
Pourriez vous m'éclairer s'il vous plait ?
Re: [Base]Gestion de Fidélité
Publié : 08 mars 2018 18:58
par Piaf
Bonjour
Tu dois refaire les liaisons avec la nouvelle clé primaire.
Pour ta requête, tu ne peux pas donner de fonction pour le nombre de paquets offerts.
Code : Tout sélectionner
SELECT "Produits"."NomProduit", "Clients"."Nom", "Clients"."Prénom", SUM( "DétailsCommande"."Quantité" ) AS "Total Produit", ( SELECT "Fidélité"."Nbre paquet offert" FROM "Fidélité" WHERE "Fidélité"."RéfProduit" = "Produits"."RéfProduit" AND "Fidélité"."RefClient" = "Clients"."RéfClient" ) AS "Paquet(s) offert(s)" FROM "Clients", "Commandes", "DétailsCommande", "Produits", "Fidélité" WHERE "Clients"."RéfClient" = "Commandes"."RéfClient" AND "DétailsCommande"."RéfCommande" = "Commandes"."RéfCommande" AND "DétailsCommande"."RéfProduit" = "Produits"."RéfProduit" AND "Fidélité"."RéfProduit" = "Produits"."RéfProduit" AND "Fidélité"."RefClient" = "Clients"."RéfClient" GROUP BY "Produits"."NomProduit", "Clients"."Nom", "Clients"."Prénom" HAVING ( ( "Clients"."Nom" LIKE :Nom ) )
Requete.png
A+
Re: [Base]Gestion de Fidélité
Publié : 23 mars 2018 14:15
par Zicaflex
Bonjour Messieurs,
Voila maintenant une semaine que je fais des tests avec ma base, et j'ai un message d'erreur qui apparait.
Pouvez vous m'en dire plus à ce sujet s'il vous plait ?
Meri par avance
Re: [Base]Gestion de Fidélité
Publié : 23 mars 2018 16:19
par Piaf
Bonjour
Tu devrais vérifier le nom des tes contrôles
NomCtrl.png
A+
Re: [Base]Gestion de Fidélité
Publié : 23 mars 2018 16:53
par Zicaflex
Bonjour Piaf,
Tout d'abord, merci pour ta réponse rapide.
Quel nom de contrôle je dois avoir pour que ça fonctionne ?
Merci
Re: [Base]Gestion de Fidélité
Publié : 23 mars 2018 17:13
par Piaf
re
Tu dois donner au contrôle le nom donné dans la procédure.
A+
Re: [Base]Gestion de Fidélité
Publié : 23 mars 2018 17:28
par Zicaflex
Excellent Piaf,
Tout fonctionne à merveille.
Continuer le développement de ma base, je souhaiterai que lorsque je consulte par client, j'ai une colonne dans la table du formulaire avec ''Nombre de paquet offert'' correspondant au total des paquets offerts par produits achetés.
Comment puis je procéder ?
Merci
Re: [Base]Gestion de Fidélité
Publié : 23 mars 2018 19:01
par Piaf
Re
Zicaflex a écrit :je souhaiterai que lorsque je consulte par client, j'ai une colonne dans la table du formulaire avec ''Nombre de paquet offert'' correspondant au total des paquets offerts par produits achetés.
Paquets.png
Voir
https://forum.openoffice.org/fr/forum/v ... 33#p309239
A+
Re: [Base]Gestion de Fidélité
Publié : 27 mars 2018 13:51
par Zicaflex
Bonjour Piaf,
Est ce que je dois insérer ce script à la requête Rconsultation ?
Merci
Re: [Base]Gestion de Fidélité
Publié : 27 mars 2018 17:01
par Piaf
Bonjour
Zicaflex a écrit :Est ce que je dois insérer ce script à la requête Rconsultation ?
C'est la requête rConsultation.
A+
Re: [Base]Gestion de Fidélité
Publié : 28 mars 2018 14:51
par Zicaflex
Bojour Piaf,
Lorsque j'essai d'enrgistrer la requete Rconsultation, il m'indiue un message d'erreur correspondant à un problème de syntaxe SQL.
Peux tu me dire où se situe cette erreur s'il te plait ?
Cordialement
Re: [Base]Gestion de Fidélité
Publié : 28 mars 2018 16:06
par Piaf
Bonjour
L'erreur vient du fait que tu veux modifier la requête en mode modification, tu ne peux la modifier qu'en l'éditant en mode SQL et comme elle est paramétrée, tu ne peux pas l'enregistrer en SQL direct.
A+
Re: [Base]Gestion de Fidélité
Publié : 29 mars 2018 08:15
par Zicaflex
Bonjour Piaf,
Désolé de te déranger encore ...
Lorsque j'intègre le script, et que je fait une Consultation par client, la quantité n'apparait plus dans la table. Et le nombre de paquet offert non plus.
Alors que lorsque j'execute la requête tout et OK.
??????
Merci par avance