Gestione e modifica dei Report a Run-Time

 

© Articolo di: Fabrizio Garinetti © Agosto 2002 - Riproduzione vietata

Sono riuscito a scrivere questo articolo grazie ai vari interventi della mailing list, seguendo queste istruzioni sarà possibile modificare e personalizzare i report direttamente dal cliente.

Nell'analisi delle applicazioni che sviluppo metto in conto la manutenzione veloce dei report, penso sia capitato a molti che i clienti richiedono variazioni minime causandoci perdite di tempo e pazienza!

Tra le varie opzioni dell'applicazione ho introdotto la gestione di una tabella STAMPE.DBF dove indico:

· la procedura/e che la utilizza
· una descrizione sintetica del report,
· il nome del file frx
· e un flag che mi indica se è etichetta.

All'interno delle varie procedure sarà sempre aperta la tabella STAMPE.DBF e chiaramente ci sarà il pulsante relativo alla stampa dove verranno passati i parametri necessari per la selezione del report.

Esempio - Pulsante Stampa

……………. routine di elaborazione…..
……………………………………….....
……………. fine elaborazione………..

** In base alla procedura si filtra la tabella STAMPE
FILTRO= NOME DEL FILE
SELECT STAMPE
SET FILTER TO STAMPE.PRN_FILE=FILTRO

** mi posiziono sulla tabella principale potrebbe essere anche un cursor
SELECT (THISFORM.TABELLA_DA_STAMPARE)
GO TOP

** chiamata oggetto
LOCAL OSEARCHDLOG
LOCAL LVISCHANGE,LSTATECHANGE
OSEARCHDLOG = CREATE("SELSTMP")
OSEARCHDLOG.SHOW()


La form SELSTMP appartiene a una classe basata sul generico Form.
La Grid elencherà i record filtrati della tabella stampe e tramite il pulsante Modifica Rep permetterà di modificare il report


Gli oggetti definiti all'interno del form sono:
· Grid
· Pulsante 1
· Pulsante 2
· Pulsante 3
· OptionGroup

Evento INIT del form:
* Salvo area del file da stampare
thisform.FILEDASTAMP=ALIAS()
* inizializzo l'eventuale finestra di visualizzazione dei risultati
DEFINE WINDOW anteprima FROM 1,1 TO 29,75 TITLE 'Anteprima' CLOSE FLOAT GROW SHADOW ZOOM MINIMIZE SYSTEM
* la dimensiono già al massimo possibile
ZOOM WINDOW "anteprima" MAX
* mi posiziono in testa del File Stampe filtrato in precedenza
SELECT STAMPE
GO TOP
* mi posiziono sulla griglia
THISFORM.GRID.SETFOCUS

La Grid visualizzerà solo i report che appartengono alla singola procedura

Evento DESTROY del form:
* rilascio l'eventuale finestra di visualizzazione dei risultati
RELEASE WINDOW ANTEPRIMA

Codice Pulsante Modifica Report

Tramite questo codice si abilita la modifica del report:

SET SYSMENU TO _MFILE, _MVIEW
DEFINE PAD _MSM_VIEW OF _MSYSMENU AFTER _MSM_EDIT PROMPT "\<VIEW" COLOR SCHEME 3 KEY ALT+V, "" MESSAGE "CHANGES DISPLAY OPTIONS"
ON PAD _MSM_VIEW OF _MSYSMENU ACTIVATE POPUP _MVIEW
DEFINE POPUP _MVIEW MARGIN RELATIVE SHADOW COLOR SCHEME 4
DEFINE BAR _MVI_TOOLB OF _MVIEW PROMPT "\<TOOLBARS..." MESSAGE "SHOWS, HIDES, OR CUSTOMIZES TOOLBARS"
SYS(1500, '_MVI_TOOLB', '_MVIEW')
LOCAL LOLDSCREENVISIBLE
LOLDSCREENVISIBLE = _SCREEN.VISIBLE
_SCREEN.VISIBLE = .T.
** si controlla se etichetta o report
IF !STAMPE.PRN_ETIC
    MODIFY REPORT (STAMPE.PRN_NOME)
ELSE
    MODIFY LABEL (STAMPE.PRN_NOME)
ENDIF
_SCREEN.VISIBLE = LOLDSCREENVISIBLE

In questo modo sarà possibile:
· modificare o salvare i report con un altro nome
· agganciare un nuovo report tramite la gestione della tabella stampe.

Codice Pulsante OK
…………… si verifica se si deve stampare etichette o report
…………….si lancia la stampa o l'anteprima

Codice Pulsante CANC
….. si rilascia il form………


Conclusioni:

Tutti noi in base alla propria esperienza prendiamo strade diverse per lo sviluppo di applicativi, ovviamente il "bello" della programmazione è la molteplicità di percorsi differenti che ognuno di noi può ideare, per questo motivo non dobbiamo sottovalutare l'importanza della trasmissione di conoscenze che può aiutare ad accrescere il nostro apprendimento.

Grazie per aver letto questo articolo flash sperando che a qualcuno sia stato di aiuto ;-)

 

© Articolo di: Fabrizio Garinetti © Agosto 2002 - Riproduzione vietata

© FoxPro e Visual FoxPro sono un marchi registrati da Microsoft Corporation

 



Data: 28/08/2002
webmaster@foxitaly.com

 

dal 22 Giugno 1999