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.
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
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.
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.
À 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.