相同的数据,相同的选择公式,不同的结果。

2020-08-30 12:18发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我正在运行时动态创建选择公式,并且没有产生任何行。 HasData返回false,rows.count = 0。

使用相同的数据,以及在运行时生成的相同选择公式,可以在主报表预览中获取数据。

Crystal gui(在Visual Studio 2017中使用)与运行时(在Visual Studio 2017中)又如何产生不同的结果?

我在下面列出了选择公式:

lookslike(trim(totext({ReportingCrossTab_v1r01.TransactionTypeCode})),trim(totext('')))

是,选择默认值为null。
是的,我知道我正在与空白字符串值进行比较。 在我要查找的记录中,该字段的值为空白,并且在gui中有效。
是的,我知道应该没有理由将''转换为文本,因为它已经是文本,但是当 它是一个数字值,可以确保使用晶振逻辑转换字段和数字,而无需我深入了解它是什么。 同样,在gui中也可以正常工作。

我已经尝试过几种类似的公式,包括简单的trim(totext({field}))= trim(totext(''))。

每次尝试时,报告预览gui都会生成记录集,而运行时不会生成记录。

奇怪的是,这仅在我测试的字段为null时才出现问题。

运行时是否忽略null的默认值?

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我正在运行时动态创建选择公式,并且没有产生任何行。 HasData返回false,rows.count = 0。

使用相同的数据,以及在运行时生成的相同选择公式,可以在主报表预览中获取数据。

Crystal gui(在Visual Studio 2017中使用)与运行时(在Visual Studio 2017中)又如何产生不同的结果?

我在下面列出了选择公式:

lookslike(trim(totext({ReportingCrossTab_v1r01.TransactionTypeCode})),trim(totext('')))

是,选择默认值为null。
是的,我知道我正在与空白字符串值进行比较。 在我要查找的记录中,该字段的值为空白,并且在gui中有效。
是的,我知道应该没有理由将''转换为文本,因为它已经是文本,但是当 它是一个数字值,可以确保使用晶振逻辑转换字段和数字,而无需我深入了解它是什么。 同样,在gui中也可以正常工作。

我已经尝试过几种类似的公式,包括简单的trim(totext({field}))= trim(totext(''))。

每次尝试时,报告预览gui都会生成记录集,而运行时不会生成记录。

奇怪的是,这仅在我测试的字段为null时才出现问题。

运行时是否忽略null的默认值?

付费偷看设置
发送
5条回答
空代码
1楼 · 2020-08-30 12:46.采纳回答

由于要在运行时创建选择公式,因此很可能是运行时忽略了null设置的默认值。 最好的测试方法是在公式中添加空值处理。 诀窍在于,在测试其他任何内容之前,必须先测试null。 因此,您的公式可能看起来像这样:

(IsNull(ReportingCrossTab_v1r01.TransactionTypeCode)或
 看起来像(trim(totext({ReportingCrossTab_v1r01.TransactionTypeCode})),trim(totext(''))))

如果在运行时使用此公式时出现数据,那么您已经确定了 问题是。 如果未出现,则说明还有其他情况。

-Dell

闻人可可
2楼-- · 2020-08-30 12:49

我还应该提到我正在使用版本13.0.25(CRforVS_13_0_25.exe)

小熊yu生菜
3楼-- · 2020-08-30 12:44

好,

虽然我仍然觉得运行时很像,并且gui绝不能使用相同的数据和选择公式产生不同的结果,但是由于戴尔,我已经找到了适合我的情况的解决方法。

由于我是通过代码执行此操作的,因此我可以读取测试值,并且当它为空字符串时,我可以简单地将公式调整为读取

isnull({ReportingCrossTab_v1r01.TransactionTypeCode})或trim(totext({ReportingCrossTab_v1r01.TransactionTypeCode}))=''

由于我希望每个测试值提供不同的报告,因此这对我来说很好。 它还使我可以返回非空值的简单相等性,而不是使用looklikelike(,)进行模式匹配。

尽管如此,我仍然对通过运行时为选择公式设置或验证"空值默认值"感到好奇。

SAP浪
4楼-- · 2020-08-30 12:47

Dell,

谢谢您的回答...但是我觉得我应该再详细一点。 我在运行时将附加到报表中的选择公式。在选择公式中已经检查了null的默认值。 有没有办法检查是否通过sdk设置了" null的默认值"?

我需要遍历值列表(是的,包括null/nullstring),并为每个值生成报告的单独副本,其中仅包含字段与我正在测试的值匹配的那些记录。 在您建议的公式中,无论测试值如何,都将包含空记录,而这不是我所需要的。

但是我会尝试并报告。 谢谢!

暮风yp
5楼-- · 2020-08-30 12:46

VS内置的嵌入式报表设计器是非常古老的技术,不应用于验证报表。

运行时将是正确的。...

在CR Designer中一直要求检查空值。

一周热门 更多>