|
Inicio → WINDEV 2024 → ouverture de fenetre conditionner à recherche multicriteres dans un fichier |
ouverture de fenetre conditionner à recherche multicriteres dans un fichier |
Iniciado por Franck, ago., 22 2019 2:31 PM - 20 respostas |
| |
| | | |
|
| |
Membro registado 88 mensagems |
|
Publicado em agosto, 22 2019 - 2:31 PM |
Bonjour,
Sur mon appli, j'utilise le groupware utilisateur en automatique. au lancement, identifiant et mot de passe, et nous arrivons sur une fenêtre "accueil" (beaucoup de recherche pour trouver son nom ) sur cette fenêtre accueil, j'ai mis un petit libellé qui me récupère le nom de la personne connectée. Jusque là tout va bien.
Je voudrais en profiter pour ouvrir de force une fenêtre si l'utilisateur concerné n'a pas rempli la veille son journal de bord.
donc je recherche son nom dans le fichier journal de bord (jdb) et si vrai j'ouvre la fenêtre d'enregistrement de journal de bord.
sauf que je voudrais qu'une fois trouvé cela vérifie le dernier (en date) journal de bord de cet utilisateur, et que si la date n'est pas égale à la date de la veille alors à ce moment cela ouvre la fenêtre.
j'en suis la et je bloque :
SI HRecherche(jdb,ENomPrenom,LIB_connect)=Vrai ALORS
et ici je veux vérifier la date de l'enregistrement du dernier journal de bord de cette utilisateur et que ce soit la condition secondaire d'ouverture
Ouvre(FEN_jdb) FIN
autre chose,
plutot que de lire le fichier est il plus pertinent d'executer une requete journal de bord triée par date pour rechercher ?
merci
-- Merci Franck |
| |
| |
| | | |
|
| | |
| |
Membro registado 88 mensagems |
|
Publicado em agosto, 22 2019 - 3:48 PM |
bon ca :
SI HLitRechercheDernier(jdb,ENomPrenom,LIB_connect)=Vrai ALORS SI DateDifférence(jdb.Date, DateDuJour())<-1 ALORS Ouvre(FEN_jdbaccueil) FIN FIN
ca marche pas
-- Merci Franck |
| |
| |
| | | |
|
| | |
| |
Membro registado 88 mensagems |
|
Publicado em agosto, 22 2019 - 4:25 PM |
avec ca
REQ_jdbdate.ParamDate=Hier() HExécuteRequête(REQ_jdbdate) SI HLitRechercheDernier(REQ_jdbdate,ENomPrenom,LIB_connect)=Faux ALORS Ouvre(FEN_jdbaccueil) FIN
Ca marche !! à moi
Donc j'ai construit une requete avec un paramdate, j'execute d'abordla requete avec le critere hier , et ensuite je cherche l'utilisateur. et la jackpot ca marche,
Si qlq un lit cela , peut il me dire si ma solution est judicieuse ou dangereuse .
Merci à celui qui lira
-- Merci Franck |
| |
| |
| | | |
|
| | |
| |
Membro registado 3.890 mensagems Popularité : +227 (347 votes) |
|
Publicado em agosto, 22 2019 - 5:55 PM |
Bonjour, Il travaillent tous les jours les employés ?
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membro registado 88 mensagems |
|
Publicado em agosto, 23 2019 - 7:59 AM |
Bonjour,
Ooooh le moqueur !
il ne travaille évidemment pas tous les jours, et même pire ils osent prendre des vacances.
Du coup je me suis dit que j'allais utilisé un autre libellé qui est sur ma fenêtre accueil. dans ce libellé il y a la date en mode "vendredi 23 aout 2019". Et en découpant la chaine je crois, je vais regarder le jour, et si on est lundi d'aller vérifier avec comme paramètre date j-3. Mais bon aucune idée de comment faire
j'ai aussi ajouté une fenêtre simple "étiez vous en vacances ?" qui permettra de gérer ce soucis aussi.
merci de ces multiples réponses à mes diverses questions.
-- Merci Franck |
| |
| |
| | | |
|
| | |
| |
Membro registado 88 mensagems |
|
Publicado em agosto, 23 2019 - 8:51 AM |
Re bonjour
il y a surement beaucoup plus simple, mais dans ma fenetre d'accueil j'ai fait ca pour recuperer le jour :
sJour est une chaîne = ExtraitChaîne(DateVersChaîne(DateSys(),"JJJJ JJ MMMM AAAA"),1," ")
-- Merci Franck |
| |
| |
| | | |
|
| | |
| |
Membro registado 88 mensagems |
|
Publicado em agosto, 23 2019 - 9:05 AM |
et j'ai ajouté cela
dDate est une Date nbJourASoustraire est un entier=3 dDate=DateSys() dDate..Jour-=nbJourASoustraire
et ensuite une simple fonction si ajouté qlq sinon
et ca marche
-- Merci Franck |
| |
| |
| | | |
|
| | |
| |
Membro registado 3.890 mensagems Popularité : +227 (347 votes) |
|
Publicado em agosto, 23 2019 - 9:33 AM |
Je suppose que la présence des employés est stockée quelque part, dans une table PRESENCE par exemple. Il suffit de récupérer le dernier jour de présence de l'employé via une requête du style :
SELECT Employe.PK_Employe AS PK_Employe, Max(Presence.NDX_DatePresence) AS DerniereDatePresence, Présence.NDX_DatePresence AS NDX_DatePresence FROM Employe, Presence WHERE Employe.PK_Employe = Presence.FK_Employe AND ( Left(Presence.NDX_DatePresence,8) < Left(SYSDATE,8) AND Employe.PK_Employe = {pEmploye} ) GROUP by Employe.PK_Employe, Presence.NDX_DatePresence Il suffit de comparer la date obtenue avec la date de MAJ du journal de bord
Si la table PRESENCE n'existe pas, il y a certainement une table ABSENCE., Il est possible de la déduire aisément PRESENCE, via une condition NOT IN ABSENCE
Attention aussi aux HLitRechercheDernier ils ne retournent pas toujours l'enregistrement le plus récent, a moins de spécifier la date dans la condition de recherche -- Il y a peut être plus simple, mais, ça tourneMensagem modificada, agosto, 23 2019 - 9:53 AM |
| |
| |
| | | |
|
| | |
| |
Membro registado 88 mensagems |
|
Publicado em agosto, 23 2019 - 10:08 AM |
cette idée est très intéressante, comme à chaque fois d'ailleurs
Bon par contre je vais bien surchauffer pour maitriser une requête à ce point, mais je vais m'y lancer, car j'ai en effet une table absence qui contient les vacances et les arrêts maladies.
Concernant Hlitrecherchedernier, je le fais sur une requete qui ne contient que les enregistrements d'une date précise via ParamDate ou de simplement hier().
merci
-- Merci Franck |
| |
| |
| | | |
|
| | |
| |
Membro registado 3.890 mensagems Popularité : +227 (347 votes) |
|
Publicado em agosto, 23 2019 - 10:17 AM |
Franck a écrit :
Concernant Hlitrecherchedernier, je le fais sur une requete qui ne contient que les enregistrements d'une date précise via ParamDate ou de simplement hier().
C'était une remarque d'ordre général.
En ce qui concerne la requête, l'éditeur de requête est relativement bien fait, il nécessite peu, voire aucune connaissance en SQL. Il suffit de prendre 1 heure ou deux pour le maitriser. Il permet de contourner les limites de HFIltre et consort, surtout au niveau du multicritère.
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membro registado 88 mensagems |
|
Publicado em agosto, 23 2019 - 12:15 PM |
Voroltinquo,
je me permets une question hors de ce sujet
j'ai des fenêtres classiques qui permettent la création d'enregistrement. l'utilisateur saisi, ca enregistre, ca se ferme. rien de special. ca roule
mais je ne sais pas comment faire qu'une fenêtre serve à nouveau sans avoir a la fermer et la réouvrir. j'utilise le RAZ(vrai) ca vide les champs de saisie mais en fait ca ne cumule pas les enregistrements. ca n'enregistre que le dernier saisi.
et je ne comprends évidement pas pkoi
merci
-- Merci Franck |
| |
| |
| | | |
|
| | |
| |
Membro registado 1.623 mensagems Popularité : +100 (114 votes) |
|
Publicado em agosto, 23 2019 - 12:31 PM |
@franck
Si sur ton bouton valider tu fais : EcranVersFichiers() Hajoute() RAZ()
Ca devrait fonctionner |
| |
| |
| | | |
|
| | |
| |
Membro registado 88 mensagems |
|
Publicado em agosto, 23 2019 - 12:35 PM |
:D
merci François,
un drame pour moi de me rendre compte que je ne mettais pas le bon h...
j'apprends seul devant mon écran, des trucs compliqués j'avance pas a pas. et des trucs simples comme ca me plante , c'est à hurler ..... de rire
grand merci
-- Merci Franck |
| |
| |
| | | |
|
| | |
| |
Membro registado 3.890 mensagems Popularité : +227 (347 votes) |
|
Publicado em agosto, 23 2019 - 12:48 PM |
Un classique. A priori, dans ton bouton valider/enregistrer tu dois avoir un code "Ferme", pire, tu dois une action prédéfinie Code+Fermeture, cela arrive souvent lorsqu'on utilise le mode RAD fenêtre. Une solution consiste à : 1-Supprimer le code de fermeture et éventuellement l'action prédéfinie 2-Créer 2 nouveaux boutons Nouveau et Quitter, créer un superchamp dans lequel on regroupe tous les champ de saisie,SC_Saisie par exemple (il est aussi possible d'utiliser un groupe, mais on risque un oubli lors d'une maintenance éventuelle)
Le Code de valider devient :
pSauvegarderFiche()
Nouveau à un code qui ressemble à ça :
SI SC_Saisie..Modifié ALORS SI OuiNon("L'enregistrement en cours a été modifié"+CRLF+"Voulez vous l'enregistrer") ALORS pSauvegarderFiche() FIN HRAZ(... FichierVersEcran() RepriseSaisie(PremierChampDeSaisie) FIN
-- Il y a peut être plus simple, mais, ça tourneMensagem modificada, agosto, 23 2019 - 12:51 PM |
| |
| |
| | | |
|
| | |
| |
Membro registado 88 mensagems |
|
Publicado em agosto, 23 2019 - 1:18 PM |
Voroltinquo a écrit : > Un classique.
merci pour "un classique" cela me rend moins idiot
-- Merci Franck |
| |
| |
| | | |
|
| | |
| |
Membro registado 3.890 mensagems Popularité : +227 (347 votes) |
|
Publicado em agosto, 23 2019 - 1:30 PM |
Pour éviter d'avoir à tout se retaper à chaque création de fenêtre de saisie, on peut même envisager la création d'un pattern https://doc.pcsoft.fr/?2031020. Mais ça, c'est une autre histoire
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membro registado 88 mensagems |
|
Publicado em agosto, 23 2019 - 3:34 PM |
au secours Voroltinquo !
j'ai ecris ca :
sJour est une chaîne = ExtraitChaîne(DateVersChaîne(DateSys(),"JJJJ JJ MMMM AAAA"),1," ") dDate est une Date nbJourASoustraire est un entier=3 dDate=DateSys() dDate..Jour-=nbJourASoustraire
SI sJour="lundi" ALORS SI HRecherche(Educateurs,ENomPrenom,LIB_connect)=Vrai ALORS HExécuteRequête(REQ_jdbdate,hRequêteDéfaut,dDate) SI HLitRechercheDernier(REQ_jdbdate,ENomPrenom,LIB_connect) ALORS Ouvre(FEN_jdb) FIN FIN SINON SI HRecherche(Educateurs,ENomPrenom,LIB_connect)=Vrai ALORS HExécuteRequête(REQ_jdbdate,hRequêteDéfaut,Hier()) SI HLitRechercheDernier(REQ_jdbdate,ENomPrenom,LIB_connect) ALORS Ouvre(FEN_jdb) FIN FIN FIN
tout à l'heure je lançais j'ai eu l'impression que ca marchait mais en fait plus
et j'ai beau ecrire et reecrire, je vois pas ou je loupe
Sachant que j'ai bidouillé en voulant rajouter qlq chose qui n'est même pas là, c'est de consulter le fichier d'absence dont nous parlions tout à l'heure
-- Merci Franck |
| |
| |
| | | |
|
| | |
| |
Membro registado 88 mensagems |
|
Publicado em agosto, 23 2019 - 3:36 PM |
-- Merci Franck |
| |
| |
| | | |
|
| | |
| |
Membro registado 3.890 mensagems Popularité : +227 (347 votes) |
|
Publicado em agosto, 23 2019 - 4:36 PM |
Dans un premier temps
dDate..Jour-=nbJourASoustraire risque de poser un problème cf https://doc.pcsoft.fr/?2512043&name=jour_propriete," gestion des jours et des mois" cas 1 Il faut passer par DateVersEntier/EntierVersDate
dDate=EntierVersDate(DateVersEntier(DateSys())-nNbJourASoustraire)
En ce qui concerne la récupération du jour de la semaine, DateVersJour() fait très bien le boulot https://doc.pcsoft.fr/?3027004&name=dateversjour_fonction
Pour le reste, il faut contrôler si la requête s'est bien exécutée.
SI HExécuteRequête(... FIN
HRecherche sur une chaine renvoie souvent des valeurs incongrues, il faut privilégier l'option hIdentique, ou utiliser HLitRecherchePremier qui inclue de facto HIdentique. Et malgré ça, on a parfois des problèmes (il y en a qui ont essayé ...) Le code devient :
SI HLitRecherchePremier(Educateurs,ENomPrenom,LIB_connect) ET (EDUCATEURS.ENomPrenom=,LIB_connect) ALORS FIN
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membro registado 88 mensagems |
|
Publicado em agosto, 26 2019 - 10:03 AM |
sJour est une chaîne = ExtraitChaîne(DateVersChaîne(DateSys(),"JJJJ JJ MMMM AAAA"),1," ")
dDate est une Date nbJourASoustraire est un entier=3 dDate=DateSys() dDate..Jour-=nbJourASoustraire
SI sJour="lundi" ALORS SI HLitRecherchePremier(Educateurs,ENomPrenom,LIB_connect)=Vrai ALORS SI HExécuteRequête(REQ_jdbdate,hRequêteDéfaut,dDate) ALORS HLitRecherchePremier(REQ_jdbdate,ENomPrenom,LIB_connect) Ouvre(FEN_jdb) FIN FIN SINON SI HLitRecherchePremier(Educateurs,ENomPrenom,LIB_connect)=Vrai ALORS SI HExécuteRequête(REQ_jdbdate,hRequêteDéfaut,Hier()) ALORS HLitRecherchePremier(REQ_jdbdate,ENomPrenom,LIB_connect) Ouvre(FEN_jdb) FIN FIN FIN
Mon problème c'est que ca marche bizarrement.
avec toutes ces lignes, je suis censé lui dire de faire :
verifier le jour si lundi de faire un -3 sinon hier ensuite de verifier si la personne qui se connecte est bien educateurs si oui de verifier si ce dernier à bien realiser un jdb si oui rien à faire si non cela doit ouvrir la fenetre jdb
et bien ca marche bizarrement.
des fois ca le fait des fois non et sans que je comprenne pkoi
je pense que ca doit etre ma syntaxe qui est fausse
-- Merci Franck |
| |
| |
| | | |
|
| | |
| |
Membro registado 88 mensagems |
|
Publicado em agosto, 26 2019 - 10:16 AM |
SI sJour="lundi" ALORS SI HLitRecherchePremier(Educateurs,ENomPrenom,LIB_connect)=Vrai ALORS HExécuteRequête(REQ_jdbdate,hRequêteDéfaut,dDate) SI HLitRechercheDernier(REQ_jdbdate,ENomPrenom,LIB_connect)=Faux ALORS Ouvre(FEN_jdb) FIN FIN SINON SI HLitRecherchePremier(Educateurs,ENomPrenom,LIB_connect)=Vrai ALORS HExécuteRequête(REQ_jdbdate,hRequêteDéfaut,Hier()) SI HLitRechercheDernier(REQ_jdbdate,ENomPrenom,LIB_connect)=Faux ALORS Ouvre(FEN_jdb) FIN FIN FIN
ca, cela doit etre mieux
-- Merci Franck |
| |
| |
| | | |
|
| | | | |
| | |
|