将String转换为N型-标准但非直观!

2020-08-16 20:01发布

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

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


好的,我们知道,如果您有数字类型并尝试为其分配字符串值,则任何非数字都将被忽略。 即

数据长度类型n长度4。
 数据mystring TYPE字符串值'DI01'.mynum = mystring。

mynum现在将包含值0001。

我们还知道,当您在带有键的内部表上使用READ时,提供的值将转换为键的类型。 我有一个内部表(HASHED),键入四个长度的数字字段。 它的记录为0001。我很困惑这段时间

使用表键numckey = mystring将表mytable读入DATA(record)。
具有sy-subrc = 0,并返回了一个record-numckey ='0001'的记录。

您将如何处理?
  1. 将哈希表键改为字符/字符串字段吗?
  2. 检查mystring仅包含数字吗?
  3. 还有什么?

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

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


好的,我们知道,如果您有数字类型并尝试为其分配字符串值,则任何非数字都将被忽略。 即

数据长度类型n长度4。
 数据mystring TYPE字符串值'DI01'.mynum = mystring。

mynum现在将包含值0001。

我们还知道,当您在带有键的内部表上使用READ时,提供的值将转换为键的类型。 我有一个内部表(HASHED),键入四个长度的数字字段。 它的记录为0001。我很困惑这段时间

使用表键numckey = mystring将表mytable读入DATA(record)。
具有sy-subrc = 0,并返回了一个record-numckey ='0001'的记录。

您将如何处理?
  1. 将哈希表键改为字符/字符串字段吗?
  2. 检查mystring仅包含数字吗?
  3. 还有什么?
付费偷看设置
发送
8条回答

如果执行扩展检查(SLIN),将收到类似以下的警告。 不幸的是,仅在扩展检查中...

语法检查警告。
此警告仅在SLIN中显示。分配" NUMCKEY" = ...通常不等同于比较。 最好对c
内部消息代码使用相同的类型:MESSAGE GC6
可通过编译指示## WARN_OK禁用。 消息代码WRN 1305

风早神人
2楼-- · 2020-08-16 20:39

您好Matthew

为什么这些字段之间有区别? 是出于设计还是出于疏忽?

亲切的问候,
Mateusz
compass1988
3楼-- · 2020-08-16 20:41

更像是意见,而不是答案:

  1. 第一部分-呵呵,我 承认我什至不知道它的工作原理是这样的。 而且我个人不会围绕此行为构建任何功能。
  2. 如何处理它-我首先要小心,不要将苹果与橘子进行比较。 我的意思是说READ或转换没有问题,但实际上是如何发生非数字mystring并使用它读取数字键的。。。
空代码
4楼-- · 2020-08-16 20:17

其他人的设计。 从一开始就错了,但是我在这里只工作了15年。 这个决定是20年前做出的!

SAP砖家
5楼-- · 2020-08-16 20:26

我喜欢您的解决方案-(>>已删除-尽管可能会让人感到惊讶,因为blah的类型为N--DELETED <<(根据马修评论)):

 如果是CO | 0123456789 |。 或'0123456789'

您也可以这样做(但我认为这比您的解决方案还差):

 TYPES:ty_n TYPE n LENGTH 4,
         ty开始
           TYPE ty_n键,
         ty of ty,
         tt使用"唯一键"键入哈希表。
 字段符号类型c。
 数据:mykey TYPE ty_n,
       mystring TYPE字符串。

 DATA(mytable)=值tt((key ='0001'))。

 mystring ='DI01'。
 将mykey分配到铸造。
  = mystring。  " <====类型N的mykey将包含无效值'DI01'

 使用表键key = mykey读取表mytable,不传送任何字段。

 确认sy-subrc <> 0。
 
6楼-- · 2020-08-16 20:17

没有类似SE80的集成,

可能的方法(如果无法通过入口进入,则可以通过窗口进行回退)是在Eclipse环境中执行事务SLIN(Ctrl-Shift-A,键入SLIN,选择事务,然后推送测试事务) 按钮,只要您具有这些步骤的所有授权...,您将需要传递报告名称(因此,了解具有SAPL的功能组或具有== CP样式后缀的类的技术报告名称很重要)- -至少对报告名称有帮助。

一周热门 更多>