http://www-01.ibm.com/support/docview.w ... wg21087993
avantage : ca t'évite de récupérer des milliers de docs dans ton DbColumn pour ne prendre qu'une valeur
inconvénient : il faut gérer les accès concurrents au doc compteur
sinon, pour reprendre ton pb et la voie sur laquelle tu t'es engagée :
Tu veux stocker un compteur incrémental dans tes docs et tu veux recommencer à compter chaque année.
Supposons que tu as un champ "NumFiche" de type nombre et un champ "AnneeFiche" de type texte
Tu crées une vue "AllByNum", avec une 1ère colonne catégorisée sur "AnneeFiche" et une 2nde colonne triée décroissant sur NumFiche
Si tu veux récupérer le numéro du dernier doc créé en 2000, tu fais un DbLookup sur cette vue en lui passant comme clé "2000" et tu vas récupérer la liste de tous les numéros. Il te suffit alors de prendre le premier de la liste (car tri décroissant). Reste plus qu'à ajouter 1 pour avoir le numéro de ton nouveau doc
- Code : Tout sélectionner
tlkp := @DbLookup( ""; ""; "AllByNum"; "2000"; 2 );
@If( @IsError(tLkp); 1; @Subset(tLkp; 1)+1 )
Pour compléter, la valeur "2000" que j'ai prise là en exemple, c'est en fait l'année d'un champ date de ton doc, appelons le "DateFiche". J'imagine que ce champ est soit calculé à la création si les utilisateurs n'ont pas le droit de le modifier ou modifiable avec valeur par défaut @Now s'il peuvent la changer. Le tout, est de faire en sorte, qu'une fois que le numéro est calculé, on ne vienne pas changer la date (ou alors il faut changer le numéro mais ça n'aurait pas de sens)
Bref, dans ce cas, tu remplaces "2000" par le champ AnneeFiche qui est alors calculé avec @Text(@Year(DateFiche))
- Code : Tout sélectionner
tlkp := @DbLookup( ""; ""; "AllByNum"; AnneeFiche; 2 );
@If( @IsError(tLkp); 1; @Subset(tLkp; 1)+1 )