Modificare a livello di codice i campi del report in Visual FoxPro

Questo articolo illustra come modificare a livello di codice un file di report per modificare il colore del carattere di un campo.

Versione originale del prodotto: Visual FoxPro
Numero KB originale: 188403

Riepilogo

Può essere consigliabile modificare i campi del report a livello di codice per differenziare i valori o modificare in altro modo il formato a seconda di una condizione. Questo articolo illustra come modificare il colore del carattere di un campo del report in base ai totali delle vendite di un singolo venditore. Anche se questa tecnica funziona in Microsoft Visual FoxPro 9.0 Professional Edition, è possibile ottenere gli stessi risultati usando il listener di report e la stampa basata su eventi.

Ulteriori informazioni

Di seguito viene creata una tabella, popolata la tabella ed eseguito un report di vendita, modificando il colore del carattere in modo da riflettere i totali delle vendite. Per modificare il colore di un campo del report, i campi PenRed, PenGreen e PenBlue del record del campo del report vengono modificati. Questo metodo può essere usato anche per modificare lo stile del carattere, le dimensioni del carattere o anche per riposizionare il campo. È inoltre possibile modificare un'intera classe di oggetti, ad esempio usando il campo> della proprietà REPLACE ALL <WITH <FOR> objtype = 8.

  1. Salvare il codice seguente in un file di programma denominato Maketabs.prg ed eseguire il programma per creare e popolare una tabella.

    Codice di esempio

     *-- 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. Creare un report. Nella banda Intestazione pagina aggiungere un campo del report e impostare l'espressione salestot.id. Nella banda Dettagli aggiungere un campo del report e impostare l'espressione salestot.invamt. Nella banda Piè di pagina aggiungere un campo del report e impostare l'espressione salestot.invamt. Fare clic sul pulsante Calcoli nella finestra di dialogo Espressione report. Selezionare Somma, fare clic su OK e quindi fare di nuovo clic su OK. Salvare il report come Sales.frx.

  3. Salvare il codice seguente in un file di programma denominato Sales.prg ed eseguire il programma:

     *-- 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. Quando ogni report viene visualizzato in anteprima, scorrere fino alla fine per visualizzare il riepilogo e osservare come cambia il colore per ogni venditore.