0

私の最初の質問に似ています。次のようなフィールドを含むテキスト ボックスに住所を表示したい

{Company}
{AddLine1}
{AddLine2}
{ZIP}{State}{City} 
{Country}

私 (そしてできれば皆さんの何人か) が気になる行は {ZIP} {City} {State} です。私が作成したいのは、DB で ZIP、City、または State フィールドが空白のままになっていても、空白やインデントがないように、一貫したアドレス形式です。この行は残りの行と整列し、インデントされないようにする必要があります。また、郵便番号、都道府県、市区町村の間に関連するコンマを挿入し、そうでない場合は省略したいと考えています。このために、私は式を書きました。下:

If isnull({BILL_TO.ZIP}) or trim({BILL_TO.ZIP})= "" Then "" else {BILL_TO.ZIP}
+
(If isnull({BILL_TO.State}) or trim({BILL_TO.State})= "" Then ""
    else(If not isnull({BILL_TO.ZIP}) and length(trim({BILL_TO.ZIP})) <> 0 Then ", "        else "") + {BILL_TO.State})
+
(If isnull({BILL_TO.CITY}) or length(trim({BILL_TO.CITY})) = 0 Then ""
    else(

            If (not isnull({BILL_TO.State}) and length(trim({BILL_TO.State})) <> 0) 
                or
                (not isnull({BILL_TO.Zip}) and length(trim({BILL_TO.Zip})) <> 0)

            Then ", " else "")+ {BILL_TO.CITY}))

問題は、都市しかない場合 (都道府県や郵便番号が入力されていない場合)、式自体が表示されないことです。ただし、他が存在する場合は表示されます。

誰でもこのコードにバグが見られますか??? それは私を殺している

助けてくれてありがとう。

皆さんからの連絡を楽しみにしています!

4

2 に答える 2

1

その式では非常に多くの if-then-else が行われているため、わかりにくいですが、何も表示されていない場合は、最初に null 条件を処理せずにどこかでフィールドを使用していることを意味します。もっと単純なものが最善の策かもしれません:

local stringvar output;
if not(isnull({Customer.Postal Code})) then output:=trim({Customer.Postal Code}) + ', ';
if not(isnull({Customer.Region})) then output:=output + trim({Customer.Region}) + ', ';
if not(isnull({Customer.City})) then output:=output + trim({Customer.City}) + ', ';

left(output,length(output)-2)
于 2012-08-23T16:03:00.810 に答える
0

データベースフィールドごとに数式フィールドを作成します。例えば:

// {@CITY}
If Isnull({BILL_TO.CITY}) Then
  ""
Else 
  Trim({BILL_TO.CITY})

// {@STATE}
If Isnull({BILL_TO.STATE}) Then
  Space(2)
Else
  Trim({BILL_TO.STATE})

// {@ZIP}
If Isnull({BILL_TO.ZIP}) Then
  Space(5)  //adjust to meet your needs
Else
  Trim({BILL_TO.ZIP})

各数式フィールドをテキストオブジェクトに埋め込みます。

必要に応じて、テキストオブジェクトとそのフィールドをフォーマットします。

** 編集 **

データ品質の問題があります。STATE式とZIP式で対処してください(一定の長さになるため)。カンマとテキストオブジェクトの間隔を追加します。

于 2012-08-23T16:18:33.620 に答える