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

 Delphi Discussion :

programe pascal delphi


Sujet :

Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2012
    Messages : 238
    Points : 77
    Points
    77
    Par défaut programe pascal delphi
    salam

    j'ai un programme qui me fais poussé des cheveux sur les dents
    ...

    pour commencer je vais vous expliqué ce que je veut réalisé .

    données :

    - j'ai plusieurs machines.
    -chaque machine je dois lui faire des maintenance (hebdomadaire, mensuel, ....annuel)

    maintenant au lieu de planifier 365 jours manuellement je veut créer un programme qui le fait automatiquement .
    pour ne pas brulé les étapes j'ai commencer a faire la panification des taches hebdomadaire.

    voila le bous de code
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    procedure TForm1.BitBtn1Click(Sender: TObject);
     
     var
      s :TDateTime;
     
    begin
      executiontache.Open;//la planification des tache (a remplir)
      tache_poste_detail.Open;//liste des taches par poste en détail
      s:=Now;
      tache_poste_detail.first;
     
      while not tache_poste_detail.Eof do
      begin
     
     
           s := DateTimePicker1.Date;
     
     
        if tache_poste_detail.FieldByName('Fréquance').AsString = 'Hebdomadaire'
        then
        begin
     
          while s < DateTimePicker1.Date+365  do
          begin
    executiontache.insert;        executiontache.FieldByName('Nposte_tache').AsInteger:=tache_poste_detail.FieldByName('Nposte_tache').AsInteger;//poster le nom de la machine
    executiontache.FieldByName('dateplan').AsDateTime:=s;//poster la date de planification de la tache
    executiontache.post; 
            s := s + 7;
          end;
        end;
        tache_poste_detail.Next;
      end;
     
    end;
    cella fonctionne mais la planification des taches ce fais au premier jours de la semaine , donc je me retrouve toujours avec un lundi remplie de tache ensuite le reste de la semaine y'a rien a faire , moi ce que je cherche c'est de répartir les tache sur tous les jours de la semaine et la je bloc , j'ai essayer d’incrémenté la date d'une journée a chaque changement de machine mais bon sur la 8 eme machine j'aurai un problème puisque la semaine a seulement 7 jours et il y aurai une semaine ou je ferai pas ça maintenance.
    voila j’espère que je trouverai une solution pour ce problème , je vous remercie d'avance.

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par adelcrb Voir le message
    j'ai un programme qui me fais poussé des cheveux sur les dents
    Je serais curieux de voir cela...
    Citation Envoyé par adelcrb Voir le message
    cella fonctionne mais la planification des taches ce fais au premier jours de la semaine , donc je me retrouve toujours avec un lundi remplie de tache ensuite le reste de la semaine y'a rien a faire , moi ce que je cherche c'est de répartir les tache sur tous les jours de la semaine et la je bloc , j'ai essayer d’incrémenté la date d'une journée a chaque changement de machine mais bon sur la 8 eme machine j'aurai un problème puisque la semaine a seulement 7 jours et il y aurai une semaine ou je ferai pas ça maintenance.
    Il faut appliquer un modulo 7 sur l'incrément de date donc:
    • Machines 1, 8, 15, 22 => 1° jour
    • Machines 2, 9, 16 => 2° jour
    • ...
    • Machines 7, 14, 21 => 7° jour

    Ensuite, attention en ajoutant 365 à votre date de départ, vous ne tenez pas compte des années bissextiles (366 jours).
    Utilisez les fonctions de l'unité DateUtils : IncYear, IncWeek, IncDay, etc.

    Enfin, utilisez des variables dont le sens est plus explicite, cela permettra une meilleure maintenance future du programme...

    Donc, votre code réaménagé ressemble à :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      Debut, Fin: TDateTime;
      s: TDateTime;
      Delta: Integer;
    begin
      executiontache.Open;//la planification des tache (a remplir)
      tache_poste_detail.Open;//liste des taches par poste en détail
      {s := Now;}
      Debut := Now;
      Fin := IncYear(Debut, 1);
      Delta := 0;
     
      tache_poste_detail.first;
     
      while not tache_poste_detail.Eof do
      begin
        {s := DateTimePicker1.Date;}
        if tache_poste_detail.FieldByName('Fréquance').AsString = 'Hebdomadaire' then
        begin
          s := IncDay(Debut, Delta);;
          {while s < DateTimePicker1.Date+365  do}
          while s < Fin  do
          begin
            executiontache.insert;
            //poster le nom de la machine
            executiontache.FieldByName('Nposte_tache').AsInteger := tache_poste_detail.FieldByName('Nposte_tache').AsInteger;
            //poster la date de planification de la tache
            executiontache.FieldByName('dateplan').AsDateTime := s;
            executiontache.post;
            {s := s + 7;}
            s := IncWeek(s, 1);
            // ou
            // s := IncDay(s, 7);
          end;
          // Décalage de 1 jour pour la machine suivante
          // avec retour en début de semaine
          Delta := (Delta + 1) mod 7;
        end;
        tache_poste_detail.Next;
      end;
    end;

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2012
    Messages : 238
    Points : 77
    Points
    77
    Par défaut
    merciiiii philipe ça marche voila le code final pour tous les fréquence

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      Debut, Fin: TDateTime;
      s: TDateTime;
      Delta: Integer;
    begin
      executiontache.Open;
      tache_poste_detail.Open;
      Debut := DateTimePicker1.Date;
      Fin := IncYear(Debut, 1);
      Delta := 0;
     
      tache_poste_detail.first;
     
      while not tache_poste_detail.Eof do
      begin
        if tache_poste_detail.FieldByName('Fréquance').AsString = 'Hebdomadaire' then
        begin
          s := IncDay(Debut, Delta);
          while s < Fin  do
          begin
            executiontache.insert;
            executiontache.FieldByName('Nposte_tache').AsInteger := tache_poste_detail.FieldByName('Nposte_tache').AsInteger;
            executiontache.FieldByName('dateplan').AsDateTime := s;
            executiontache.post;
            s := IncWeek(s, 1);
          end;
          Delta := (Delta + 1) mod 7;
        end;
        if tache_poste_detail.FieldByName('Fréquance').AsString = 'Mensuel' then
        begin
          s := IncDay(Debut, Delta);
          while s < Fin  do
          begin
            executiontache.insert;
            executiontache.FieldByName('Nposte_tache').AsInteger := tache_poste_detail.FieldByName('Nposte_tache').AsInteger;
            executiontache.FieldByName('dateplan').AsDateTime := s;
            executiontache.post;
            s := IncMonth(s, 1);
          end;
          Delta := (Delta + 1) mod 7;
        end;
         if tache_poste_detail.FieldByName('Fréquance').AsString = 'Trimestriel' then
         begin
           s := IncDay(Debut, Delta);
           while s < Fin do
           begin
              executiontache.insert;
              executiontache.FieldByName('Nposte_tache').AsInteger := tache_poste_detail.FieldByName('Nposte_tache').AsInteger;
              executiontache.FieldByName('dateplan').AsDateTime := s;
              executiontache.post;
             s := IncMonth(s, 3);
           end;
           Delta := (Delta + 1) mod 7;
         end;
         if tache_poste_detail.FieldByName('Fréquance').AsString = 'Semestriel' then
        begin
          s := IncDay(Debut, Delta);
          while s < Fin  do
          begin
            executiontache.insert;
            executiontache.FieldByName('Nposte_tache').AsInteger := tache_poste_detail.FieldByName('Nposte_tache').AsInteger;
            executiontache.FieldByName('dateplan').AsDateTime := s;
            executiontache.post;
            s := IncMonth(s, 6);
          end;
          Delta := (Delta + 1) mod 7;
        end;
             if tache_poste_detail.FieldByName('Fréquance').AsString = 'Annuel' then
        begin
          s := IncDay(Debut, Delta);
          while s < Fin  do
          begin
            executiontache.insert;
            executiontache.FieldByName('Nposte_tache').AsInteger := tache_poste_detail.FieldByName('Nposte_tache').AsInteger;
            executiontache.FieldByName('dateplan').AsDateTime := s;
            executiontache.post;
            s := IncYear(s, 1);
          end;
          Delta := (Delta + 1) mod 7;
        end;
        tache_poste_detail.Next;
      end;
    end;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 14/10/2007, 22h27
  2. [Sources SDL] C/C++ --> Pascal/delphi
    Par fab56 dans le forum Contribuez
    Réponses: 5
    Dernier message: 30/05/2007, 23h58
  3. les unités (passage de pascal à delphi)
    Par hasboulatof dans le forum Delphi
    Réponses: 7
    Dernier message: 07/01/2007, 13h16
  4. Passer du Pascal à Delphi
    Par poppels dans le forum Langage
    Réponses: 7
    Dernier message: 30/08/2002, 21h07

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