Incrémentation composé chiffre et lettre automatique

Résolu
coeurblanc1351 - 22 juin 2013 à 01:18
 coeurblanc1351 - 22 juin 2013 à 21:52
salut

j ai une table (cota) qui contient les champs suivant: num_conta, nom_com,date_conta,periode_cota...
mon souci c est comment faire une incrémentation automatique a chaque fois je clique sur nouveau comme suite: 13A 13B 13C 13D....
sachant que 13 change avec la date actuel exemple si on est en 2014 le 1er enregistrement de cette année sera: 14A 2eme 14B 3eme 14C...

8 réponses

solilog
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
10
22 juin 2013 à 08:06
Bonjour tous,

Oui Dubois, çà fait peu de codes, mais qui sait, il n'a peut-être que très peu de cotations dans l'année. Cà devrait marcher ainsi:
function incremCode(Old_Code:shortstring) : shortstring;
var new_yy : string[2];
    old_a  : char;
begin
   new_yy := formatdatetime('yy', date);
   old_a  := Old_Code[3];
   if new_yy <> copy( Old_Code, 1, 2) then
      result := new_yy+'A'
   else
      result := new_yy + chr(byte(old_a) +1);
end;


Voilà, c'était le petit code du café du matin.
Bon week-end à tous.

solilog
3
solilog
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
10
22 juin 2013 à 17:59
coeurblanc1351
Et pis quoi encore, tu veux aussi qu'on te fasse tout ton programme ?
Faut bosser mon gars. Bon, supposons que ta table s'appelle tbCota, dans la proc OnClick ton bouton:
var New_Code = shortstring;
begin
   tbCota.last;   // aller au dernier enregistrement
   New_Code := InCremCode( tbCota.fieldbyname('NumCota').asstring); // calcul de nouveau code
   tbCota.append; // nouvel enregistrement
   tbCota.fieldbyname('NumCota').asstring := New_Code;  // on y colle le code calculé
end;
 

Maintenant tu dois apprendre à bosser seul, moi je m'arrête là.
Bon courage.
solilog
3
korgis
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
17
22 juin 2013 à 20:50
Les 2 codes sont corrects et fonctionnent puisque si la condition :
new_yy <> Copy(Old_Code, 1, 2)

est remplie, "else" signifie forcément que :
new_yy = Copy(Old_Code, 1, 2)

donc on peut écrire (c'est mieux puisque new_yy est déjà calculé) :
Result := new_yy + Chr(Byte(old_a) + 1);

ou alors (c'est moins bien puisqu'il faut recalculer le premier terme de l'addition) :
Result := Copy(Old_Code, 1, 2) + Chr(Byte(old_a) + 1);


Conclusion : il vaut mieux coder à l'heure du p'tit déj qu'à celle du goûter !
3
dubois77
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
14
22 juin 2013 à 07:46
Salut
Donc ça ne laisse que 26 lignes par an (14A à 14Z)
cela me parait peu pour une compta non !


Dubois77
site perso
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
coeurblanc1351
22 juin 2013 à 15:47
salut

merci solilog, mais malheureusement puisque je suis débutant en programmation je ne sais pas comment transformé cette fonction pour que je clique sur le bouton Nouveau j'aurais le code afficher sur un dbedit
0
pierrotk10d
Messages postés
107
Date d'inscription
mardi 13 novembre 2007
Statut
Membre
Dernière intervention
20 juillet 2021
3
22 juin 2013 à 17:51
Bonjour,
Par hasard ça ne serait pas


if new_yy <> copy( Old_Code, 1, 2) then // Nouvelle année
result := new_yy+'A'
else // Meme année
result := Copy(Old_Code,1,2) + chr(byte(old_a) +1);



pierrot
0
solilog
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
10
22 juin 2013 à 18:01
pierrotk10d,
Non j'ai testé ma fonction, elle marche bien.
solilog
0
coeurblanc1351
22 juin 2013 à 21:52
salut

merci à tous et surtout solilog, vraiment je te tire chapeau,
soyer un peut patient avec moi,j'aime bien programmé avec delphi mais....
0