別の技術者が投稿した解決策を見つけました:
新しい式:
{Product.Size} <> “xsm” or IsNull({Product.Size})
残念ながら、レポートをプレビューすると、これが機能しないことがわかります。これはロジックの誤りによるものではなく、Crystal Reports のバグと思われるものです。これとまったく同じ条件を使用して、クエリ アナライザーまたはクエリ ツールを使用してデータベース レコードに適用すると、空白のレコードが表示されます。残念ながら、Crystal は null 値の通過を許可していませんが、式ではそうすべきだと言っています。
このバグを回避する秘訣は、IsNull() チェックを最初に数式に入れることです。
したがって、条件を次のように並べ替えると、次のようになります。
IsNull({Product.Size}) or {Product.Size} <> "xsm"
魔法のように働いた
問題は、2 番目の OR ステートメントに基準を選択({HiredRate.UTRANSDOC}startswith{?TransYN})
し、最初のステートメントに NOを選択する({HiredRate.UTRANSWEB}startswith{?WebYN})
と、TransYN 基準を満たすレコードが 1 つしか得られないことです。1 番目の数式の場所を入れ替えると、({HiredRate.UTRANSDOC}startswith{?TransYN})
すべてのデータが得られます。
SQL クエリを実行すると、データの順序に関係なくすべてのデータが取得されます。Crystal Preview では、OR セクションの最初のデータのみが表示されます。
SQL からのデータを見て際立っているのは、Crystal が返す 1 つのレコードの Transdoc フィールドが YES で、Transweb フィールドが空白であることだけです。他のすべてのレコードは、Transdoc フィールドに対して YES を示し、Transweb フィールドに対して NULL を示します。
これがCrystal Recordの選択式です
{HiredRate.CONTSUPREF} startswith {?LanguageCombo}
and {HiredRate.ONDATE} = {?ProjectDate}
and {HiredRate.ACTVCODE}= "SIG"
and {HiredRate.RESULTCODE} = "CLM"
and (
{HiredRate.UTRANSWEB}startswith{?WebYN}
or {HiredRate.UTRANSDOC}startswith{?TransYN}
or {HiredRate.UTRANLANL0}startswith{?LanloYN}
or {HiredRate.UINTCONSEC}startswith{?InterpYN}
or {HiredRate.UINTCONF}startswith{?IntConfYN}
or {HiredRate.UINTOPI}startswith{?OPIYN}
)
Crystal が使用している SQL クエリは次のとおりです。
SELECT HiredRate.DEAR, HiredRate.CONTSUPREF, HiredRate.LASTDATE, HiredRate.CONTACT, HiredRate.USOURCLANG, HiredRate.UTARGLANG, HiredRate.UTRANSDOC, HiredRate.UTRANSWEB, HiredRate.UTRANLANL0, HiredRate.UINTCONSEC, HiredRate.UINTCONF, HiredRate.UINTOPI, HiredRate.ONDATE, HiredRate.ACTVCODE, HiredRate.RESULTCODE
FROM GoldMine_Main.dbo.HiredRate HiredRate
WHERE HiredRate.CONTSUPREF LIKE 'ENG>SPA%' AND (HiredRate.ONDATE>={ts '2012-04-01 00:00:00'} AND HiredRate.ONDATE<{ts '2013-04-06 00:00:00'}) AND HiredRate.ACTVCODE='SIG' AND HiredRate.RESULTCODE='CLM' AND (HiredRate.UTRANSWEB LIKE 'NO%' OR HiredRate.UTRANSDOC LIKE 'YES%' OR HiredRate.UTRANLANL0 LIKE 'NO%' OR HiredRate.UINTCONSEC LIKE 'NO%' OR HiredRate.UINTCONF LIKE 'NO%' OR HiredRate.UINTOPI LIKE 'NO%')
ORDER BY HiredRate.DEAR, HiredRate.CONTACT