2009-11-02 16 views
5

Mit Crystal Reports Ich versuche, die laufende Summe eines Datenbankfelds in der Kopfzeile anzuzeigen, wo alle Beschriftungen sind.Crystal Reports: globale Variable laufende Summe wird nicht im Header angezeigt

Ich habe versucht, dies zu tun, indem Sie die laufende Summe Platzierung (RTversion) in einem Formelfeld mit den folgenden:

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

und dann im Seitenkopf-Abschnitt habe ich die folgenden:

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

mit {#CurrentVers} läuft die 1. größte Nummer.

Ist das falsch?

Update: Das Ziel ist es, die neueste Version in der Kopfzeile in der Nähe der Etiketten anzuzeigen, um zu zeigen, was die aktuelle Version zum Vergleich ist.

+2

Meine Vermutung ist, dass Sie versuchen, einen Wert anzuzeigen, bevor es festgelegt wurde. –

+0

sagt die Funktion EvaluateAfter() nicht, dass sie warten soll, bis die laufende Summe #CurrentVers fertig ist? – phill

+0

+1 Gute Frage. Obwohl ich weiß, dass dies eine allgemeine Frage ist, konnte ich sie hier auf SO nicht finden, also wird dies als eine gute Referenz für Leute dienen. – Dusty

Antwort

4

Running-Total Felder funktionieren meiner Erfahrung nach nur in den Fußzeilenabschnitten.

Sie müssen eine manuelle laufende Summe erstellen.

Fügen Sie dem Abschnitt Details ein Formelfeld hinzu, das eine globale Variable mit dem auffüllt, was Sie erfassen möchten. So etwas wie:

//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:=... 

Fügen Sie ein weiteres Formelfeld zum Header-Abschnitt hinzu. Fügen Sie diese beiden Zeilen hinzu:

WhilePrintingRecords; 
Global Stringvar CurrentVers; 
+0

+1 Ich glaube, das sollte funktionieren. – Dusty

+0

Wie machst du eine manuelle laufende Summe, um den Maximalwert der aktuellen Version anzuzeigen? Verwenden Sie die Funktion Maximum() im Detailbereich? Ich habe so viel probiert und es gab mir einen Fehler, der besagt, dass es mit WhileReadingRecords() nicht ausgewertet werden kann. – phill

+0

Ich nahm WhileReadingRecords, legte die currentvers: = ... und die Funktion EvaluateAfter() in der Kopfzeile und es funktionierte. – phill

0

Wenn {#CurrentVers} ein normales laufendes Gesamtfeld ist, sollten Sie es direkt in den Seitenkopf einfügen können, anstatt auf eine zusätzliche Formel zurückzugreifen. Ich sehe hier keinen Bedarf für ein Formelfeld, es sei denn, es gibt etwas ungewöhnliches in der Zusammensetzung von {#CurrentVers} und eine "größte Zahl", die insgesamt läuft, sollte nichts Außergewöhnliches erfordern.

+0

Vielleicht irre ich mich damit, aber ich glaube nicht, dass es einfach ist, die laufende Summe in die Kopfzeile zu setzen, weil der Bericht von oben nach unten gelesen wird. Das ist über meinem Kopf, also könnte ich mich irren. – Dusty

+0

Sie zeigen, aber offensichtlich spiegeln sie nur die Datensätze wider, die bis zu diesem Punkt verarbeitet wurden. Aber die ursprüngliche Frage ist bei weitem nicht klar, was sie erreichen wollen. – MartW

1

ich es herausgefunden ..

ich einen subreport zum Hauptbericht hinzugefügt hatte. Ich habe den Hauptbericht kopiert und ihn als Unterbericht umbenannt. Im Unterbericht habe ich eine gemeinsame Variable hinzugefügt und sie dann an den Hauptbericht übergeben. Der Trick besteht darin, den Unterbericht im selben Gruppenkopf zu platzieren, aber einen separaten Abschnitt über dem Abschnitt, der unterdrückt werden muss. Ich habe tatsächlich die folgenden Abschnitte:

Neuen Abschnitt (gleiche Gruppe-I platziert subreport hier, nicht unterdrücken) New Section (gleiche Gruppe - ich hier Variablenwert geteilt platziert, nicht unterdrücken) Original-Abschnitt (gleiche Gruppe das hat einen Header I basiert auf einer laufenden Summe unterdrückt müssen)

4

eine Formel wie diese

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

und legen sie sie in Gruppenkopfbereich.

0

Sie können dieses Problem lösen mit nur ein Formelfeld:

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

Die WhilePrintingRecords; die Formel zwingen nicht ausgewertet werden, bis alle Datensätze aus der Datenbank gelesen wurden, und daher ist das Formelfeld wird das richtige Ergebnis angezeigt werden auch wenn sie in einer Kopfzeile platziert werden.

0

Der Schlüssel, den ich gefunden habe, ist, dass das Formelfeld, das übergeben wird, auf dem Unterbericht platziert werden muss. Ich legte meine in die Fußzeile und unterdrückte sie dann.