2009-07-26 6 views
1

Die folgende Zeile in meinem Crystal Reports Formel gibt den Fehler:Crystal Reports Summation Fehler: "The) fehlt"

NumberVar sales0405 := Sum ({sp_YES_AccountSnapshot;1.ST0405_Ext}, {sp_YES_AccountSnapshot;1.Cust}) + Sum ({sp_YES_AccountSnapshot;1.DR0405_Ext}, {sp_YES_AccountSnapshot;1.Cust}); 

Der Fehler:

"The) is missing" 

Der Bericht wurde unter Verwendung der Kristall Berichte 11.

Der Bericht läuft gut, wenn ich es in Crystal Reports ausführen.

Wenn ich jedoch den Bericht von einer ASP.NET-Webanwendung unter Verwendung von Crystal Reports Basic für Visual Studio .NET 2008 (Aktualisiert Mai 2008) (unter http://resources.businessobjects.com/support/additional_downloads/runtime.asp#09) ausführen, ist dies, wenn ich den Fehler erhalte.

Ich vermute, dass sich die Summe der Summierungen mit den neueren Versionen von Crystal Reports geändert hat, aber ich konnte keine Dokumentation zu diesem speziellen Problem finden.

Ich habe überprüft, dass keine Nullwerte in meinem Testfall eintreffen, die einen Fehler erzeugen.

Die Zeile, die den Fehler erzeugt, ist die erste Zeile der Formel.

Vielen Dank im Voraus für Ihre Zeit

Edit: Hier ist die ganze Formel

*NumberVar sales0405 := Sum ({sp_YES_AccountSnapshot;1.ST0405_Ext}, {sp_YES_AccountSnapshot;1.Cust}) + Sum ({sp_YES_AccountSnapshot;1.DR0405_Ext}, {sp_YES_AccountSnapshot;1.Cust}); NumberVar sales0304 := Sum ({sp_YES_AccountSnapshot;1.ST0304_Ext}, {sp_YES_AccountSnapshot;1.Cust}) + Sum ({sp_YES_AccountSnapshot;1.DR0304_Ext}, {sp_YES_AccountSnapshot;1.Cust}); if sales0304 = 0 then ToText ("Increase in Sales: N/A") else if(sales0405 < sales0304) then ToText ("") else "Increase in Sales: " + Replace (ToText (Int(RoundUp ((((sales0405 - sales0304)/sales0304) * 100)))), ".00", "") + "%"*

Wie sich herausstellt, dann ist es die letzte Zeile, die das Problem verursacht. Irgendeine Idee warum? Ich reparierte es, indem ich die Replace, Int und Roundup Funktionen von ihm beseitigte (einige Klammern im Prozess beseitigend.

Anmerkung: Entschuldigung über die schlechte Formatierung mit diesem Code, konnte ich nicht das Codeumbauzeichen, um nett zu setzen mit dem mehrzeiligen kopieren und Einfügen aus dem Kristall

Antwort

1

Gerade hatte dieses Problem, dieser Beitrag führte mich zu dem Problem, das die Funktion RoundUp() ist.

Die Funktion wurde in Crystal Reports XI eingeführt, in der Sie Ihren Bericht erstellt haben. Wenn Sie eine ältere Clientbibliothek verwenden (eine Software, für die ich geschrieben habe, verwendet Version 9), ist die Funktion nicht vorhanden und der von Ihnen gemeldete Fehler tritt auf.

"The) is missing" 

Ich denke, wenn Sie eine benutzerdefinierte Funktion erstellen RoundUp() zu ersetzen, genannt, was auch immer Sie mögen, _RoundUp() zum Beispiel:

Function (NumberVar num, Optional NumberVar places := 0) (
    -int(-num * (10^places))/(10^places) 
) 

Das funktioniert, weil die int() Funktion effektiv ein floor() ist, und rundet auf die nächste ganze Zahl. Wenn man also das Negativ der ganzen Zahl nimmt, es ausleuchtet und das Negativ entfernt, ergibt sich eine Aufrundungsfunktionalität (Decke über Boden).

Durch Vormultiplikation mit einem Skalierungsfaktor und nach der Division, um die Skalierung umzukehren, kann das Argument places berücksichtigt werden.

2

würde. I:

  1. eine Gruppe im Abschnitt definieren Details für {sp_YES_AccountSnapshot;1.Cust}
  2. Update-Funktion zu ähneln:

    NumberVar sales0405 := SUM({sp_YES_AccountSnapshot;1.ST0405_Ext}) + SUM({sp_YES_AccountSnapshot;1.DR0405_Ext});

  3. Legen Sie die Funktion in der Fußzeile der Gruppe

  4. Unterdrückt der Gruppenkopf

Sie können den Overlay-Abschnitt Unter Option (siehe Abschnitt Expert) verwenden müssen, um zu bekommen, das Layout, das Sie wünschen.

+0

Es ist ungefähr 8 Monate seit meinem letzten Crashkurs in Crystal. Lass mich sehen, ob ich dich richtig verstehe. Der Zweck von Schritt 1 besteht darin, einen Abschnitt von irgendeiner Art für "Cust" (Kunde) zu erstellen. Dann müssen wir die Kunden-ID nicht in die Formel einfügen, da die Formel in der Fußzeile dieser "Kundenabschnitte" verwendet wird. Dann wollen wir nur die Fußzeile anzeigen. Also verstecken wir die Kopfzeile und tun was auch immer nötig ist. Wie nahe bin ich der Realität? Danke & Entschuldigung für die Ignoranz :) –

+0

Sie haben Recht. –

+0

Irgendwelche Gedanken zu meiner Bearbeitung über Rexem? Vielen Dank. –

2

Mehrere return-Anweisungen sind nie eine gute Idee:

NumberVar sales0405 := Sum ({sp_YES_AccountSnapshot;1.ST0405_Ext}, {sp_YES_AccountSnapshot;1.Cust}) + 
         Sum ({sp_YES_AccountSnapshot;1.DR0405_Ext}, {sp_YES_AccountSnapshot;1.Cust}); 

NumberVar sales0304 := Sum ({sp_YES_AccountSnapshot;1.ST0304_Ext}, {sp_YES_AccountSnapshot;1.Cust}) + 
         Sum ({sp_YES_AccountSnapshot;1.DR0304_Ext}, {sp_YES_AccountSnapshot;1.Cust}); 

Stringvar output; 

IF sales0304 = 0 THEN 
    output := ToText ("Increase in Sales: N/A") 
ELSE IF(sales0405 < sales0304) THEN 
    output := ToText ("") 
ELSE 
    output := "Increase in Sales: " + Replace (ToText (Int(RoundUp ((((sales0405 - sales0304)/sales0304) * 100)))), ".00", "") + "%"; 

Ausgang;

Die letzte Zeile, in der die Variable "output" deklariert wird, ist erforderlich, damit Crystal weiß, was gedruckt werden soll. Dies stellt auch sicher, dass der Datentyp immer gleich ist.