2016-03-29 9 views
0

Mit Crystal Reports Version 8 und ich muss eine numbervar in stringvar konvertieren. Ich habe versucht, ToText() (mit allen Variationen der Großschreibung) und CStr() (auch mit verschiedenen Großbuchstaben) und jedes Mal CR sagt mir "Eine Zahl ist hier erforderlich" und bewegt den Cursor an den Anfang meines else Block. Schließlich versuchen, Stunden und Minuten, die beide als NumberVars gespeichert sind, in Strings umzuwandeln, so dass ich "8h 30m" statt 8,50 anzeigen kann.Crystal Reports wandelt die Nummer in Text um

Hier ist, was ich für die Formel so weit:

if {Collect2000Log.LogCode} = "0002" then 0 
else 
(
NumberVar OldTime := ((DateDiff("n",{@NextTime},{Collect2000Log.LogWhen})/60)*-1); 

NumberVar Hours; 
NumberVar Minutes; 
StringVar strHours; 
StringVar strMinutes; 
StringVar NewTime; 
//Extract the number of hours 
Hours := Int(OldTime); 
//Get the decimal portion for minutes 
Minutes := Remainder(OldTime, 1) * 100; 
//Divide the minutes by 60 to increase the number of hours 
Hours := Hours + Int(Minutes/60); 
//Get the remainder for the number of minutes left over 
Minutes := Remainder(Minutes, 60); 
//Convert hours & mins to strings 
strHours := ToText(Hours); 
strMinutes := ToText(Minutes): 
NewTime := strHours & "h " & strMinutes & "m"; 
); 

Und jetzt, wenn ich diese Formel hinzufügen CR sagt: „Das Ende) fehlt“ und ich bin ratlos. Ich konnte das einmal schaffen, aber jetzt sehe ich nicht so hoffnungsvoll aus.

Jede Hilfe wäre sehr willkommen!

Antwort

1

Problem ist einfach ... In einem IF und Else Sie denselben Datentyp zurückgeben müssen, aber Sie werden eine Reihe von IF und einen String durch Else daher den Fehler a Number is required beim Starten des else-Block zurückkehrt .. so konvertieren die Ausgabe von If zu String wie folgt.

if {Collect2000Log.LogCode} = "0002" 
then ToText(0) 
else 
(
NumberVar OldTime := ((DateDiff("n",{@NextTime},{Collect2000Log.LogWhen})/60)*-1); 

NumberVar Hours; 
NumberVar Minutes; 
StringVar strHours; 
StringVar strMinutes; 
StringVar NewTime; 
//Extract the number of hours 
Hours := Int(OldTime); 
//Get the decimal portion for minutes 
Minutes := Remainder(OldTime, 1) * 100; 
//Divide the minutes by 60 to increase the number of hours 
Hours := Hours + Int(Minutes/60); 
//Get the remainder for the number of minutes left over 
Minutes := Remainder(Minutes, 60); 
//Convert hours & mins to strings 
strHours := ToText(Hours); 
strMinutes := ToText(Minutes): 
NewTime := strHours & "h " & strMinutes & "m"; 
); 
+0

Ah, ich dachte, es war etwas Einfaches! Vielen Dank für deine Hilfe! :) –