PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Bouton valider voit double
Bouton valider voit double
Débuté par priv!p1057yn6+nytr4vr+z1062ryyvr4Mtznvy+p1z, 04 déc. 2024 11:03 - 16 réponses
Membre enregistré
8 messages
Posté le 04 décembre 2024 - 11:03
Bonjour
Je débute avec Windev, Bonjour, je suis à 2 pas de finir un petit projet sous Windev (V 25), je créer un nouvel enregistrement, celui -ci apparait dans la table mais quand j'opère une modification le clic sur le bouton valider me créer un nouvel enregistrement en plus de celui qui à été modifié, Merci de me tendre la main
// DECLARER
sMonidperso est une chaîne = "CERTC" + AnnéeEnCours()+"-"
//SmONIDPERSO = CERTC2024-
nMafinId est un entier
sResult est une chaîne
nBCaractere est un entier
sResult = "0001"

SI SAI_IDperso <> "" ALORS
EcranVersFichier()
HModifie(celibat)

FIN


SI DateDuJour = PremierJourDeLAnnée(AnnéeEnCours()) ET HLitDernier(celibat,IDperso) =Vrai ALORS

SI Gauche(celibat.IDperso,10) = sMonidperso ALORS
nBCaractere = Taille(celibat.IDperso) -10
nMafinId = Droite(celibat.IDperso,nBCaractere)
nMafinId += 1
SI nMafinId < 10
sResult = "000" + NumériqueVersChaîne(nMafinId)
FIN
SI nMafinId >= 10 ET nMafinId < 100 ALORS
sResult = "00" + NumériqueVersChaîne(nMafinId)

FIN
SI nMafinId >= 100 ET nMafinId < 1000 ALORS
sResult = "0" + NumériqueVersChaîne(nMafinId)
FIN
SINON

sResult = "0001"
FIN

SINON

SI Gauche(celibat.IDperso,10) = sMonidperso ALORS
nBCaractere = Taille(celibat.IDperso) -10
nMafinId = Droite(celibat.IDperso,nBCaractere)
nMafinId += 1
SI nMafinId < 10
sResult = "000" + NumériqueVersChaîne(nMafinId)
FIN
SI nMafinId >= 10 ET nMafinId < 100 ALORS
sResult = "00" + NumériqueVersChaîne(nMafinId)

FIN
SI nMafinId >= 100 ET nMafinId < 1000 ALORS
sResult = "0" + NumériqueVersChaîne(nMafinId)
FIN

FIN

FIN

SAI_IDperso= sMonidperso + sResult

EcranVersFichier()
// Ajoute / Modifie l'enregistrement
HAjoute(celibat)
// Ferme la fenêtre
Ferme("",Vrai)
Membre enregistré
130 messages
Posté le 04 décembre 2024 - 11:10
bonjour , l'erreur est là
// Ajoute / Modifie l'enregistrement
HAjoute(celibat)


Vous ajouter un enregistrement à chaque fois que vous cliquer sur le bouton ,vous devriez plutot faire quelque chose de ce type
SI SAI_IDperso <> "" ALORS
EcranVersFichier()
HModifie(celibat)
SINON
...
EcranVersFichier()
HAjoute(celibat)
FIN
Membre enregistré
4 184 messages
Posté le 04 décembre 2024 - 11:22
Bonjour,
Cela n'a rien à voir avec ton problème, pour lequel Silvérin t'a donné la solution, mais, en lisant ton code, je vois 2 (4 en fait car elles apparaissent 2 fois) lignes qui vont poser problème.
nMafinId = Droite(celibat.IDperso,nBCaractere)
nMafinId += 1

Ce code équivaut à
nMafinId = 1

Droite renvoie une chaine, nMafinID est un entier donc avec cette affectation nMaFinID vaudra toujours 0
Pour obtenir un entier, il faut utiliser Val
nMafinId = Val(Droite(celibat.IDperso,nBCaractere))
nMafinId += 1


Par ailleurs, tu peux éventuellement remplacer tes code d'incrémentation par ChaineIncrémente (en remplaçant éventuellement les 0 de bourrage par un underscore)
--
Il y a peut être plus simple, mais, ça tourne
Quand tout a échoué, utilise l'option RTFM
Message modifié, 04 décembre 2024 - 11:31
Membre enregistré
8 messages
Posté le 04 décembre 2024 - 15:07
Merci Silverin pour ta réactivité seulement c'est toujours pas bon avec mon code j'ai ceci



avec le tien j'ai cela



je suis un peu perdu, c'est pas mon Idperso qui me joue des tours par hasard? je ne pense pas mais...
Merci également à Voroltinquo pour avoir ajouté une pierre à l'édifice, je complèterai par la suite
Salutations
Membre enregistré
164 messages
Posté le 04 décembre 2024 - 16:07
Bonjour

Je vois votre problème, vous voulez faire des enregistrements | des modifications en un seul bouton | un seul méthode | un seul procédure, ce n'est pas très pratique
J'ai une solution pour vous

1. Vous devrez différentier dans deux boutons les enregistrements | les modifications

Pour ce cas, lors des enregistrements, vous grisez le bouton de modification, ensuite lors des modifications, vous grisez le bouton des enregistrements
Attention il faudrait ajouter un champ identifiant de type numérique, dont vous récupérer lors des modifications

Je transfert un code et un photo dont vous pouvez utiliser

// EDD (12/24) : Evènement d'un procédure des enregistrements
IF Validation() = True THEN // EDD (12/24) : Validation des champs obligatoire | des dates validés
HRAZ(celibat)
celibat.Nom = SAI_Nom
celibat.Prénom = SAI_Prénom
celibat.Date_Naissance = SAI_Date_Naissance
IF HAjoute(celibat) = False THEN // EDD (12/24) : Enregistrement des informations
Info(ErreurInfo(errComplet))
FinProgramme()
END
Info("Enregistrement réussie.")
Ferme(MaFenêtre..Nom)
END

// EDD (12/24) : Evènement d'un procédure des modifications
IF Validation() = True THEN // EDD (12/24) : Validation des champs obligatoire | des dates validés
HLitRecherche(celibat, IDperso, SAI_IDperso)
IF HTrouve(celibat) = True THEN
celibat.Nom = SAI_Nom
celibat.Prénom = SAI_Prénom
celibat.Date_Naissance = SAI_Date_Naissance
IF HModifie(celibat) = False THEN // EDD (12/24) : Modifications des informations
Info(ErreurInfo(errComplet))
FinProgramme()
END
Info("Modification réussie.")
Ferme(MaFenêtre..Nom)
END
END

NB : Vous devrez utiliser un procédure | une méthode mais pas dans un bouton | ..., la raison est votre procédure | votre méthode sera indépendante et sera possible d'utiliser plusieurs fois dans des autres évènements

Cordialement
Mr.RATSIMANDRESY
Niry Aina Eddy
Membre enregistré
164 messages
Posté le 04 décembre 2024 - 16:11




: Bouton des enregistrements | des modifications





: Identifiant dans un champ de saisie de type numérique
Membre enregistré
8 messages
Posté le 04 décembre 2024 - 20:11
Merci RATSIMANDRESY, mais c'est trop compliqué pour moi qui débute avec cet outil et d'une manière générale avec la programmation, je n'ai pas de soucis avec un autre fichier de mon analyse ou tout fonctionne à merveille, je saisi, je valide la fenêtre avec la table s'affiche avec mes enregistrements, je clique sur le bouton "Modifier" je modifie je valide tout est ok, la seule différence entre ce fichier et celui qui pose problème c'est que ce dernier contient un IDperso de type texte d'où le code ci dessus.
Après modification le bouton "Valider" m'incrémente un nouvel enregistrement avec la modification opérée.
Merci pour votre concours.


Membre enregistré
4 184 messages
Posté le 05 décembre 2024 - 06:42
Bonjour, je ne vois pas de bouton valider.

--
Il y a peut être plus simple, mais, ça tourne
Quand tout a échoué, utilise l'option RTFM
Membre enregistré
8 messages
Posté le 05 décembre 2024 - 08:02
Bonjour Voroltinquo, le Bouton "Modifier" ouvre la fenêtre saisie sur laquelle se trouve le Bouton "Valider" donc je modifie et je valide.
Merci


Membre enregistré
4 184 messages
Posté le 05 décembre 2024 - 10:00
Pourquoi faire simple quand on peut faire compliqué. Ça pue le RAD à plein nez. As tu pensé à l'utilisateur qui doit modifier ne serait-ce qu'une dizaine de fiche ?
Ton champ table (en mode saisie 1() ) est il en "Saisie en cascade" et "Enregistrement en sortie de Ligne" (2)







.
En ce qui concerne l'incrémentation de ta chaine, tu peux ajouter un "Trigger avant" en ajout

--
Il y a peut être plus simple, mais, ça tourne
Quand tout a échoué, utilise l'option RTFM
Membre enregistré
8 messages
Posté le 05 décembre 2024 - 10:51
Ma table n'est pas en saisie et je ne cherche pas à faire compliqué, j'ai bien expliqué que je débute en programmation.
Merci
Membre enregistré
204 messages
Posté le 05 décembre 2024 - 11:35
Bonjour priv! etc..

Voroltinquo t'a donné la solution.
C'est très simple, tu as juste à remplacer le code que tu nous a donné au début par celui-ci :

// DECLARER
sMonidperso est une chaîne = "CERTC" + AnnéeEnCours()+"-"
//SmONIDPERSO = CERTC2024-
nMafinId est un entier
sResult est une chaîne
nBCaractere est un entier
sResult = "0001"

SI SAI_IDperso <> "" ALORS
EcranVersFichier()
HModifie(celibat)

FIN


SI DateDuJour = PremierJourDeLAnnée(AnnéeEnCours()) ET HLitDernier(celibat,IDperso) =Vrai ALORS

SI Gauche(celibat.IDperso,10) = sMonidperso ALORS
nBCaractere = Taille(celibat.IDperso) -10
nMafinId = Val(Droite(celibat.IDperso,nBCaractere))
nMafinId += 1
SI nMafinId < 10
sResult = "000" + NumériqueVersChaîne(nMafinId)
FIN
SI nMafinId >= 10 ET nMafinId < 100 ALORS
sResult = "00" + NumériqueVersChaîne(nMafinId)

FIN
SI nMafinId >= 100 ET nMafinId < 1000 ALORS
sResult = "0" + NumériqueVersChaîne(nMafinId)
FIN
SINON

sResult = "0001"
FIN

SINON

SI Gauche(celibat.IDperso,10) = sMonidperso ALORS
nBCaractere = Taille(celibat.IDperso) -10
nMafinId = Val(Droite(celibat.IDperso,nBCaractere))
nMafinId += 1
SI nMafinId < 10
sResult = "000" + NumériqueVersChaîne(nMafinId)
FIN
SI nMafinId >= 10 ET nMafinId < 100 ALORS
sResult = "00" + NumériqueVersChaîne(nMafinId)

FIN
SI nMafinId >= 100 ET nMafinId < 1000 ALORS
sResult = "0" + NumériqueVersChaîne(nMafinId)
FIN

FIN

FIN

SAI_IDperso= sMonidperso + sResult

EcranVersFichier()
// Ajoute / Modifie l'enregistrement
HAjoute(celibat)
// Ferme la fenêtre
Ferme("",Vrai)
Membre enregistré
8 messages
Posté le 06 décembre 2024 - 09:14
Bonjour STASZEWSKI
Désolé ce code c'est le mien c'est celui qui pose problème, la preuve en validant la modification ça donne ceci:




Merci
Membre enregistré
458 messages
Posté le 06 décembre 2024 - 09:31
Bonjour,

Il vous faut un RETOUR après le HModifie(), sans quoi le reste du code va toujours s'exécuter, y compris le HAjoute() à la fin.

// [...]
SI SAI_IDperso <> "" ALORS
EcranVersFichier()
HModifie(celibat)
RETOUR // <-----
FIN
// [...]
Membre enregistré
8 messages
Posté le 06 décembre 2024 - 22:18
Merci bchanudet
J'ai suivi ton conseil j'ai mis un "RETOUR" après le "HModifie" mais en validant la fiche (FN) de saisie ne se ferme pas, en la forçant je constate que la modification à été prise en compte dans ma Table, qu'ai-je oublié?
Salutations
// DECLARER
sMonidperso est une chaîne = "CERTC" + AnnéeEnCours()+"-"
//SmONIDPERSO = CERTV2024-
nMafinId est un entier
sResult est une chaîne
nBCaractere est un entier
sResult = "0001"

SI SAI_IDperso <> "" ALORS
EcranVersFichier()
HModifie(celibat)

RETOUR



FIN


SI DateDuJour = PremierJourDeLAnnée(AnnéeEnCours()) ET HLitDernier(celibat,IDperso) =Vrai ALORS

SI Gauche(celibat.IDperso,10) = sMonidperso ALORS
nBCaractere = Taille(celibat.IDperso) -10
nMafinId = Droite(celibat.IDperso,nBCaractere)
nMafinId += 1
SI nMafinId < 10
sResult = "000" + NumériqueVersChaîne(nMafinId)
FIN
SI nMafinId >= 10 ET nMafinId < 100 ALORS
sResult = "00" + NumériqueVersChaîne(nMafinId)

FIN
SI nMafinId >= 100 ET nMafinId < 1000 ALORS
sResult = "0" + NumériqueVersChaîne(nMafinId)
FIN
SINON

sResult = "0001"
FIN

SINON

SI Gauche(celibat.IDperso,10) = sMonidperso ALORS
nBCaractere = Taille(celibat.IDperso) -10
nMafinId = Droite(celibat.IDperso,nBCaractere)
nMafinId += 1
SI nMafinId < 10
sResult = "000" + NumériqueVersChaîne(nMafinId)
FIN
SI nMafinId >= 10 ET nMafinId < 100 ALORS
sResult = "00" + NumériqueVersChaîne(nMafinId)

FIN
SI nMafinId >= 100 ET nMafinId < 1000 ALORS
sResult = "0" + NumériqueVersChaîne(nMafinId)
FIN
FIN



FIN

SAI_IDperso= sMonidperso + sResult

EcranVersFichier()

// Ajoute / Modifie l'enregistrement
HAjoute(celibat)

ToastAffiche("Modification réussie",toastLong,cvBas,VertClair)


// Ferme la fenêtre
Ferme("",Vrai)
Membre enregistré
200 messages
Posté le 07 décembre 2024 - 07:18
Bonjour,

bchanudet avait raison sur le principe, il faut éviter que le reste du code s'exécute après le HModifie()

Remplace le RETOUR par un Ferme() et ça devrait le faire !

SI SAI_IDperso <> "" ALORS
EcranVersFichier()
HModifie(celibat)
ToastAffiche("Modification réussie",toastLong,cvBas,VertClair)
Ferme("",Vrai) // <-----
FIN
Message modifié, 07 décembre 2024 - 07:40
Membre enregistré
8 messages
Posté le 07 décembre 2024 - 08:16
Merci à vous tous, tout est au Top ça motive pour la suite.
Salutations.