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
    Membre du 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
    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 : 455
Taille : 23,2 Ko

  2. #2
    R�dacteur/Mod�rateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    D�tails du profil
    Informations personnelles :
    �ge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    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...

  3. #3
    Membre du 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
    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 466
    D�tails du profil
    Informations personnelles :
    �ge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    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 ?

  5. #5
    Membre du 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
    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 confirm�
    Avatar de Jip�t�
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 153
    D�tails du profil
    Informations personnelles :
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 153
    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;

  7. #7
    Membre du 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
    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