1

私は基本的に次のようなデータベースに取り組んでいます(最も単純な形式で):

{フェーズ}{コード}{数量}

例:

{Phase}="R"および{Code}="Nat"=0の場合は{Qty}

{Phase}="F"および{Code}="Nat"=5の場合は{Qty}

{Phase}="R"および{Code}="Int"=10の場合は{Qty}

{Phase}="F"および{Code}="Int"=15の場合は{Qty}

フェーズ「R」の数量とコード「Nat」(Rは<> 0)を表示する結果を取得しようとしています。それ以外の場合は、フェーズ「F」の数量を取得します。したがって、上記の例では、Natに対して回答= 5(フェーズRの数量が0であるため)、コードがIntである場合(フェーズRの数量が<> 0であるため)10の回答が得られます。

これを行うために、3つの数式フィールドを使用しました。

1:if({PHASE} = "F" and {CODE} = "NAT")then {QTY} else 0

2:if({PHASE} = "R" and {Code} = "NAT")then {QTY} else 0

3:{2} = 0の場合、{1}それ以外の場合{2}

数式フィールド1と2は、正しい金額を算出します。ただし、数式フィールド{3}は両方のフェーズを返します。たとえば、コード「Int」フェーズ「R」は、qty=10ではなくqty=25として表示されます。

これを回避するにはどうすればよいですか?

4

1 に答える 1

0
  1. これは 1 行の計算ではないため、{table.code} でグループ化する必要がありますが、2 つ以上のフェーズ (つまり 2 つ以上のデータ行) の各コードを計算する必要があります。

  2. 各フェーズ F と R の値を格納する 2 つの変数を含む数式を作成します。この数式は、レポートの [詳細] セクションに入力する必要があります。

    whileprintingrecords;
    numbervar Fqty;
    numbervar Rqty;
    
    if {table.phase}="F" then Fqty:={table.qty}
    else Rqty:={table.qty};
  3. これで、グループ フッターで、変数を介して両方の数量値を参照できるようになりました。

    whileprintingrecords;
    numbervar Fqty;
    numbervar Rqty;
    
    if Fqty=0 then Rqty else Fqty

これで完了です。異なるコード間で数量を持ち越さないように、グループ ヘッダーの 2 つの変数をリセットすることを忘れないでください。

于 2013-01-20T19:28:42.303 に答える