[Résolu] NUMERO AUTO
Stagiaire WDF
Inscrit:
03/01/2005 15:40
Post(s): 34
Bonjour

Encore moi
Comment faire un numero auto qui reprenne l'enregistrement d'avant +1

Ex: Champ contenant B36001

Nouvel enregistrement -----> Nouvelle valeur B36002

Merci

Contribution le : 04/01/2005 14:25
Créer un fichier PDF de la contribution Imprimer


Re: NUMERO AUTO
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
Note opérationnelle
Ce type de numérotation fait partie des paramètres de projet dynamiques (par oposition au statiques qui sont dans un .ini ou la Base de registre).

Pour gérer cela, nous avons mis en place un fichier HyperFile PARAM.FIC(#IDPARAM,#PA_LIBELLE,PA_VALEUR)

Ainsi pour un paramètre dont on connais le nom (CODEBA par exemple) on va aller bloquer l'enregistrement, l'incrémenter et écrire dans PARAM.FIC, en pensant à récupérer la nouvelle valeur. Ainsi si tout s'est bien passé, vous disposez de votre nouveau numéro unique (réseau).

ps : l'avantage de cette structure est que le nombre de paramètre peut être 'infinis' dans vos projets

Calcul de la clé
Pour faire B36001->B36002 on va prendre la chaine en partant du second paramètre, le transposer en numérique et lui ajouter un pou reconsituer la clé.
cCode est une chaine = "B36001"
cNouveau est une chaine = AddOne(ccode)
info(cNouveau) // => "B36002"

PROCEDURE ADDONE(pcCode)
SI Taille(pcCode)=1 ALORS RENVOYER pccode+"00001"
nVal est un entier = val(pcCode[[2 A]])
RENVOYER pccode+NumériqueVersChaine(nval+1,"05d")


Contribution le : 04/01/2005 14:39
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: NUMERO AUTO
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Bonjour,

Ceci n'est pas automatique en WinDev avec un format de donnée AlphaNumerique.

Manuellement cela est tout a fait faisable.

On utilise un fichier qui va stocker cette valeur dans une rubrique

Exemple :
Fichier : Config
[Rubriques]
Variable, type chaine, longueur 15, indexé unique
Valeur, Type Chaine, longueur a déterminer selon besoin, non indexé

Dans mon fichier Config je créer un enregistrement:
Variable = NumeroAuto
Valeur = B36001

Dans mon programme a chaque fois que j'ai besoin d'avoir un nouveau Numero Auto
sNumero est un entier
HLitRecherche(Config,Variable,"NumeroAuto")
sNumero = Config.Valeur
//Ici on créer une procédure qui va incrémenter le numéro
//ex :sNumero = "B" + (Val(sNumero[[ 2 A ]])+1)
Config.Valeur = sNumero
HModifie(Config)

sNumero contient le numéro incrementé.

Ceci est un code sommaire, il est nécessaire de prévoir un blocage entre le moment ou on lit le numéro et celui ou on enregistre le nouveau NumeroAuto.

Il peut être aussi nécessaire de prévoir une transaction pour que le numéro ne s'incrémente innutilement si l'enregistrement voulu ne s'est pas effectué correctement.

Plus simplement on peut aussi conserver un numéro ato classique dans le fichier puis créer un NumeroAuto personnalisé.

Une simple recherche de type HLitDernier(,) permet de récuperer le plus grand numéro auto personnalisé puis de recalculer le nouveau numéro et d'effectuer l'enregistrement des données.

Penser toujour à effectuer un blocage du fichier afin d'éviter que deux poste fasse la même demande et enregistre deux enregistrements avec le même NumeroAuto personnalisé.

Contribution le : 04/01/2005 15:03
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: NUMERO AUTO
Stagiaire WDF
Inscrit:
03/01/2005 15:40
Post(s): 34
Pas ce que j'attendais.
Si la valeur est initialemnt B36001 elle doit passer a B36002 puis a B36003.....B36999 etc.

Voici la formule utilisée en Access :

VraiFaux(Choisir(Format(Date();"aaaa")-2003;"A";"B";"C";"D") Comme (Gauche(MaxDom("[N° COMMANDE]";"COMMANDES FOURNISSEURS");1));Choisir(Format(Date();"aaaa")-2003;"A";"B";"C";"D") & "36" & VraiFaux((Droite(MaxDom("[N° COMMANDE]";"COMMANDES FOURNISSEURS");3)+1)<10;"00" & Droite(MaxDom("[N° COMMANDE]";"COMMANDES FOURNISSEURS");3)+1;VraiFaux((Droite(MaxDom("[N° COMMANDE]";"COMMANDES FOURNISSEURS");3)+1)<100;"0" & Droite(MaxDom("[N° COMMANDE]";"COMMANDES FOURNISSEURS");3)+1;(Droite(MaxDom("[N° COMMANDE]";"COMMANDES FOURNISSEURS");3)+1)));Choisir(Format(Date();"aaaa")-2003;"A";"B";"C";"D") & "36001")

Cela permet d'incrementer chaque nouvelle fiche et lors du changement d'année de repartir à 0.

EX : année 2004 A36001 à A36XXX
année 2005 B36001 à B36XXX
année 2006 C36001 à C36XXX



Contribution le : 04/01/2005 15:07
Créer un fichier PDF de la contribution Imprimer


Re: NUMERO AUTO
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Bonjour,

Je rappelles que le code acces n'est valide que jusqu'en 2007
Celui proposé est valide pour 26 annuitée.

PROCEDURE GetNumCommande(pNumero, pNumEnr)
sNumero est une chaine
sLettre est une chaine

//On lit le dernier enregistrement du fichier
HLitDernier(COMMANDES_FOURNISSEURS,NUMCOMMANDE)
//On bloque le dernier enregistrement
SI 
//On Bloque l'enregistrement pour etre le seul a avoir ce numero 
HBloqueNumEnr(COMMANDES_FOURNISSEURS,hNumEnrEnCours,hBlocageLectureEcriture) ALORS
 //On récupère le dernier N° de commande enregistré
 sNumero = COMMANDES_FOURNISSEURS.NUMCOMMANDE
 //On récupère l'année en cours moins 2003
 sLettre = (val(DateSys()[[ à 4]]) - 2003)
 //On repart a 0 si on change de lettre
 Si sLettre <> sNumero[[1]] Alors sNumero = 0
 //On récupère la lettre en commencant avec un A pour 2003, B pour 2004 etc... jusqu'a Z (26 ans)
 sLettre = Caract(val(sLettre)+65)
 //On ajoute lettre et 36
 sNumero =  sLettre + "36" +
 // on ajoute +1 au dernier numéro de commande
 NumeriqueVersChaine(Val(sNumero[[4 A ]])+1,"03d")
FIN

//On met les variable a jours
pNumero = sNumero
pNumEnr = hNumEnrEnCours

methode:
La commande à été saisie et l'enregistrement à été demandé
Dans le code du bouton Valider
sNumCDE est une chaine
nNumEnr est un entier sur 8 octets

GetNumCommande(sNumCDE,nNumEnr)
COMMANDES_FOURNISSEURS = sNumCDE
HAjoute(COMMANDES_FOURNISSEURS)
HDebloqueNumEnr(nNumEnr)
//Les autres utilisateurs peuvent récupérer un nouveau numéro


ATTENTION Code saisie à la volée et peut comporter des erreurs

Contribution le : 04/01/2005 17:08
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: NUMERO AUTO
Stagiaire WDF
Inscrit:
03/01/2005 15:40
Post(s): 34
Merci beaucoup pour la réponse.
Je teste et adapte.

Contribution le : 04/01/2005 21:15
Créer un fichier PDF de la contribution Imprimer


Re: NUMERO AUTO
Stagiaire WDF
Inscrit:
03/01/2005 15:40
Post(s): 34
J'ai mis en place, aprés des petites modif...
Merci beaucoup, cela repond parfaitement a mon soucis..

Contribution le : 05/01/2005 10:10
Créer un fichier PDF de la contribution Imprimer


[RESOLU] NUMERO AUTO
Stagiaire WDF
Inscrit:
03/01/2005 15:40
Post(s): 34
Merci

Contribution le : 05/01/2005 10:48
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2