Crystal Reports Error Boolean必需的errorKind

时间:2013-11-14 00:08:23

标签: c# asp.net crystal-reports

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

  

此处需要布尔值。详细信息:文件中的errorKind错误   CPTCharges {FD775771-FD54-40B1-891A-87AFD9539789} .rpt:错误   公式CPTCodes:'if {CPTCodes.Day} =“0”然后'布尔值是   需要在这里。详细信息:errorKind

该报告包含一些公式字段。它具体指的是:

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)尝试使用true / false而不是“0”,“1”等。 (无论如何,这对我的需求都不起作用)
  • 5)确保公式位于“公式字段”文件夹下 公式编辑器

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

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

修改

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

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

另外,为了测试“此处需要布尔”BS,我输入此代码片段并在保存“此处需要字符串”时出错:

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

2 个答案:

答案 0 :(得分: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});

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

答案 1 :(得分: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}的数据类型是什么?