2016-03-29 29 views
0

をテキストに数値を変換し、私はSTRINGVARするnumbervarを変換する必要があります。私はToText()(大文字と小文字のすべてのバリエーション)とCStr()(さまざまな大文字との組み合わせ)を試して、CRが私に "ここに数字が必要です"と言って、カーソルを私のelseブロックの先頭に移動します。最終的に時間と分を両方ともNumberVarsとして文字列に変換しようとすると、8.50の代わりに「8h 30m」を表示できます。Crystal ReportsはCrystal Reportsバージョン8を使用して

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"; 
); 

をそして、私はこの式を追加するときに、今CRは「終わり)が欠落している」と私は困惑してこう述べています。ここでは

は、私がこれまでの式のために持っているものです。私は一度それを回ることができましたが、今はとても期待していません。

任意の助けもいただければ幸いです!

答えて

1

問題はそうで変換..あなたが同じデータ型を返す必要がありますが、他のブロックの開始時に、したがってエラーa Number is requiredElseIFを通じて数と文字列を返しているElseIFで...簡単で、 Ifの出力を以下のような文字列に変換します。

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

ああ、私はそれが簡単なものだった考え出し!手伝ってくれてどうもありがとう! :) –