Page 1 sur 2

[Base]Gestion de Fidélité

Publié : 27 févr. 2018 10:57
par Zicaflex

La modération vous a écrit: Suppression de l'icône Image
Les icônes mises à votre disposition ont une signification précise sur ce forum.
Veuillez consulter ce fil pour en savoir plus : https://forum.openoffice.org/fr/forum/ftopic3299.html

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.
Image
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 :lol:
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.
Image
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

Code : Tout sélectionner

oEv.Source.Parent.Parent.Parent.getByName("ListBox")
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