云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

_mysql数据库表设计_新用户

小七 141 0

字母数字SAP数字范围的诡计甚至对经验丰富的专家来说都是一个惊喜。

您可能已经习惯了维护大多数业务对象的数字范围这项平凡的任务。这种行为很容易理解,因为SAP系统直接将它们视为数字。向混合中添加alpha字符不太常见,结果行为明显不那么直观。

让我们详细了解alpha字符在外部数字范围中的行为、发布的规则以及系统行为背后的一些技术细节,也许是为了在理解了最严格的规则之后打破它们。

作为一个例子,我将使用通常为支持SAP Retail Site Masters的ERP供应商配置的数字范围。用例揭示了有趣的数字范围行为。

在SAP Retail中,站点编号的最佳实践是,4个字符的站点编号、站点业务合作伙伴编号、站点ERP客户编号和站点ERP供应商编号都是相同的编号。因此,通常为站点主控形状的所有相关对象保留4个字符的数字范围。为此,站点ERP供应商可能会定义如下示例所示的外部编号范围:

ERP供应商的示例编号范围。

虽然此编号范围配置可能是常见的,也是必要的,但它可能没有准确的预期结果!在A到ZZZZ的情况下,数字范围不能满足仅保留4个字符的数字的意图。

为了说明系统行为,让我们考虑一个真实的示例:为5个字符的数字添加另一个外部数字范围:

无法创建Z3数字范围。它重叠了。为什么?

无法添加Z3数字范围VN000到VN999,因为它重叠。

要了解原因,让我们先快速查看维护数字范围时可用的F1帮助。

维护数字范围时"从数字"字段的SAP帮助。

严格声明的依赖关系是:"外部间隔只能包含字母或数字数字,公众号返利系统,因为不同平台(代码页)之间的排序可能不同。"

如果我们相信这个警告,那么就不能仅仅因为字母和数字的任何混合都是不可能的,就创建诸如VN000到VN999这样的数字范围,更不用说任何重叠错误了。幸运的是,系统比帮助屏幕建议的灵活一些。

但是在打破任何规则之前,让我们先了解系统如何存储和评估包括字母在内的数字范围。

存储数字

让我们使用供应商编号(LIFNR)来说明存储数字的示例,开始云,包括字母和不包括字母。

数据元素LIFNR定义为10个字符。

数字条目,如1000,存储为10个字符,前导零(这是未转换的值)。

非数字条目,如R120,也存储为10个字符,尾随空格。

系统在维护数字范围的同时计算数字范围条目,在交易中输入时,它会单独评估与数字范围相关的数字(在定义的数字范围内),例如在创建业务伙伴时输入业务伙伴编号。

数字的评估是一种比较。例如,轻云,业务伙伴编号条目是否大于编号范围的起始编号,业务伙伴编号条目是否小于编号范围的结束编号。例如:

这里是比较的代码。

SAP ABAP关键字文档说明,当比较类型是字符型数据类型之一时,内容从左到右进行比较。根据所用代码页中的内部二进制表示法,从左边开始的第一个不同字符决定哪个操作数更大。

例如,数据元素LIFNR定义为10个字符,并从左到右计算所有10个字符,直到确定不同的字符。

意外数字

数字范围a到ZZZZZ的计算结果为"a"(1个字符和9个尾随空格)到"ZZZZ"(4个字符和6个尾随空格)。

数字范围a到ZZZZZ毕竟不是4个字符的数字范围;它不会将条目限制为4个字符!

数字比字母"小"。

这被证明为A到1导致错误:

这也被证明为1到A是有效范围:

只有外部范围允许非数字字符。

这被证明为A到ZZZ内部数字范围导致错误:

字母范围包括数字。

这些数字范围通常为站点维护。

Z1只允许从1到9999的站点供应商数字。但是考虑范围Z2:A到ZZZZ的例子。

由于数字比字母"小",云购全球,范围Z2(A到ZZZZ)实现了以下场景:

必须以字母开头(从数字是A,因此不允许数字作为第一个字符)。第一个字符后面允许数字(To Number是ZZZZ,R123是允许的,因为123比ZZZ小)。

为了说明,我们创建一个供应商:

供应商编号R123是允许的值:

因为数字比字母小,Z2范围(A到ZZZZ)允许数字跟在第一个字符后面。

因为数字比字母"小",所以不可能定义一个跨越多个字符的严格的字母范围(例如2个或更多的字母字符)。

字母范围包括空格。

如果你有一个像Z2范围(A到ZZZZZ)这样的数字范围,您仍然可以使用诸如R123456789之类的数字来创建主数据。

如果您有诸如范围Z2(a到ZZZZ)之类的数字范围,您可能并不打算允许R123456789。但你做到了!

原因很简单,是技术性的:这个间隔(A–ZZZZ)被系统理解为:[A]–[ZZZZ](注意字符后面的空格)。

SAP存储10个字符的数字范围,如果您不使用所有10个字符,则SAP认为存在空格(技术上是正确的),并且可能发生意外情况。

00000 P1000–00000 P9999

P000001000–P000009999