PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → Probleme : Ecriture du resultat de 2 expressions dif. : SI... en une seule fois.
Probleme : Ecriture du resultat de 2 expressions dif. : SI... en une seule fois.
Débuté par terik, 24 oct. 2016 19:10 - 13 réponses
Membre enregistré
89 messages
Popularité : +1 (1 vote)
Posté le 24 octobre 2016 - 19:10
Bonjour,

@ Probleme ici...

1) Je ne comprend pas pourquoi mon incrementation finale n est pas = a +2 ?
(Dans le cas de figure ou CHAMP1 et CHAMP2 sont = 0)

2) je ne suis pas sur d utiliser la bonne fonction pour l enregistrement du quota...Hmodifie()
..Pour le moment je n obtient qu'une incrementation de +1... :(

TABLE1 est une tableau de participation...
DISPO est un fichier de Client don t le quota de participation augmente de +1 a chaque participations...


HLitRecherchePremier(DISPO, ID, numID)
SI HTrouve() = Vrai ALORS
//MET LE QUOTA A JOUR SEULEMENT QUAND CHAQUE CHAMPS EST < ou = a zero

SI TABLE1.CHAMP1 <= 0 ALORS
DISPO.QUOTA = QuotaActuel+1
FIN
SI TABLE1.CHAMP2 <= 0 ALORS
DISPO.QUOTAH = QuotaActuel+1
FIN
HModifie(DISPO)
FIN


..Ca vient peut etre de Hmodifie..? je l ai place a dif. endroits...sans arriver a = +2...
(j ai teste Tableenregistre qui m a mis la pagaille en recopiant des enregistrements les uns sur les autres)

--
Windev Mob 20 Express, 21 prévu suivant arrivage de pepettes / Config PCDev : MacMini.Ver.2007, Win1032bits, CPU:T2300/1600,Ram: 2GB. no sound :(
Pourquoi faire "des économies" quand on peut faire compliqué ? :)
Posté le 24 octobre 2016 - 19:16
Tu incrémentes Dispo.Quota, puis tu incrémentes Dispo.QuotaHHHHHHH...
Membre enregistré
89 messages
Popularité : +1 (1 vote)
Posté le 25 octobre 2016 - 14:59
Oui, mais en fait, c est une erreur d' orto lors de la copie en ligne...
En fait Le code qui tourne utilise Quota dans tt les cas.
et...Ca bloque tjrs.
(Surtout que l editeur nous indiquerait des qu un nom de champs/variable est incorect...donc ce n est pas cela.

...malheuresement !!!
:)

--
Windev Mob 20 Express, 21 prévu suivant arrivage de pepettes / Config PCDev : MacMini.Ver.2007, Win1032bits, CPU:T2300/1600,Ram: 2GB. no sound :(
Pourquoi faire "des économies" quand on peut faire compliqué ? :)
Posté le 25 octobre 2016 - 15:19
ok... et si tu nous montrais ton VRAI code alors, au lieu d'une "copie"

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

A votre disposition : WXShowroom.com, WXReplication (open source) et
maintenant WXEDM (open source)

Plus d'information sur http://fabriceharari.com


Le 10/25/2016 à 6:59 AM, terik a écrit :
Oui, mais en fait, c est une erreur d' orto lors de la copie en ligne...
En fait Le code qui tourne utilise Quota dans tt les cas.
et...Ca bloque tjrs. (Surtout que l editeur nous indiquerait des qu un
nom de champs/variable est incorect...donc ce n est pas cela.

....malheuresement !!! :)

--
Windev Mob 20 Express, 21 prévu suivant arrivage de pepettes / Config
PCDev : MacMini.Ver.2007, Win1032bits, CPU:T2300/1600,Ram: 2GB. no sound
:( Pourquoi faire "des économies" quand on peut faire compliqué ? :)
Posté le 25 octobre 2016 - 15:23
remarque, c'est pas la peine... Même la copie est fausse :-)

ton code fait deux fois
DISPO.QUOTA = QuotaActuel+1

Le champ reçoit donc deux fois la même valeur, vu que quotaactuel n'est
PAS incrémenté.

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

A votre disposition : WXShowroom.com, WXReplication (open source) et
maintenant WXEDM (open source)

Plus d'information sur http://fabriceharari.com


Le 10/25/2016 à 7:19 AM, Fabrice Harari a écrit :
ok... et si tu nous montrais ton VRAI code alors, au lieu d'une "copie"

Cordialement

Membre enregistré
89 messages
Popularité : +1 (1 vote)
Posté le 26 octobre 2016 - 00:05
En fait il doit faire cette manip.
1)Il verifie si la tranche horaire est DESocupee. (CHAMPS1 = 0)
2) Il Recupere alors la valeur du Champ QuotaActuel, du Lundi a 6hr. (pour mon ID/Candidat en Cours)
Exemple, Quota = "12" y a joute +1
(Pour 1 hr de presence sup)
==>> DISPO.QUOTA = QuotaActuel+1
et le sauvegarde dans DISPO.QUOTA, donc logiquement = 12+1 / 13hr.

Puis recommence avec cette valeur (Colonne de 7hr)., laquelle devrait etre donc pouvoir se calculer a partir de la Val...(12+1) pour y rajouter +1 hr.
Au final mon quota arrivé a la Col de 8H00 devrait etre = 14hr.

Hors... je reste a 13 Hr apres les 2 manip...(meme avec mes 2 CHAMPS1 et 2 a Zero)
Notez : Champs1 et aussi Champs2 !!

bref J arrive pas a incrémenter de ..+1 et Reuh..+1 après chaque colonne d'heure. 6Hr, 7Hr...etc...

Le code se répète 2 fois CAR : au cas ou l #ID de qq d autre est déjà "présent" dans la colonne de 6Hr ou celle de 7hr, mon
candidat Actuel ne pourra donc pas participer dans cette tranche et par la meme son...DISPO.QUOTA = QuotaActuel doit donc s incrémenter que d une seule heure.... (ou pas du tout quand c est deja OQP.)

S'il n y avait pas cette condition nec. (Verifier que la Tranche hor n est pas dejas OQP) ...j aurais fait toute la somme d une seule volee. DISPO.QUOTA = QuotaActuel+2 hr !!!

...je sais pas si je me fait comprendre.
Ma syntaxe doit donc, traiter le cas par cas, et donc, une incrementation de 1Hr a la fois (repetitive si besoin est)
Capich ?
,,,o no capich ?
:)

--
Windev Mob 20 Express, 21 prévu suivant arrivage de pepettes / Config PCDev : MacMini.Ver.2007, Win1032bits, CPU:T2300/1600,Ram: 2GB. no sound :(
Pourquoi faire "des économies" quand on peut faire compliqué ? :)
Message modifié, 26 octobre 2016 - 00:19
Membre enregistré
89 messages
Popularité : +1 (1 vote)
Posté le 26 octobre 2016 - 15:32
Bon...Comme j ai l impression que ca pouvait venir de la gestion des "SI" mal goupillée..., je suis parti sur une autre méthode pour mieux gerer les cas de figure...
Apparentement ce (vrai) code fonctionne nettement mieux (que le précédent) pour m orienter "sans faille" vers mes
2 cas de figures avec Col 6 et Col 7 et leur 4 possibilités finales =0 ou <>0
... reste plus qu'a y intégrer une proc pour augmenter les Quota de façon appropriés.

(Si vous savez comment faire plus "compact" je suis toujours preneur...) :merci:

SI (TPART.H6V1)>0 ET (TPART.H7V1)>0 ALORS
GOTO DENADA
SINON

SI (TPART.H6V1)+(TPART.H7V1)<=0 ALORS
GOTO COMPLETO // (1,1)
SINON

SI (TPART.H6V1)<=0 ALORS
GOTO SET6 //(1,0)
SINON

SI (TPART.H7V1)<=0 ALORS
GOTO SET7 // (0,1)
SINON

FIN
FIN
FIN
FIN

DENADA:
infoBOX = "DENADA avec "+TPART.H6V1+" : "+TPART.H7V1+" : "+HeureVersChaîne(Now())
RETOUR

COMPLETO:
infoBOX = "COMPLETO avec "+TPART.H6V1+" : "+TPART.H7V1+" : "+HeureVersChaîne(Now())
RETOUR

SET6:
infoBOX = "LE SIX avec "+TPART.H6V1+" : "+HeureVersChaîne(Now())
RETOUR

SET7:
infoBOX = "LE SEPT avec "+TPART.H7V1+" : "+HeureVersChaîne(Now())
RETOUR


--
Windev Mob 20 Express, 21 prévu suivant arrivage de pepettes / Config PCDev : MacMini.Ver.2007, Win1032bits, CPU:T2300/1600,Ram: 2GB. no sound :(
Pourquoi faire "des économies" quand on peut faire compliqué ? :)
Posté le 26 octobre 2016 - 17:29
Tu n'as pas lu les réponses de Fabrice, et du coup, tu as fait un truc HORRIBLE.

Enlève moi tout de suite tous ces GOTO !!!
SI (TPART.H6V1)>0 ET (TPART.H7V1)>0 ALORS
infoBOX = "DENADA avec "+TPART.H6V1+" : "+TPART.H7V1+" : "+HeureVersChaîne(Now())
RETOUR
SINON

SI (TPART.H6V1)+(TPART.H7V1)<=0 ALORS
infoBOX = "COMPLETO avec "+TPART.H6V1+" : "+TPART.H7V1+" : "+HeureVersChaîne(Now())
RETOUR
SINON

SI (TPART.H6V1)<=0 ALORS
infoBOX = "LE SIX avec "+TPART.H6V1+" : "+HeureVersChaîne(Now())
RETOUR
SINON

SI (TPART.H7V1)<=0 ALORS
infoBOX = "LE SEPT avec "+TPART.H7V1+" : "+HeureVersChaîne(Now())
RETOUR
SINON

FIN
FIN
FIN
FIN


Ou encore :
SELON Vrai
CAS TPART.H6V1>0 ET TPART.H7V1 >0
infoBOX = "DENADA avec "+TPART.H6V1+" : "+TPART.H7V1+" : "+HeureVersChaîne(Now())
CAS TPART.H6V1+ TPART.H7V1 <=0
infoBOX = "COMPLETO avec "+TPART.H6V1+" : "+TPART.H7V1+" : "+HeureVersChaîne(Now())
CAS TPART.H6V1<=0
infoBOX = "LE SIX avec "+TPART.H6V1+" : "+HeureVersChaîne(Now())
CAS TPART.H7V1 <=0 ALORS
infoBOX = "LE SEPT avec "+TPART.H7V1+" : "+HeureVersChaîne(Now())
autres CAS
infobox = " cas non prévu"
FIN
Membre enregistré
89 messages
Popularité : +1 (1 vote)
Posté le 27 octobre 2016 - 05:42
moi j aime bien les Goto...du moment qu il marchent bien !
...Prkoi c est horrible ? - ca va pas lui faire plaisir a l inventeur des Goto de lire ca :)

ok...la config en "SI" est aussi longue a lire que celle en Goto
(Qui me semble plus clair du coup a cause des libelles),,,enfin c une question de gout je suppose.

La config SELON est interessante d un autre cote...je vais tester si ca marche aussi bien.
Mais a "longeur ="...je pref. les Goto du coup !

Goto Merci

Merci:
J ai bien lu tt le monde...mais ca m a pas éclairé plus que ca... :D

--
...Pourquoi faire "des économies" quand on peut faire compliqué ?
Windev XI - MiniPC : BRIX GIGABYTE . W10 64bits, CPU:I3.
Message modifié, 27 octobre 2016 - 05:57
Membre enregistré
89 messages
Popularité : +1 (1 vote)
Posté le 27 octobre 2016 - 06:17
Ok, SELON marche tres bien (Il y avait juste un dernier "alors" de trop.)

Question:
Si je voulais "afficher dans un ou deux champ sur la durée - (vitesses d execution) - entre le clic bouton et l affichage complet des résultats. :
y aurait il un code pour implémenter cela "simplement"...j ? Je vais surement utiliser le code en boucle des dizaines de fois sur tt le tableau et pour les calcul cela serait pratique de constater si il y a une réelle dif. significative entre un script et un autre dés maintenant...

--
...Pourquoi faire "des économies" quand on peut faire compliqué ?
Windev XI - MiniPC : BRIX GIGABYTE . W10 64bits, CPU:I3.
Posté le 27 octobre 2016 - 10:05
Dans ton code initial, tu faisais :
Si condition n°1 : Y = X+1
Si condition n°2 : Y = X+1

Donc dans le cas où condition 1 et condition 2 sont vérifiées, tu faisais Y=X+1, puis tu confirmais Y=X+1

Tu ne repartais pas de la valeur 'modifiée' pour ajouter une 2ème fois 1, tu repartais de la valeur originale.
Traitement correct :
Y=X
Si condition n°1 : Y ++
Si condition n°2 : Y ++


En terme de performances, avec le goto, tu as un branchement de plus, tu vas donc être un peu plus lent. Mais c'est totalement indétectable. Si tu te préoccupes de la performance, remplace le mot clé ET par _ET_
Tu dis que ce traitement sera exécuté des dizaines de fois.... En général, on s'inquiète de la performance quand un traitement comme celui-ci sera exécuté des millions de fois..
Posté le 27 octobre 2016 - 11:08
Bonjour

moi j aime bien les Goto...du moment qu il marchent bien ! ....Prkoi c
est horrible ? - ca va pas lui faire plaisir a l inventeur des Goto de
lire ca :)



Goto est une très vieille instruction (qui existait avant que les gosub
et autre boucle/selon et ainsi de suite soient inventés).

C'est aussi le meilleur moyen d’écrire du code absolument NON
maintenable, avec un code qui ressemble à un plat de spaghetti.

Résultat : si un jour tu cherche du boulot et le recruteur tombe sur du
code que tu as écris avec des goto, et s'il comprend QUOI QUE CE SOIT au
développement, il va mettre ton CV directement dans le "classement
vertical"...

Après, bien sur, si tu travailles tout seul toute ta vie et si tu n'as
jamais besoin d'aide pour débugger ton code, tu peux continuer à
utiliser des goto.

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

A votre disposition : WXShowroom.com, WXReplication (open source) et
maintenant WXEDM (open source)

Plus d'information sur http://fabriceharari.com


ok...la config en "SI" est aussi longue a lire que celle en Goto (Qui me
semble plus clair du coup a cause des libelles),,,enfin c une question
de gout je suppose.

La config SELON est interessante d un autre cote...je vais tester si ca
marche aussi bien. Mais a "longeur ="...je pref. les Goto du coup !
Goto Merci

Merci:
J ai bien lu tt le monde...mais ca m a pas éclairé plus que ca... :D

--
....Pourquoi faire "des économies" quand on peut faire compliqué ?
Windev XI - MiniPC : BRIX GIGABYTE . W10 64bits, CPU:I3.
Membre enregistré
89 messages
Popularité : +1 (1 vote)
Posté le 27 octobre 2016 - 15:56
J ai trouve mon bonheur avec : Elapsedtime = ChronoFin()
Reste a gerer le Format MilliSec qui se défoule sur les Zeros a l affichage...000000000000012 "ms"

:D

--
...Pourquoi faire "des économies" quand on peut faire compliqué ?
Windev XI - MiniPC : BRIX GIGABYTE . W10 64bits, CPU:I3.
Posté le 27 octobre 2016 - 21:16
Entre les 2 ou 3 syntaxes envisagées, la différence de performance devrait être négligeable.
Eventuellement , remplace ET par _ET_, ; c'est le seul changement pour lequel on est sûr que la performance va s'améliorer. (de 2 ou 3 millièmes de secondes)

Pour analyser les performances, il y a un truc très poussé : c'est :
- en mode test, passer par Projet // Analyseur de performance : tu vas avoir un compte rendu graphique très détaille de chaque instruction , le nombre de fois qu'elle a été exécutée, le temps qu'elle a consommé... C'est énorme.
- en réel, tu peux aussi l'utiliser en mettant des commandes AnalyseurDébut () et AnalyseurFin() aux endroits de ton choix dans ton code.