2009-07-26 2 views
1

次の行がエラーを与えている「)が欠落している」:クリスタルは加算エラーを報告:私のクリスタルレポートの式で

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

エラー:

"The) is missing" 

レポートがCrystalを使用して作成されましたレポート11.

Crystal Reports内でレポートを実行すると、レポートが正常に実行されます。

ただし、Visual Studio .NET 2008(2008年5月更新)(http://resources.businessobjects.com/support/additional_downloads/runtime.asp#09で提供)のCrystal Reports Basicを使用して、ASP.NET Webアプリケーションからレポートを実行すると、エラーが発生します。

新しいバージョンのCrystal Reportsで集計に変更がありますが、この特定の問題に関するドキュメントは見つかりませんでした。

エラーが発生するテストケースにnull値が入っていないことを確認しました。

エラーを生成している行は、数式の最初の行です。お時間を事前に

おかげ

編集:ここでは全体の式は、結局のところ、それが問題を引き起こしている最後の行だ

*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", "") + "%"*

です。アイデアはなぜですか?

注:コードのフォーマットが悪いことを申し訳ありませんが、niceに配置するコードタグを取得できませんでした。 。結晶から複数行のコピーペーストで

答えて

1

ちょうどこの問題を抱えていたこのポストは、私が問題に私を導いた。

この機能は、レポートを作成したCrystal Reports XIで導入されました。古いクライアントライブラリ(バージョン9を使用しているソフトウェア)を使用している場合、関数は存在しません報告したエラーが発生します。

あなたが RoundUp()を置き換えるためにカスタム関数を作成する場合、私は例えば _RoundUp()、何が好きと呼ばれる、と考える
"The) is missing" 

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

これはint()機能が効果的にfloor()あるので動作し、ダウンへの丸め最も近い整数。したがって、整数の負数を取り、それをフローリングし、その負数を取り除くと、丸め機能(床を介した天井)になります。

スケーリングファクタによる事前乗算とスケーリングを逆行させるための事後分割により、places引数を提供することができます。

2

私はなります

  1. は似ているように機能を更新{sp_YES_AccountSnapshot;1.Cust}
  2. の詳細セクションのグループを定義します。

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

  3. 置きグループ

  4. のフッターに機能を取得する(セクションエキスパートを参照してください)あなたはオプションの下にオーバーレイセクションを使用する必要がありますグループヘッダー

を抑制しますあなたが望むレイアウト。

+0

クリスタルの最後のクラッシュコースから約8ヶ月です。私があなたを正しく理解しているかどうかを見てみましょう。ステップ1の目的は、「Cust」(顧客)ごとにある種のセクションを作成することです。この数式は、これらの「顧客セクション」のフッター内で利用されるため、式に顧客識別子を入れる必要はありません。そして、私たちが表示したいのはフッターなので、ヘッダーを隠して、必要なものは何でもします。どのように私は現実に近いですか?感謝と無知のために申し訳ありません:) –

+0

あなたは正しいです。 –

+0

私の上記のrexemの編集に関する考えはありますか?ありがとう。 –

2

複数のreturn文は、良いアイデアことはありません:

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", "") + "%"; 

出力。

"output"変数を宣言する最後の行は、Crystalが何を印刷するかを知るために必要です。これにより、データ型も常に同じになります。

関連する問題