首页 > 解决方案 > 字符串和日期时间错误消息 - 在同一公式字段上使用时

问题描述

我是 CR 的新手,并试图让发票公式有时作为日期阅读,有时作为文本阅读。这取决于客户应该如何付款的“条款代码”:只有 4 个代码,有时它是空白的。

我尝试使用不同的语法

str() or totext 

但我不知道正确的格式。请参阅下面的我的尝试:)

if isnull({PAYTERMS.TERMSCODE}) then {INVOICE.DATE}
else if {PAYTERMS.TERMSCODE}=1 then {INVOICE.DATE}+30 
else if {PAYTERMS.TERMSCODE}=2 then {INVOICE.DATE}+45
else if {PAYTERMS.TERMSCODE}=3 then {INVOICE.DATE}
else if {PAYTERMS.TERMSCODE}=4 then "Upon Receipt"
else {INVOICE.DATE}

它不断返回错误:

此处需要日期

标签: crystal-reportscrystal-reports-2010

解决方案


公式的结果必须是相同的数据类型,不能混合日期和字符串。所以你必须将日期转换为字符串。

str()据我所知,Crystal Reports 中没有-function。我猜你的意思是cstr()。 使用or
并不重要,因为它只是 . 的别名。cstr()totext()totext()cstr()

公式应如下所示:

if isnull({PAYTERMS.TERMSCODE}) then cstr({INVOICE.DATE})
else if {PAYTERMS.TERMSCODE}=1 then cstr({INVOICE.DATE}+30)
else if {PAYTERMS.TERMSCODE}=2 then cstr({INVOICE.DATE}+45)
else if {PAYTERMS.TERMSCODE}=3 then cstr({INVOICE.DATE})
else if {PAYTERMS.TERMSCODE}=4 then "Upon Receipt"
else cstr({INVOICE.DATE})

此外,您可以设置的第二个参数cstr()来定义日期的输出格式:

cstr({INVOICE.DATE}, "MM/dd/yyyy")    // Output will be like "03/26/2019"

推荐阅读