Page 1 sur 3
Remise à zéro d'un compteur

Publié:
04 Jan 2011 à 09:05
par cyril08
Bonjour,
J'ai crée un compteur qui s'incrémente automatiquement de 1 lorsque un nouveau document est crée. Il est contenu dans un champ Num calculé a l'affichage :
Tmp := @Text(@DbColumn("" : "NoCache"; ""; "(Numfichcom)"; 1));
TmpNum2 := @If(@IsNewDoc & !@IsDocBeingSaved & !@IsDocBeingRecalculated; @If(@IsError(Tmp) | Tmp = ""; "1"; @Text(@TextToNumber(@Subset(Tmp; 1)) + 1)); Num);
@If(TmpNum2 = ""; " non attribué"; TmpNum2)
Numfichcom est une vue masqué :
@If(@TextToNumber(Num)="@ERROR";"0";@TextToNumber(Num))
merci

Publié:
04 Jan 2011 à 09:33
par Michael DELIQUE
salut
et quelle est la question ?

Publié:
04 Jan 2011 à 09:41
par cyril08
oups pardon
Comment le remettre à zéro à la fin de chaque année?
J'avais l'idée de le mettre en champ modifiable tout en laissant @formules pour que l'admin puisse le remettre mais je ne sais pas si cela ne va pas perturber mon masque ensuite.

Publié:
04 Jan 2011 à 09:48
par Michael DELIQUE
comme tu as fait je vois pas comment faire. sauf si tu gère l'année dans le N° et que tu détect le changement d'année pour repartir à 1
Remise à zéro d'un compteur : [Résolu]

Publié:
04 Jan 2011 à 13:24
par cyril08
Michael DELIQUE a écrit:comme tu as fait je vois pas comment faire. sauf si tu gère l'année dans le N° et que tu détect le changement d'année pour repartir à 1
Pour la methode employée, il suffit de passer le champ Num en modifiable. Lors de la création du document il est alors accessible et lorsque je le repasse a 1 en simulant un changement d'année, cela fonctionne bien.

Publié:
07 Jan 2011 à 09:24
par oguruma
Le plus simple est de faire un agent LS qui se déclanche à date et heure programmée ou tu le lances à la main. Il se chargera de remettre à zéro les compteurs.
C'est plus simple que les formules.

Publié:
09 Mars 2011 à 10:05
par cyril08
oguruma a écrit:Le plus simple est de faire un agent LS qui se déclanche à date et heure programmée ou tu le lances à la main. Il se chargera de remettre à zéro les compteurs.
C'est plus simple que les formules.
Est ce que quelqu'un pourrait m'orienter vers un tuto pour la remise à zéro du compteur grace à un agent LS qui se déclenche seul?
Ou alors éventuelle en @formules, est qu'il est possible de réaliser un agent qui se déclenche seul?
un truk du genre @if(Annee = 01/01 ; @setfield("compteur";"1") ; @false)

Publié:
09 Mars 2011 à 10:17
par Michael DELIQUE
Salut
il n'y a pas de tuto pour ça c'est trop vaste.
pour les agents tu peut en déclanché un tout seul, tu vas dans les propriété de l'agent et tu regarde a "déclencheur"

Publié:
09 Mars 2011 à 10:59
par cyril08
Michael DELIQUE a écrit:Salut
il n'y a pas de tuto pour ça c'est trop vaste.
pour les agents tu peut en déclanché un tout seul, tu vas dans les propriété de l'agent et tu regarde a "déclencheur"
merci j'ai regarder mais l'agent ne peut etre au maximum mensuel et moi j'ai besoin qu'il soit annuelle

Publié:
09 Mars 2011 à 11:10
par Michael DELIQUE
dans ce cas il suffit de faire un controle sur le mois !
si mois <> 12 alors exit sub !

Publié:
09 Mars 2011 à 11:33
par cyril08
Michael DELIQUE a écrit:dans ce cas il suffit de faire un controle sur le mois !
si mois <> 12 alors exit sub !
ok je vais essayé
sinon j'ai eu une autre idée dans mon bouton d'appel du masque pour création doc :
- Code : Tout sélectionner
@If(
@IsNewDoc & @Date("";1;1);
@Command([Compose];"Masque")
& @SetField("compteur";"1");
@Command([Compose];"Masque")
)
j'ai fait le test la RAZ ne fonctionne pas, est un histoire de raffraichissement ou une absurdité de ma part lol?

Publié:
09 Mars 2011 à 12:36
par Michael DELIQUE
dèja on ne peut pas additionner les fonction avec un &
soit tu utilise @do soit tu met un ;
et ensuite @Command([Compose];"Masque") créé un nouveau masque !

Publié:
10 Mars 2011 à 01:57
par roubech
si ton champ Num est calculé à l'affichage, il n'est pas stocké dans le doc et je ne vois pas à quoi il te sert alors ni comment tu peux l'afficher dans ta vue
Perso j'aurai mis "calculé à la création"
tu peux expliquer pourquoi ce test @IsNewDoc & !@IsDocBeingSaved & !@IsDocBeingRecalculated
tel que je le comprend, tu renseignes le champ à l'ouverture du masque et pas à sa sauvegarde. Or le risque dans ce cas, c'est que un user 1 ouvre le masque pour créer un doc, commence à remplir les champs et avant qu'il aui fini de tout remplir, un autre user 2 ouvre le masque. Dans ce cas, les 2 docs auront le même Num. C'est pour ça que perso j'affecte soit une référence unique mais pas séquentielle avec par exemple @Unique ou si j'ai besoin d'un numéro séquetiel, je le recalcule sur le QuerySave (si isNewDoc)
pourquoi tu stocke ton num au format texte, si dans ta vue tu dois le convertir en nombre et dans ton calcul tu dois aussi le convertir en nombre ? (de toutes façon un lookup retournera toujours une chaine de texteet pas un nombre)
c'est quoi ce @TextToNumber(Num)="@ERROR" dans ta vue, alors que dans ton champ tu as bien un @IsError(Tmp)
Est-ce que tu assembles des bouts de codes trouvés de ci de là sans comprendre ?
au passage, ça fait 3 fois que Michael te dit que pour enchainer des actions il faut utiliser @Do et pas + ou &
Pour ce qui est d'avoir un compteur par année, au lieu de faire un @DbColumn dans ta vue triée par Num décroissant
tu pourrais catégoriser ta vue Numfichcom avec un champ année (soit un nouveau champ, soit @Created, soit ton Num est de la forme AAAA-NNNN)
et dans ce cas tu remplaces ton @DbColumn par un @DbLookup pour récupérer la liste des num de l'année courante uniquement @Year(@Today)

Publié:
28 Mars 2011 à 16:27
par cyril08
J'ai suivi tout tes conseils et je reconstruit mon compteur, cependant j'ai toujous un souci, cette fois ci l'incrémentation de fonctionne pas et je ne vois pas d'ou cela vient.
- Code : Tout sélectionner
Tmp := @DbColumn("" : "NoCache"; ""; "(Numfichcom)"; 1);
Numero := @If(@IsError(Tmp) | Tmp = "" | @Text(@Year(@Now)) != @Left(@Subset(Tmp; 1); 4); "001";
@TextToNumber(@Right(@Subset(Tmp; 1); 3)) < 9; "00" + @Text(@TextToNumber(@Right(@Subset(Tmp; 1); 3)) + 1);
@TextToNumber(@Right(@Subset(Tmp; 1); 3)) < 99; "0" + @Text(@TextToNumber(@Right(@Subset(Tmp; 1); 3)) + 1);
@Text(@TextToNumber(@Right(@Subset(Tmp; 1); 3)) + 1));
REM {Le champ est calculé avec calcul après validation et non calculé à la création, ainsi il est réévalué au moment de l'enregistrement. Ceci permet d'éviter des doublons si création simultanée par 2 personnes. Par contre, il faut le calculer seulement lors de la création du document. @IsNewDoc n'est pas utilisable (agent de création)};
@If(Num= "" & @IsDocBeingSaved;Numero;Num)
le type de champ est dans le ppt.

Publié:
28 Mars 2011 à 16:32
par Michael DELIQUE
re,
retire le @iserror et teste chaque partie de ta formule séparement