2009-06-05 23 views
5

Ich habe eine Formel @InitVars im Seitenkopf, die folgende enthält und ähnliche Linien:Crystal Reports, Unterberichte, und gemeinsam genutzte Variablen

shared numbervar runWaste:=0; 

In Einzelheiten v, ich habe einen Unterbericht, die eine Formel @SetRunWaste hat:

shared numbervar runWaste; 
if (OnFirstRecord) then 
(
if not(isnull({x.x-or})) and 
not(isnull({x.y-override})) and {x.y-override} = true then 
runWaste:={x.x-or} 
    else 
runWaste:= {x.x} 
); 
runWaste 

ich die Ausgabe dieser Formel im Unter Bericht sehen kann, ist 18.00 Uhr.

jedoch beide in einem anderen Teil Bericht, in Einzelheiten az, und im Hauptbericht in Einzelheiten w (als Test), ich habe die @Test folgende Formel:

shared numbervar runWaste; 
runWaste; 

An beiden Orten, es zeigt als 0.00.

Warum zeigt es 0 nicht 18?

Ich verwende Crystal Reports Version 11.0.0.895.

Antwort

9

Das Problem ist, dass @InitVars in der Kopfzeile der Seite ist, nicht die Kopfzeile des Berichts. Es setzt die Variable oben auf jeder Seite auf 0 zurück.

Das Verschieben von @InitVars zum Berichtsheader wurde korrigiert, damit die richtige Nummer im Unterbericht in Details az erscheint.

Ich sehe immer noch ein seltsames Verhalten, wenn ich die Variable in den Hauptbericht einfüge, aber da das nur zum Debuggen war, nicht das Hauptziel, ist mir egal.

1

Ich habe eine vage Erinnerung, dass es mir jetzt schwer fällt, über gemeinsame Variablen zu argumentieren, die nicht von einem Unterbericht zurückgegeben werden. Immer noch suchend; Gut, dass es Freitagnachmittag ist.

Bearbeiten: Ich kann nicht finden, was ich suchte, so ein allgemeiner Gedanke. Überprüfen Sie die Auswertungszeit und stellen Sie sicher, dass der spätere Abschnitt im Hauptbericht nach dem Unterbericht ausgewertet wird (WhilePrintingRecords könnte hier Ihr Freund sein).

+0

Hmm, Hinzufügen whileprinting Datensätze zu @test verursacht es in der Seitenfußzeile arbeiten, aber es ist immer noch in Details w falsch. Es ist auch falsch auf späteren Seiten ... – LeBleu

+0

Und du bist sicher, dass es nicht irgendwo irgendwo im Hauptbericht oder in einem der Unterberichte zurückgesetzt wird? – Adrien

0

Aus dem Artikel Adding Sub reports ,Find Sub Total and Grand Total(To main Report):

Crystal Reports ist eine Business-Intelligence-Anwendung zu Design verwendet und Berichte aus einem breiten Spektrum von Datenquellen zu erzeugen. Sub Berichte sind untergeordnete Berichte des Hauptberichts , die in den Hauptbericht eingebettet werden können. Sub-Berichte sind sehr nützlich beim Erstellen von Berichten.

Hinzufügen Sub Berichte finden Sie die Unter insgesamt und Gesamtsumme von jedem Unter Bericht in den Hauptbericht

Hauptbericht

Sub Report 1

Total: Summe (LabTotal)

Unterbericht 2

Zwischensumme: Summe (ItemTotal)

Endsumme

Sub-Berichte sind sehr nützliche Option in Crystal Report. Angenommen, wir wollen

Hinzufügen von Crystal Reports-Bericht

  1. finden New Item-> Crystal Report
  2. Wenn wir wollen, Crystal Report unser eigenes Format wählen Sie „Als Blank Report“ aus dem Kristall Bericht erstellen Galerie
  3. Rechtsklick auf die „Datenbankfelder“ in den Datenbankfelder und wählen Tabellen aus der Datenbank dann machen Verbindungen (falls erforderlich)
  4. Klicken Sie mit der rechten Maustaste auf "Details" und fügen Sie einen Unterbericht hinzu.
  5. Wiederholen Sie die gleichen Dinge, die in den Hauptbericht und ziehen benötigten Felder Details Abschnitt Unter Bericht

Für Eg getan haben: We Arbeitsbericht kann die Gesamtarbeitsgeschwindigkeit berechnet werden schaffen als

Im Feld -name Formel LabTotal

Whileprintingrecords; Shared NumberVar LabTotal: = Summe ({PC_LABOUR_DETAILS.Total})

({PC_LABOUR_DETAILS) - Tabelle Gesamt --- Feld

und fügen Summe von LabTotal in dem Teil Gesamtfeld

Wenn wir einen weiteren Unter Bericht hinzufügen ion der Hauptseite haben, wieder rechts klicken auf „Details Section“ und neue Abschnitt hinzufügen -> Details (b) und wiederholen Sie Schritt 4 und 5 Hier fügen wir zweiten Unter Bericht für die stoffliche und Teilsumme Materialien können -Name ItemTotal

Whileprintingrecords als

Im Feld Formel caculated werden; Shared NumberVar ItemTotal: = Summe {PC_MATERIAL_DETAILS.Insgesamt})

({PC_MATERIAL_DETAILS) --table Gesamt - Feld

und in

Hauptbericht

Um die Gesamtsumme Summe von ItemTotal fügen das Unter Gesamtfeld zu finden beide Teil berichtet

In der Formel Feldname-Grandtotal

WhilePrintingRecords; Shared NumberVar ItemTotal; Shared NumberVar LabTotal; NumberVar TotalAmount; TotalAmount: = ItemTotal + LabTotal; TotalAmount

+0

@ kristina: Bitte kopieren und fügen Sie nicht einfach Inhalte von anderen Seiten ein, ohne dem Originalautor zuzustimmen. Vielen Dank. –