【问题标题】:Crystal reports 11 : blank field bombs the report水晶报表11:空白字段炸弹报表
【发布时间】:2008-10-14 20:54:57
【问题描述】:

我正在为 sage mas 500 AR 模块创建发票水晶报表。在其中,我尝试使用以下公式添加 tarinvoice.balance 字段:

if {tarPrintInvcHdrWrk.Posted} = 1 then 
    ToText({tarInvoice.Balance})

我假设当{tarPrintInvcHdrWrk.Posted} = 1 条件语句为 FALSE 时,它不会尝试提取发票字段,因为当我从报告中删除公式时,没有它,表单会正确显示。

当条件语句在报表中呈现为真时,余额字段的行为正确。但是,由于公式在 CR 表单中呈现 FALSE,整个水晶报表会爆炸并显示空白。任何想法为什么或我做错了什么?


刚刚尝试将所有内容设置为零,但报告仍然炸弹。我开始认为它更多的是报告中的查询错误。我希望有一种方法可以在发布 = 0 时排除查询中的字段。

当张贴 = 0 时删除 tarinvoice.balance,报告工作正常。
包含tarinvoice.balance 并发布= 1,报告工作正常。

包含tarinvoice.balance 并发布=0,报告炸弹。

【问题讨论】:

    标签: crystal-reports


    【解决方案1】:

    我相信如果遇到 NULL,条件语句会立即失败,因此您的公式需要先测试 IsNull({tarPrintInvcHdrWrk.Posted}),然后再测试与“1”的相等性。

    【讨论】:

      【解决方案2】:

      您可以更改 Crystal 处理公式中值的空值的方式。在公式工作室的顶部有一个下拉框,通常显示“空值例外”。
      将此更改为另一个选项“Nulls 的默认值”,您的公式不应再被炸毁。您过去可以指定应用的默认值,但最新版本的 Crystal 对这些进行了硬编码。 在“Null Treatment”的帮助中搜索显示它们的表格。

      【讨论】:

      • 我尝试将其更改为 Null 的默认值,但报告仍然是炸弹。谢谢你的提示。我可以看到这将如何帮助解决未来的问题。
      【解决方案3】:

      我将公式修改为:

      if isnull({tarPrintInvcHdrWrk.Posted}) = FALSE then 
          if {tarPrintInvcHdrWrk.Posted} = 1 then 
              if isnull({tarInvoice.Balance}) = FALSE then 
                  ToText({tarInvoice.Balance})
              else 
                  "0.00" 
          else 
              "0.0"
      else 
      "0"
      

      水晶报告仍然会爆炸。不过,它确实在适当的空间显示“0”。

      【讨论】:

        【解决方案4】:

        我在 Exp.Exch 上看到了一个建议,尝试在将字段转换为文本之前将其放入变量中。
        例如

        NumberVar InvoiceBalance;  
        If isnull({tarInvoice.Balance}) then
            InvoiceBalance := 0
        Else
            InvoiceBalance := {tarInvoice.Balance};
        
        If {tarPrintInvcHdrWrk.Posted} = 1 then
            ToText(InvoiceBalance);
        
        

        我也尝试过重现您的问题,因为我以前看到过类似的事情。
        尽管尝试使用 CR 8.5 和 XI R2,但运气不佳。也许它也与链接表有关,因为我只尝试了一个简单的单表。
        在 Running Total 中使用公式时,我也看到过类似的行为 - 他们根本不喜欢 null!

        【讨论】:

          【解决方案5】:

          如果您将 {tarInvoice.Balance} 直接放在报告中(进入详细的“调试”部分 - 经常需要,不要忘记在生产中取消它:)),它会显示什么值或报告会变为空?

          【讨论】:

            【解决方案6】:

            也许您的报告中有 Suppress If Blank 部分。尝试输入:Else ""

            【讨论】:

              【解决方案7】:
              if isnull({tarPrintInvcHdrWrk.Posted}) or {tarPrintInvcHdrWrk.Posted}=0 then
              " "
              else
              if {tarPrintInvcHdrWrk.Posted} = 1 then 
                  ToText({tarInvoice.Balance})
              else
              " "
              

              在制作报告以导出到 Excel 时,我遇到了此类字段的问题。没有数据的字段会将其右侧的所有列拉到“填补空白”。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2013-11-18
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多