IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Déclencher une procédure en fonction de l'heure


Sujet :

WinDev

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2013
    Messages : 18
    Points : 9
    Points
    9
    Par défaut Déclencher une procédure en fonction de l'heure
    Bonjour

    je voudrai copier les enregistrements du fichier A dans le fichier B
    j'arrive à faire ça mais mon problème est comment déclencher ce traitement à 8h00 par exemple

    durant ma recherche j'ai trouvé la fonction Timer() mais j'ai pas tellement compris sa fonctionnement

    Merci de m'aider

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Bonjour,

    Le plus simple et de faire une tache planifiée (système microsoft) ou une entrée cron (unix)....

    Sinon ça veut dire un process qui tourne en permanence sur la machine pour se lancer une fois par jour.... c'est un peu dommage !
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  3. #3
    Membre habitué Avatar de elfasys
    Homme Profil pro
    Ingénieur automatismes industriels, conception et réalisation
    Inscrit en
    Octobre 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur automatismes industriels, conception et réalisation
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 81
    Points : 144
    Points
    144
    Par défaut
    Bonjour

    J'ai souvent cette fonction dans mes applications. En simplifiant mon code (j'utilise en général des paramètres qui sont soit une heure de déclenchement, soit une période, ou une demande immédiate par un booleen, et je lance les procédures dans des threads) on obtient ce code qui est inséré dans une procédure périodique de base, toujours présente dans mes applications et qui tourne en permanence (période par exemple 1 seconde) :

    Procédure() contient la fonction que tu veux lancer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    <Ma Procédure périodique automatique>	
     
    SELON <différence entre heure système et heure choisie>
     
         CAS <= 0	// heure prévue postérieure ou égale à heure actuelle : on arme
              // Armement_procédure a été déclaré en tant que variable globale booléenne 
              Armement_procédure = Vrai
     
         CAS > 0   // heure prévue antérieure à heure actuelle : si c'est armé, on annule l'armement et on exécute
     
              SI Armement_procédure ALORS
                   Procédure()
                   Armement_Procédure = Faux
              FIN
    FIN
    C'est très simple à faire et cela se plie a toute manipulation, paramétrage,...
    Pourquoi faire simple quand on peut faire compliqué ?

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2013
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    La tâche est créé correctement dans la gestionnaire des tâches mais il ne s'execute pas

    merci elfasys je vais tester ce code

    A+

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Tu génère une log pour vérifier que l'exe a bien été lancé ? ou peut-être qu'il a une interface ?

    Ce qu'elfasys propose peut le faire mais il faut accepter que le process tourne en permanence... dans le cas d'une appli industriel qui pilote un automate et qui est donc en "execution ad vitam eternam" ça colle bien... par contre s'il s'agit de lancer une tache bidon et autonome (duplication de base, génération de stat, controle des données, envoi de mail d'alerte...) c'est un peu lourd !
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  6. #6
    Membre habitué Avatar de elfasys
    Homme Profil pro
    Ingénieur automatismes industriels, conception et réalisation
    Inscrit en
    Octobre 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur automatismes industriels, conception et réalisation
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 81
    Points : 144
    Points
    144
    Par défaut
    Citation Envoyé par michel.souris Voir le message
    par contre s'il s'agit de lancer une tache bidon et autonome (duplication de base, génération de stat, controle des données, envoi de mail d'alerte...) c'est un peu lourd !
    Même s'il s'agit d'un pur programme de gestion, on a souvent besoin de tâches périodiques. J'ai toujours, par exemple, une procédure Bandeau() qui affiche le nom de l'utilisateur courant, le nom de la BD utilisée, la date et l'heure dans le bandeau des fenêtres (sauf thèmes Aero qui causent quelques surprises...), ou alors la surveillance du nombre de postes connectés (si la licence limite le nombre de postes), ou... plein de choses.

    Ca ne consomme que presque rien, et toutes les fonctions périodiques et le lancement des threads se trouvent regroupés dans le même code, avec toujours la même structure et un seul timer.

    En fait, je crois que je suis paresseux... Ca fonctionnait il y a 20 ans, et je n'ai pas trop cherché à moderniser. Je dois être un mauvais client pour les nouveautés !
    Pourquoi faire simple quand on peut faire compliqué ?

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2013
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Bonjour

    Oui mon "exe" a une interface
    toujours le même problème ma fenêtre se lance à minuit mais elle ne s’exécute pas

  8. #8
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Citation Envoyé par marwanaff Voir le message
    Bonjour

    Oui mon "exe" a une interface
    toujours le même problème ma fenêtre se lance à minuit mais elle ne s’exécute pas
    Dans quelle section de la fenêtre le code qui doit s’exécuter est il positionné ?

    En toute logique il devrait se trouver dans Initialisation de la fenêtre...

    Et pour aller plus loin, en toute logique, s'il s'agit d'un programme qui s’exécute de façon autonome il ne devrait pas y avoir de fenêtre et le code devrait se trouver dans l'initialisation du projet... mais vu que vous ne nous dites pas quel est l'objectif de ce programme.. je ne fait que supputer !
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2013
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    j'ai converti des fichiers dbf en hyperfile et je veux actualiser le contenu de ces fichiers une fois par jour à minuit ci dessous mon code qui me permet de faire les copies:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    HSupprimeTout(CMLIDP1)
    HSupprimeTout(CMLIGN1)
    ///CMLIDP 
    HDBOuvreSansBloquer("CMLIDP","CP","X:\FICHPROD\CMLIDP.DBF")
    HLitPremier("CMLIDP")
    TANTQUE PAS HEnDehors( "CMLIDP")
    HCopieEnreg(CMLIDP1,"CMLIDP",hValDéfaut)
    HAjoute(CMLIDP1)
    	HLitSuivant( "CMLIDP")	
    FIN
    //CMLIGN
    HDBOuvreSansBloquer("CMLIGN","CM","X:\FICHPROD\CMLIGN.DBF")
    HLitPremier("CMLIGN")
    TANTQUE PAS HEnDehors( "CMLIGN")
    	HCopieEnreg(CMLIGN1,"CMLIGN",hValDéfaut)
    	HAjoute(CMLIGN1)
    	HLitSuivant( "CMLIGN")	
    FIN
    Info("Traitement terminé")
    le code est situé dans l'initialisation de projet et à chaque lancement de l'exécutable le mise à jour ce fait alors que mon but est de le faire une fois par jour à 00:00 h

  10. #10
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    donc.... il faut "externaliser" cette fonction dans un autre exe !

    Ou sinon il faut que tu lance ton exe avec un paramètre spécifique et que ce paramètre soit lu afin de déterminer si la fonction doit être exécutée ou pas...

    Je pencherais pour la première solution...
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  11. #11
    Membre averti
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    256
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2010
    Messages : 256
    Points : 435
    Points
    435
    Par défaut
    Bonjour,

    Perso, je crée des tâches plannifiées dans Windows qui appellent mon exe avec 1 ou 2 paramètres:
    Soit le 1er paramètre est un nom quelconque pour déclencher tel traitement,
    Soit, plus généralement, le mot "EXEC" pour dire qu'on veut executer une fonction, le 2ème paramètre etant le nom de la fonction globale qui sera exécutée.

    Code du projet (ou init de la 1ere fenêtre du projet)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // Fonctions AUTO
    SI LigneCommande()<>""
    	SELON LigneCommande(1)
    		CAS "FACT_AUTO"
    			Ouvre(FacEnt_exec)
    			Ferme
    		CAS "EXEC" // Procedure sans parametre
    			Ouvre(Fonct_exec,LigneCommande(2))
    			Ferme
    	FIN
    FIN
    Bien sûr, aucun code blocant ne doit faire partie des traitements (Erreur(), info(), etc...), toutes les erreurs doivent être monitorées.
    Le traitement ouvre une fenêtre, tout le code de lancemant de la fonction est dans l'init de la fenêtre et se termine par ferme.
    La fonction appelée renvoie un résultat (="OK" si pas de pb) et écrit un log dans la variable globale AffLog, lequel est envoyé par e-mail s'il y a des erreurs.

    Déclaration globale de Fonct_exec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PROCEDURE fen(pFonct) // pFonct=nom de la fonction globale à executer
    Initialisation de la fenêtre Fonct_exec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Res est une chaîne
    LogFic,LogMail est une chaîne
    
    AffLog=DateVersChaîne(DateSys())+" "+HeureVersChaîne(HeureSys())+"- Exécution Auto de la fonction "+pFonct+RC
    res=Exécute(pFonct)
    AffLog+=DateVersChaîne(DateSys())+" "+HeureVersChaîne(HeureSys())+"- Resultat: "+res+RC
    logfic=ComplèteRep(fRepExe())+pFonct+"_"+DateSys()+"_"+HeureSys()+iif(Res[[1 A 2]]<>"OK","_ERR","")+".txt"
    fSauveTexte(LogFic,AffLog)
    SI res[[1 A 2]]<>"OK"
    	SI PAS Envoi_Mail("LOGIC - Erreur fonction "+pFonct,res,"admin@domaine.fr","test@domaine.fr",logfic,logmail) ALORS
    		AffLog+="Probleme envoi_mail"+RC+HErreurInfo()
    		fSauveTexte(LogFic,AffLog)
    	FIN
    FIN
    
    Ferme
    Les tâches plannifiées et les traitements s'executent sur une machine dédiée toujours allumée en salle machines, ou sur une machine VM sur un serveur.

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 303
    Points : 812
    Points
    812
    Par défaut
    Bonjour,

    Citation Envoyé par marwanaff Voir le message

    Oui mon "exe" a une interface
    toujours le même problème ma fenêtre se lance à minuit mais elle ne s’exécute pas
    Selon ce que fait ton application, il peut être nécessaire de revoir l'identitié de l'utilisateur pour la tâche planifiée.

    Et pour tester, tu devrais commencer par l'identité d'un administatreur avec tous les droits.

    Bon courage

Discussions similaires

  1. Réponses: 5
    Dernier message: 06/10/2010, 19h07
  2. Réponses: 0
    Dernier message: 03/03/2010, 10h03
  3. Réponses: 3
    Dernier message: 14/12/2008, 17h44
  4. Adaptation d'une procédure en fonction
    Par dasdeb dans le forum Débuter
    Réponses: 0
    Dernier message: 03/03/2008, 18h09
  5. Réponses: 3
    Dernier message: 22/03/2006, 15h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo