質問

フォーミュラフィールドを備えたクロススタブがあります。クエリは次のようなものを返します

 CategoryID   Company       MarketValue   PaymentMode
  1            ABC             1000         H
  1            xyz             2000         H
  3            efg             9800         H

支払いモードは「H」によって半年示されています。

WhileReadingRecords;
numberVar mode;  
         if({PaymentMode}='H') then mode:=2 else mode:=12

次に、別の式フィールドを作成しました

WhileReadingRecords;
numberVar mode;
numberVar result:={MarketValue}/mod;
result

ただし、ゼロエラーでディビジョンを返します。支払いモードの式が適切に評価されないのはなぜですか。レポートヘッドとクロスタブは2番目のヘッダーに支払いモードの式を配置しようとしましたが、それでも同じエラーをスローしました。

役に立ちましたか?

解決

2つの問題。

最初の構文エラー - またはむしろここでタイプミス、最後の「E」は欠落しています:)

numberVar result:={MarketValue}/mode;

2番目 - 指定された順序で定型を評価する必要があります。最初のフォーミュラに「calc_mode」という名前があるとし、次のステートメントから始める必要があります。

EvaluateAfter({@calc_mode});

他のヒント

Arvoの答えをすでに見つけてよかったですが、コードを簡素化するための提案がいくつかあります。

  1. モード Buit-in Crystal関数です(Crystalのヘルプファイルを参照)。そのため、その単語をカスタム変数の名前として使用しているのを見たとき、私の脳は逆流をしました。代わりに「numpayperiods」と呼んでみませんか?

  2. サンプルフォーミュラにはフィールド値が含まれているため、クリスタル実装 レコードがあります デフォルトでは(繰り返しますが、Crystalのヘルプファイルを参照してください)。この場合、追加することは冗長です。あなたはそれを完全に取り出すことができます。

  3. 例には2つの個別の式は必要ありません。また、あなた 結果 Crystal Syntaxでは、変数は不要です。すべてを1式の式だけに簡素化できます。

    if({PaymentMode}='H') then
    {MarketValue}/2
    else
    {MarketValue}/12;

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top