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

Pascal Discussion :

[Pascal Script] Impression d'un rapport suivant une checklistbox


Sujet :

Pascal

  1. #1
    Candidat au Club
    Homme Profil pro
    employé
    Inscrit en
    Juillet 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Juillet 2021
    Messages : 7
    Points : 4
    Points
    4
    Par défaut [Pascal Script] Impression d'un rapport suivant une checklistbox
    Bonjour à tous, je suis occupé à faire un petit développement en pascalscript, le but est dans une checklistbox pointer des numéros de commande
    et de sortir un rapport par numéro de commande

    voici le bout de code qui fonctionne mais malheureusement à la sortie il ne m'affiche que le dernier rapport
    je ne comprends pas mon erreur sachant que je suis novice en Pascal

    d'avance merci pour votre aide

    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
     
         for i := 0 to checklistbox1.items.count-1 do
         if checklistbox1.checked[i] = true  then
         //Répeter l'opération tant que c'est coché  
         repeat                   
     
       replaceSQL('Cde_CE', sql + where + Order);  
       replaceparam('Cde_CE:numCde','ftstring', (checklistbox1.items[i]));          
       ExecSQL('Cde_CE') ;  
     
     
         firstrecord('Cde_CE');
        while not queryEOF ('Cde_CE') do
     
     
     
        nextrecord('Cde_CE')    
     
            //Termine la répétition si NON coché;                                                                                  
       until not checklistbox1.checked[i] = false ;
    Nom : Tableau de bord.jpg
Affichages : 329
Taille : 23,2 Ko

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Hello,

    Sans connaitre les fonctions SQL que tu utilises dans ton code, je pense qu'il y a un problème de syntaxe dans tes boucles, due en particulier la non-utilisation de blocs begin/end.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for i := 0 to checklistbox1.items.count-1 do
    begin
        if checklistbox1.checked[i] = true  then
        begin
            replaceSQL('Cde_CE', sql + where + Order);
            replaceparam('Cde_CE:numCde','ftstring', (checklistbox1.items[i]));
            ExecSQL('Cde_CE');
            firstrecord('Cde_CE');
            while not queryEOF ('Cde_CE') do
                 nextrecord('Cde_CE');
        end;
    end;
    Quelque chose comme ça serait plus correct je pense, à tester...
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  3. #3
    Candidat au Club
    Homme Profil pro
    employé
    Inscrit en
    Juillet 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Juillet 2021
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Tout d'abord merci de prendre le temps de me répondre

    je viens de faire les petites modifications celle-ci n'ont rien changé, le reporting sort mais uniquement avec le dernier items cochés
    il me semble que la boucle se fait mais écrase le précédent et donc n'imprime que le dernier.

    la requete Sql permet juste d'aller chercher le numéro de commande dans une BDD pour l'impression du rapport dans Fastreport

    encore merci pour l'aide

  4. #4
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Comment fais-tu le traitement de chaque record ? Ce devrait être dans la boucle, en non à la fin de celle-ci.
    Peut-être peux-tu nous montrer un peu plus code ?
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  5. #5
    Candidat au Club
    Homme Profil pro
    employé
    Inscrit en
    Juillet 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Juillet 2021
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Donc pour résumer, je fais mon rapport avec Fastreport en 2 étapes

    1) première Etape je fais une requète SQL avec les tris nécessaires qui affiche les numéros de commande dont j'aurais potentiellement besoins dans la checklistbox

    avec le code suivant
    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
     
    var
    Sql_Charg, Where_Charg, Order_Charg : String ;  
     
    procedure BitBtn_ChargerOnClick(Sender: TfrxComponent);
     
    begin
       if <DBFOXPRO> then
    begin
     
          CheckListBox1.items.clear; 
     
         d11 := formatdatetime('mm/dd/yyyy',date1.date);
         d12 := formatdatetime('mm/dd/yyyy',date2.date);  
     
    Sql_Charg := ' Select ... '
               + ' FROM   .... ';                                                                                                     
    Order_Charg:=' order by .... ';  
     
      begin
        if Multi_jours_Chck1.checked = true then
         Where_Charg :=  ' Where ... '     
        else
         Where_Charg :=  ' Where ... ';  
     
      end;
     
     
    end;
     
        replacesql('liste_commande', Sql_Charg + Where_Charg + Order_Charg);
           execsql('liste_commande');  
     
      firstrecord('liste_commande');    
      while not queryEOF ('liste_commande') do
        begin
     
                CheckListBox1.items.add(<liste_commande."numero">) ;                                                                                                                                                           
     
          nextrecord('liste_commande')
        end;
     
     
    end;
    2) deuxième étape via un bouton impression qui envoi les items sectionnés vers l'impression (c'est ici que le problème se trouve la boucle s'effectue mais n'imprime que le dernier item selectionné)
    la boucle devrait repéter la requète et remplacer "numCde" par les items sélectionnés dans la checklistbox

    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
     
    var
    sql,Where, Order : string;
    i : integer;
     
    procedure BitBtn1OnClick(Sender: TfrxComponent); //Bouton impression
    begin
     
     //Requète SQL
    sql := 'SELECT ... '
    + ' FROM ...  '  
    + ' INNER JOIN ...  '  
    + ' INNER JOIN .... '  
    + ' inner join .... ' ;    
     where := ' WHERE c.numero = (:numCde) ' ;                                  
    Order :=  ' GROUP BY .... '
    + ' .... ' ;
     
    /////////////////////////////////////////////////////////////////////////////////////////                                                                                                                                                                                  
          //Boucle ou répétion tant que les items sont cochés
     
         for i := 0 to checklistbox1.items.count-1 do
         begin                 
           if checklistbox1.checked[i] = true  then
            //Répeter l'opération tant que c'est coché  
           repeat                   
            begin
     
             ReplaceSQL('Cde_CE', sql + where + Order);               
             Replaceparam('Cde_CE:numCde','ftstring', (checklistbox1.items[i]));          
             ExecSQL('Cde_CE') ;       
     
              firstrecord('Cde_CE');
               while not queryEOF ('Cde_CE') do                                                                                                                                                                                                                                                                                                                                        
     
     
              nextrecord('Cde_CE')    
            end;        
                      //Termine la répétition si NON coché;                                                                                  
              until not checklistbox1.checked[i] = false ;
     
         end;                 
    ////////////////////////////////////////////////////////////////////////////////////////////                                                                                                                                                                                            
    end;
    Ps: Existe-t-il un moyen ou une fonction pour répéter l'impression des Rapports?

  6. #6
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Bonjour,

    Au lieu d'imbriquer des bouts de requêtes dans ta boucle, ce qui te complique les choses et tu ne sais pas où ça coince si ça coince, commence par vérifier ta boucle avec un truc tout simple genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i := 0 to checklistbox1.items.count-1 do
      if checklistbox1.checked[i] = true then 
      begin
        ShowMessage(checklistbox1.items[i]);
        // tes autres choses à faire avec checklistbox1.items[i]
      end;
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  7. #7
    Candidat au Club
    Homme Profil pro
    employé
    Inscrit en
    Juillet 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Juillet 2021
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Je viens de tester le code et j'ai bien les x messages qui s'affiche selon le nombre d'items cochés dans la checklistbox
    donc pour moi la boucle est correct
    le problème vient de la sortie du rapport (Fastreport) qui écrase le rapport précédent puisqu'il boucle à chaque Item coché
    pour s'arrêter sur le dernier

Discussions similaires

  1. Calcul dans une requete pour l'impression d'un rapport
    Par obelix1990 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 08/02/2018, 09h14
  2. Script pour effectuer des pings suivant une liste
    Par nicoreims dans le forum Shell et commandes GNU
    Réponses: 14
    Dernier message: 19/08/2017, 03h23
  3. Réponses: 9
    Dernier message: 24/03/2014, 17h50
  4. Arrêter un script suivant une condition
    Par hindou90 dans le forum Linux
    Réponses: 4
    Dernier message: 07/02/2011, 20h29
  5. Réponses: 2
    Dernier message: 26/11/2009, 12h05

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