1

我一直在为我们的一家诊所编写一些 Crystal Reports,但由于某种原因,我和我们的其他 IT 团队成员都不理解为什么会发生此错误。所以首先这里是特别给出的错误:

这里需要一个布尔值。详细信息:文件 CPTCharges {FD775771-FD54-40B1-891A-87AFD9539789}.rpt 中的 errorKind 错误:公式 CPTCodes 中的错误:'if {CPTCodes.Day} = "0" Then ' 此处需要布尔值。详细信息:错误种类

该报告有几个公式字段。它具体指的是:

if {CPTCodes.Day} = "0" Then
    if {CPTCodes.D0} = "1" Then
        {CPTCodes.CPTID} 
    else ""
else if {CPTCodes.Day} = "3" Then
    if {CPTCodes.D3} = "1" Then
        {CPTCodes.CPTID} 
    else ""
else if {CPTCodes.Day} = "4" Then
    if {CPTCodes.D4} = "1" Then
        {CPTCodes.CPTID} 
    else ""
else if {CPTCodes.Day} = "5" Then
    if {CPTCodes.D5} = "1" Then
        {CPTCodes.CPTID} 
    else ""
else if {CPTCodes.Day} = "6" Then
    if {CPTCodes.D6} = "1" Then
        {CPTCodes.CPTID} 
    else ""
else if {CPTCodes.Day} = "FET" Then
    if {CPTCodes.FET} = "1" Then
        {CPTCodes.CPTID} 
    else "";

{CPTCodes.Day} 返回 0,3,4,5,6,FET。每个对应的 {CPTCodes.?} 将是 1 或 0。{CPTCodes.CPTID} 是数据库中给出的代码,对应于我们正在收费的过程。

所有这些信息都是从上一页正确发送的。最初我尝试做一个简单的开关,但由于那不起作用,我尝试了嵌套的 if 语句。这似乎不起作用。我尝试过的事情,我在网上看到了没有用的答案:

  • 1)检查数据集的返回类型以防有差异
  • 2) 同时使用 switch 和常规嵌套 if 语句
  • 3) 擦写公式
  • 4)尝试使用真/假而不是“0”,“1”等。(无论如何这对我的需要不起作用)
  • 5)确保公式在公式编辑器的“公式字段”文件夹下

我们发现的唯一另一件事是,也许我们的解决方案没有以正确的位格式编译(当然不是真正的解决方案……它直接在服务器上运行,而不是作为我可以从中推送更新的解决方案……不是我的选择!)。所以当我去检查配置时,我看到的只是“anyCPU”。我没有看到 x86 或 x64 的选项。

我完全不知道为什么这些不起作用!我最后的手段是使用我真的不想做的 HTML 创建一个 word 文档。如果我遗漏了任何可能有助于弄清楚发生了什么的信息,请告诉我。任何帮助是极大的赞赏!!谢谢!

编辑:

新代码,尝试使用这段代码来查看是否会发生任何事情,或者我是否会得到相同的错误。我得到了同样的错误。下面是代码:

if {CPTCodes.Day} = "0" AND {CPTCodes.D0} = "1" Then {CPTCodes.CPTID} Else ""

另外为了测试“这里需要的布尔值”BS,我输入了这个代码片段,并在保存“这里需要一个字符串”时出现错误:

if {CPTCodes.Day} = true then "true" else "false";
4

2 回答 2

2

所以我尝试了你建议的 if 语句,并使用 cStr 来看看我得到了什么。那行得通……这是我必须使用的:

if cStr({CPTCodes.Day}) = "D0" AND cStr({CPTCodes.D0}) = "True" Then cStr({CPTCodes.CPTID}) Else
if cStr({CPTCodes.Day}) = "D3" AND cStr({CPTCodes.D3}) = "True" Then cStr({CPTCodes.CPTID}) Else
if cStr({CPTCodes.Day}) = "D4" AND cStr({CPTCodes.D4}) = "True" Then cStr({CPTCodes.CPTID}) Else
if cStr({CPTCodes.Day}) = "D5" AND cStr({CPTCodes.D5}) = "True" Then cStr({CPTCodes.CPTID}) Else
if cStr({CPTCodes.Day}) = "D6" AND cStr({CPTCodes.D6}) = "True" Then cStr({CPTCodes.CPTID}) Else
if cStr({CPTCodes.Day}) = "FET" AND cStr({CPTCodes.FET}) = "True" Then cStr({CPTCodes.CPTID});

这是一个奇怪的解决方法,但仍然有效。谢谢!!

于 2013-11-19T01:05:26.290 回答
0

IF 表达式的基本格式是...

if expr_1 then (do_1;do_2) else (do_3;do_4)

对于嵌套的 IF,使用 ...

if expr_1 then (do_1;do_2) 
else if expr_2 then (do_3;do_4)
else (do_5;do_6}

或者...

if expr_1 then 
     (do_1;
      do_2) 
else (do_3;
      if expr_2 then 
         (do_4;
          do_5)
      else
         (do_6;
          do_7)
     )

你也可以试试:

if {CPTCodes.Day} = "0" AND {CPTCodes.D0} = "1" Then
{CPTCodes.CPTID} 
else ""

就布尔错误而言,{CPTCodes.Day} 的数据类型是什么?

于 2013-11-14T00:21:58.297 回答