水晶报告11:空白领域炸弹报告

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了水晶报告11:空白领域炸弹报告相关的知识,希望对你有一定的参考价值。

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

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

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

当条件语句在报表中呈现为true时,balance字段的行为正确。但是,如果公式在CR表单中呈现FALSE,则整个水晶报告会弹出并显示为空白。任何想法为什么或我做错了什么?


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

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

包含tarinvoice.balance并张贴= 0,报告炸弹。

答案

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

另一答案

您可以更改Crystal处理公式中值的空值的方式。在Formula Workshop的顶部有一个下拉框,通常显示“Nulls Exges”。 将其更改为其他选项“Nulls的默认值”,您的公式不应再爆炸。您曾经能够指定应用的默认值,但更新版本的Crystal具有这些硬编码。在“Null Treatment”的帮助中搜索显示它们的表格。

另一答案

我将公式修改为:

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”。

另一答案

我在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没有运气。 Perhpas也与链表有关,因为我只试过一个简单的单个表。 我在运行总计中使用公式时也看到了类似的行为 - 他们根本不喜欢空值!

另一答案

如果你将{tarInvoice.Balance}直接放在报告上(详见“调试”部分 - 经常需要,不要忘记在生产中压制它:)),它显示的值或报告变为空?

另一答案

也许您在报告中有“禁止空白”部分。试着把:Else“”

另一答案
if isnull({tarPrintInvcHdrWrk.Posted}) or {tarPrintInvcHdrWrk.Posted}=0 then
" "
else
if {tarPrintInvcHdrWrk.Posted} = 1 then 
    ToText({tarInvoice.Balance})
else
" "

在将报告导出到excel时,我遇到了这种问题。没有数据的字段会将其右侧的所有列拉到“填补空白”。

以上是关于水晶报告11:空白领域炸弹报告的主要内容,如果未能解决你的问题,请参考以下文章

水晶报告保留零

缺少水晶报告的最后记录

带有水晶报告的 Windows 窗体应用程序错误

来自数据集的 Vb.Net 水晶报告

如何将水晶报告转换为碧玉报告?

有没有办法将访问报告转换为水晶报告?