Modifier par programmation les champs de rapport dans Visual FoxPro

Cet article explique comment modifier par programmation un fichier de rapport pour modifier la couleur de police d’un champ.

Version d’origine du produit : Visual FoxPro
Numéro de la base de connaissances d’origine : 188403

Résumé

Il peut être souhaitable de modifier les champs de rapport par programmation pour différencier les valeurs ou modifier le format en fonction d’une condition. Cet article explique comment modifier la couleur de police d’un champ de rapport en fonction du total des ventes d’un vendeur individuel. Bien que cette technique fonctionne dans Microsoft Visual FoxPro 9.0 Professional Edition, vous pouvez obtenir les mêmes résultats à l’aide de l’écouteur de rapport et de l’impression pilotée par les événements.

Informations supplémentaires

L’exemple suivant crée une table, remplit la table et exécute un rapport sur les ventes, en modifiant la couleur de police pour refléter les totaux des ventes. Pour modifier la couleur d’un champ de rapport, les champs PenRed, PenGreen et PenBlue de l’enregistrement du champ de rapport sont modifiés. Cette méthode peut également être utilisée pour modifier le style de police, la taille de police ou même pour repositionner le champ. En outre, une classe entière d’objets peut être modifiée, à l’aide du champ> de propriété REPLACE ALL <WITH <valeur> de propriété FOR objtype = 8, pour instance.

  1. Enregistrez le code suivant dans un fichier programme nommé Maketabs.prg et exécutez le programme pour créer et remplir une table.

    Exemple de code

     *-- Code begins here.
     CREATE TABLE sales (ID c(10), invamt N(8,2))
     INSERT INTO sales (ID, invamt) VALUES ("JOE", 1000)
     INSERT INTO sales (ID, invamt) VALUES ("MARY", 2000)
     INSERT INTO sales (ID, invamt) VALUES ("HARRY", 500)
     INSERT INTO sales (ID, invamt) VALUES ("JOE", 1001)
     INSERT INTO sales (ID, invamt) VALUES ("MARY", 2001)
     INSERT INTO sales (ID, invamt) VALUES ("HARRY", 501)
     INSERT INTO sales (ID, invamt) VALUES ("JOE", 1002)
     INSERT INTO sales (ID, invamt) VALUES ("MARY", 2002)
     INSERT INTO sales (ID, invamt) VALUES ("HARRY", 502)
     *-- Code ends here
    
  2. Créez un rapport. Dans la bande d’en-têtes de page, ajoutez un champ de rapport et faites en sorte que l’expression salestot.id. Dans la bande De détails, ajoutez un champ de rapport et créez l’expression salestot.invamt. Dans la bande Pied de page, ajoutez un champ de rapport et créez l’expression salestot.invamt. Cliquez sur le bouton Calculs dans la boîte de dialogue Expression de rapport. Sélectionnez Somme, cliquez sur OK, puis cliquez à nouveau sur OK. Enregistrez le rapport sous Sales.frx.

  3. Enregistrez le code suivant dans un fichier programme nommé Sales.prg et exécutez le programme :

     *-- Code begins here.
     SET TALK OFF
     *-- Get a list of salespersons.
     SELECT DISTINCT id FROM sales INTO CURSOR list
    
     *-- Step through the list and print sales results for each
     *-- salesperson.
     SCAN
     SELECT * FROM sales WHERE id = list.id INTO CURSOR salestot
    
    *-- Get the total sales for this person.
     SUM invamt TO lnTotal
     SELECT 0
    
    *-- Open the report file as a table.
     USE sales.frx
    
     *-- We're looking for a field (objtype) that is
     *-- calculated (totaltype) and whose expression
     *-- (expr) is equal to table field we're calculating.
     LOCATE FOR objtype = 8 AND totaltype = 2 AND ;
     ATC("salestot.invamt", expr) > 0
    
    *-- Save the values for the pen and fill fields.
     lnPenRed = penred
     lnPenGreen = pengreen
     lnPenBlue = penblue
    
    *-- Modify the font color for the sales total.
     DO CASE
     CASE lnTotal > 3000 AND lnTotal < 6000 && Print green
     REPLACE penred WITH 0, pengreen WITH 255, penblue WITH 0
     CASE lnTotal > 6000 && Print blue
     REPLACE penred WITH 0, pengreen WITH 0, penblue WITH 255
     OTHERWISE && Print dark red on white
     REPLACE penred WITH 128, pengreen WITH 0, penblue WITH 0
     ENDCASE
     USE
     SELECT salestot
    
    *-- Change PREVIEW to TO PRINTER to print the report.
     REPORT FORM sales PREVIEW
     ENDSCAN()
    
    *-- Restore the original values.
     USE sales.frx
     LOCATE FOR objtype = 8 AND totaltype = 2 AND ;
     ATC("sales.invamt", expr) > 0
     REPLACE penred WITH lnPenRed, pengreen WITH lnPenGreen,;
     penblue WITH lnPenBlue
     USE
     CLOSE DATA
     *-- Code ends here.
    
  4. À mesure que chaque rapport est prévisualisé, faites défiler vers le bas pour afficher le résumé et observer comment la couleur change pour chaque vendeur.