2009-11-02 28 views
5

Utilizzo di Crystal Reports Sto tentando di visualizzare il totale parziale di un campo del database nell'intestazione in cui si trovano tutte le etichette.Crystal Reports: totale variabile globale che non viene visualizzato nell'intestazione

ho tentato di farlo mettendo il totale di esecuzione (RTversion) in un campo di formula con il seguente:

Shared stringvar CurrentVers; 
CurrentVers := {#CurrentVers}; 

e quindi nella sezione di intestazione di pagina Ho il seguente:

Shared stringvar CurrentVers; 
EvaluateAFter({#currentVers}); 
CurrentVers; 

con {#CurrentVers} che esegue il primo numero maggiore.

Non è corretto?

Aggiornamento: l'obiettivo è visualizzare l'ultima versione nell'intestazione vicino alle etichette per mostrare quale sia la versione corrente per il confronto.

+2

Suppongo che si stia tentando di visualizzare un valore prima che sia stato impostato. –

+0

non la funzione EvaluateAfter() dice di attendere fino al completamento del totale #CurrentVers? – phill

+0

+1 buona domanda. Anche se so che questa è una domanda comune, non sono stata in grado di trovarla qui su SO, quindi questo servirà da buon riferimento per le persone. – Dusty

risposta

4

Running-Total Fields, nella mia esperienza, funziona solo nelle sezioni footer.

È necessario creare un totale parziale manuale.

Aggiungi un campo formula alla sezione Dettagli che popola una variabile Globale con qualsiasi cosa tu stia cercando di acquisire. Qualcosa del tipo:

//use WhileReadingRecords if the values can be gathered as the report pulls in values from the database. Otherwise, use WhilePrintingRecords. 
WhileReadingRecords; 
Global Stringvar CurrentVers; 
//logic here to capture what you want 
CurrentVers:=... 

Aggiungi un altro campo formula alla sezione Intestazione. Aggiungere queste due righe ad esso:

WhilePrintingRecords; 
Global Stringvar CurrentVers; 
+0

+1 Credo che questo dovrebbe funzionare. – Dusty

+0

Come si esegue un totale parziale manuale per visualizzare il valore massimo della versione corrente? Utilizzi la funzione Maximum() nella sezione dettagli? Ho provato tanto e mi ha dato un errore dicendo che non può valutare con WhileReadingRecords(). – phill

+0

Ho estratto WhileReadingRecords, impostato i currentvers: = ... e ho utilizzato la funzione EvaluateAfter() nell'intestazione e ha funzionato. – phill

0

Se {#CurrentVers} è un campo totale parziale corrente, dovresti essere in grado di inserirlo direttamente nell'intestazione della pagina anziché ricorrere a una formula aggiuntiva. Non vedo la necessità di entrambi i campi formula qui, a meno che non ci sia qualcosa di insolito nella composizione di {#CurrentVers} e un totale parziale del 'numero più grande' non dovrebbe richiedere nulla fuori dall'ordinario.

+0

Forse ho sbagliato su questo, ma non penso che il solo posizionamento totale nell'intestazione funzionerà a causa di come il report si legge dall'alto in basso. Questo è fuori di testa, quindi potrei sbagliarmi. – Dusty

+0

Vengono visualizzati, ma ovviamente riflettono solo i record elaborati fino a quel momento. Ma la domanda originale non è chiara su ciò che stanno cercando di realizzare. – MartW

1

ho capito ..

ho dovuto aggiungere un sottoreport al report principale. Ho copiato il rapporto principale e lo ho rinominato come sottoreport. Nel sottoreport, ho aggiunto una variabile condivisa e poi l'ho passata al report principale. Il trucco consiste nel posizionare il sottoreport nella stessa intestazione di gruppo, ma in una sezione separata sopra la sezione che deve essere soppressa. Io in realtà aggiunti i seguenti punti:

Nuova sezione (stesso gruppo-ho messo sottoreport qui; non sopprimere) nuova sezione (stesso gruppo - ho messo condiviso valore della variabile qui; non sopprimere) sezione originale (lo stesso gruppo che ha un colpo di testa che ho bisogno soppresso sulla base di un totale parziale)

4

creare una formula come questo

formula = Count ({Field to count},{GroupFieldName}) 

e posizionarlo nella sezione di intestazione di gruppo.

0

È possibile risolvere questo con un solo campo di formula:

WhilePrintingRecords; 
// Enter logic here e.g. 
// maximum({mytable.myfield}); 

Il WhilePrintingRecords; forze la formula di non essere valutato fino a che tutti i record sono stati letti dal database, e quindi il campo formula mostrerà il risultato corretto anche se collocato in un'intestazione.

0

La chiave che ho trovato è che il campo formula passato deve essere inserito nel sottoreport. Ho messo il mio nel footer e poi l'ho soppresso.