Remise à zéro d'un compteur

Forum destiné aux questions sur le développement : Formules, LotusScript, Java ...

Remise à zéro d'un compteur

Messagepar cyril08 » 04 Jan 2011 à 09:05

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
cyril08
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 349
Inscrit(e) le : 22 Nov 2010 à 17:11

Messagepar Michael DELIQUE » 04 Jan 2011 à 09:33

salut

et quelle est la question ?
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar cyril08 » 04 Jan 2011 à 09:41

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.
cyril08
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 349
Inscrit(e) le : 22 Nov 2010 à 17:11

Messagepar Michael DELIQUE » 04 Jan 2011 à 09:48

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
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Remise à zéro d'un compteur : [Résolu]

Messagepar cyril08 » 04 Jan 2011 à 13:24

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.
cyril08
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 349
Inscrit(e) le : 22 Nov 2010 à 17:11

Messagepar oguruma » 07 Jan 2011 à 09:24

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.
Bien à vous

http://www.dominoarea.org/oguruma/

Les téléphones PORTABLES dans les TGV y en a MARRRE de ces voyageurs qui ne respectent pas les autres ! ARRET DES PORTABLES SVP - Merci

Fumeurs ! respectez les non fumeurs !!!
Fumeurs ! respectez la loi de février 2007 et les lieux publics !!! (ie. hall de gares)
Avatar de l’utilisateur
oguruma
Super V.I.P.
Super V.I.P.
 
Message(s) : 4086
Inscrit(e) le : 16 Déc 2004 à 08:50
Localisation : LILLE

Messagepar cyril08 » 09 Mars 2011 à 10:05

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)
cyril08
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 349
Inscrit(e) le : 22 Nov 2010 à 17:11

Messagepar Michael DELIQUE » 09 Mars 2011 à 10:17

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"
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar cyril08 » 09 Mars 2011 à 10:59

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
cyril08
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 349
Inscrit(e) le : 22 Nov 2010 à 17:11

Messagepar Michael DELIQUE » 09 Mars 2011 à 11:10

dans ce cas il suffit de faire un controle sur le mois !

si mois <> 12 alors exit sub !
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar cyril08 » 09 Mars 2011 à 11:33

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?
cyril08
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 349
Inscrit(e) le : 22 Nov 2010 à 17:11

Messagepar Michael DELIQUE » 09 Mars 2011 à 12:36

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 !
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar roubech » 10 Mars 2011 à 01:57

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)
Avatar de l’utilisateur
roubech
Modérateur
Modérateur
 
Message(s) : 4976
Inscrit(e) le : 01 Fév 2007 à 20:22
Localisation : Lille

Messagepar cyril08 » 28 Mars 2011 à 16:27

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.
cyril08
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 349
Inscrit(e) le : 22 Nov 2010 à 17:11

Messagepar Michael DELIQUE » 28 Mars 2011 à 16:32

re,

retire le @iserror et teste chaque partie de ta formule séparement
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Suivant

Retour vers Développement