Re,
Un truc vite fait du style
[windev]
nValeurNumerique est un entier
sChaineFinale est une chaîne
nValeurMaxVantChangementLettre est un entier = 999
sChaineDepart est une chaîne = "18A999"
sAnnee est une chaîne = sChaineDepart[[1 À 2]]
sLettre est une chaîne = sChaineDepart[[3 À 3]]
sValeurNumerique est une chaîne = sChaineDepart[[4 À 6]]
nValeurNumerique = ChaîneIncrémente(sValeurNumerique)
SI nValeurNumerique > nValeurMaxVantChangementLettre ALORS
sValeurNumerique = "001"
sLettre = Caract(Asc(Majuscule(sLettre))+1)
SINON
sValeurNumerique = ChaîneIncrémente(sValeurNumerique)
FIN
sChaineFinale = sAnnee + sLettre + sValeurNumerique
Trace(sChaineFinale)
[/windev]
-
Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !Rejeter la notice
AIDE Générer le matricule
Discussion dans 'Résolution problème & conseils' créé par Man, Mar 2, 2019.
Re,
Un truc vite fait du style
[windev]
nValeurNumerique est un entier
sChaineFinale est une chaîne
nValeurMaxVantChangementLettre est un entier = 999
sChaineDepart est une chaîne = "18A999"
sAnnee est une chaîne = sChaineDepart[[1 À 2]]
sLettre est une chaîne = sChaineDepart[[3 À 3]]
sValeurNumerique est une chaîne = sChaineDepart[[4 À 6]]
nValeurNumerique = ChaîneIncrémente(sValeurNumerique)
SI nValeurNumerique > nValeurMaxVantChangementLettre ALORS
sValeurNumerique = "001"
sLettre = Caract(Asc(Majuscule(sLettre))+1)
SINON
sValeurNumerique = ChaîneIncrémente(sValeurNumerique)
FIN
sChaineFinale = sAnnee + sLettre + sValeurNumerique
Trace(sChaineFinale)
[/windev]Cliquez pour agrandir...
Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
bonjour je viens vers vous présenter ceci[windev]
Code (Text):
PROCEDURE Gen_Matricule()
sNumEnreg est une chaîne
ChaineAlphabet est une chaîne="A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"
nIndice est un entier = 1
TANTQUE HLitRecherchePremier(Avoir_Matricule,Date_Avoir,Date_Serveur(),hBlocageEcriture)=Faux
// Si on n'a pas trouvé d'enreg, on l'ajoute
SI HTrouve()=Faux ALORS
Avoir_Matricule.Date_Avoir = Date_Serveur()
Avoir_Matricule.NumAvoir = 0
Avoir_Matricule.Lettre = ExtraitChaîne(ChaineAlphabet, nIndice, ",")
SI PAS HAjoute(Avoir_Matricule) ALORS
Erreur_trouvée("Erreur d'ajout des infos de code")
FIN
SINON
// Enregistrement trouvé mais le blocage n'est pas possible
SI HErreurBlocage() ALORS
CONTINUER
SINON
// Autre erreur
RENVOYER ""
FIN
FIN
FIN
// Lit le numéro de séquence, l'incrémente et met à jour le fichier
nNum est un entier = Avoir_Matricule.NumAvoir +1
SI nNum <= 999 ALORS
Avoir_Matricule.NumAvoir++
SINON SI nNum > 999
Car est une chaîne = Caract(Asc(Majuscule(Avoir_Matricule.Lettre))+1)
Avoir_Matricule.Lettre = Car
Avoir_Matricule.NumAvoir = " "
FIN
SI HModifie(Avoir_Matricule)=Faux ALORS
Erreur("Erreur de génération")
RENVOYER 0
FIN
// Génère le numéro : Ex : 18A001
sNumEnreg= DateVersChaîne(Date_Serveur(),"AA")+Avoir_Matricule.Lettre+NumériqueVersChaîne(nNum,"03d")
RENVOYER sNumEnreg
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
J'ai un problème dès que le matricule atteint Année+Lettre+999
Exple : 19A999 le prochain matricule est 19B1000 puis le second devient 19B001
pourtant je veux que dès que le matricule est : 19A999, le prochain devrait être 19B001.
je vous ai envoyé le code de sources et je joins à ça les captures d'écran.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
Merci d'avance
Fichiers attachés:
Re
il faut modifier
SI nNum <= 999 ALORS
Avoir_Matricule.NumAvoir++
SINON SI nNum > 999
Car est une chaîne = Caract(Asc(Majuscule(Avoir_Matricule.Lettre))+1)
Avoir_Matricule.Lettre = Car
Avoir_Matricule.NumAvoir = " "
FIN
par
SI nNum < 999 ALORS
Avoir_Matricule.NumAvoir++
SINON SI nNum >= 999
Car est une chaîne = Caract(Asc(Majuscule(Avoir_Matricule.Lettre))+1)
Avoir_Matricule.Lettre = Car
Avoir_Matricule.NumAvoir = " "
FIN
Re
il faut modifier
SI nNum <= 999 ALORS
Avoir_Matricule.NumAvoir++
SINON SI nNum > 999
Car est une chaîne = Caract(Asc(Majuscule(Avoir_Matricule.Lettre))+1)
Avoir_Matricule.Lettre = Car
Avoir_Matricule.NumAvoir = " "
FIN
par
SI nNum < 999 ALORS
Avoir_Matricule.NumAvoir++
SINON SI nNum >= 999
Car est une chaîne = Caract(Asc(Majuscule(Avoir_Matricule.Lettre))+1)
Avoir_Matricule.Lettre = Car
Avoir_Matricule.NumAvoir = " "
FINCliquez pour agrandir...
Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
Bonsoir je reviens vers toi rien n'a changé toujours les mêmes résultats je suis sûr ma boucle est mal appliquée.mais merci pour cette correction
je suis toujours en attente d'aide je parie que mon code a besoin d'une retouche
Votre problème est dans cette instruction
sNumEnreg= DateVersChaîne(Date_Serveur(),"AA")+Avoir_Matricule.Lettre+NumériqueVersChaîne(nNum,"03d")
il faut utiliser Avoir_Matricule.numavoir au lieu de nNum
suenodesign apprécie ceci.
Salut,
Bien vu j’étais pas descendu en bas de la procedure
le code devrait ressembler à ceci
Code (Text):
// Lit le numéro de séquence, l'incrémente et met à jour le fichier
nNum est un entier = Avoir_Matricule.NumAvoir +1
SI nNum < 999 ALORS
Avoir_Matricule.NumAvoir++
SINON SI nNum >= 999
Car est une chaîne = Caract(Asc(Majuscule(Avoir_Matricule.Lettre))+1)
Avoir_Matricule.Lettre = Car
Avoir_Matricule.NumAvoir = "001"
FIN
SI HModifie(Avoir_Matricule)=Faux ALORS
Erreur("Erreur de génération")
RENVOYER 0
FIN
// Génère le numéro : Ex : 18A001
sNumEnreg= DateVersChaîne(Date_Serveur(),"AA")+Avoir_Matricule.Lettre+NumériqueVersChaîne( Avoir_Matricule.NumAvoir,"03d")
RENVOYER sNumEnreg
Salut,
Bien vu j’étais pas descendu en bas de la procedure
le code devrait ressembler à ceci
Code (Text):
// Lit le numéro de séquence, l'incrémente et met à jour le fichier
nNum est un entier = Avoir_Matricule.NumAvoir +1
SI nNum < 999 ALORS
Avoir_Matricule.NumAvoir++
SINON SI nNum >= 999
Car est une chaîne = Caract(Asc(Majuscule(Avoir_Matricule.Lettre))+1)
Avoir_Matricule.Lettre = Car
Avoir_Matricule.NumAvoir = "001"
FIN
SI HModifie(Avoir_Matricule)=Faux ALORS
Erreur("Erreur de génération")
RENVOYER 0
FIN
// Génère le numéro : Ex : 18A001
sNumEnreg= DateVersChaîne(Date_Serveur(),"AA")+Avoir_Matricule.Lettre+NumériqueVersChaîne( Avoir_Matricule.NumAvoir,"03d")
RENVOYER sNumEnreg
Cliquez pour agrandir...
Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
Bonjour quand j'utilise cette fragment de fonction/ procédure que tu as proposée alors tout est gâtéMerci d'avance