ABAP那些坑

本文讲述了作者在处理SAP系统中工单关联问题时遇到的两个ABAP编程陷阱:一是逗号声明类型导致的意外赋值,二是select语句在查询空值时不执行into。通过实例和经验分享,提醒开发者注意这些细节,强调了平时练习的重要性。
摘要由CSDN通过智能技术生成

每个做过ABAP开发的人的都会被ABAP“奇特”的语法坑个一两次。这次作者在日常工作中,遇到了两个小坑,记录下来,方便同行借鉴。

背景:作者所在公司的SAP系统,工单有关联关系,比如说有A,B,C三张工单,A可以关联到B,B可以关联到C,但是生产线始终有A工单进行生产,B,C工单仅用于统计报工,不会下发到MES系统。又因为实施了自动报工,所以MES的已完成产品数量会往SAP中上报,如果A工单已月结,则需要找到B工单,如果B工单已经月结,则需要找到C工单进行报工,以此类推。

以下是作者踩过的坑:

1.声明参考类型时用的逗号

按照业务背景,作者利用while循环写了如下一段代码,根据MES上传的工单,找到最后一张被关联的工单。

作者本意是声明两个变量l_rpl_aufnr,l_rpl_aufnr_f,而这两个变量都是参考afko-aufnr这个类型的。

写完之后,自信回头,传到生产机。结果就悲剧死循环了。

没错,这段代码,错就错在这一行  DATA: l_rpl_aufnr,l_rpl_aufnr_f LIKE afko-aufnr.

ABAP认为,作者是声明了两个变量,但是l_rpl_aufnr的类型是C(1),而l_rpl_aufnr_f的类型是afko-aufnr,由于工单是0开头的12位字符串,这里into甚至不会报错,直接给工单里的第一个字符0到l_rpl_aufnr,直接导致死循环。

2.select语句查到空值时的into

还是以上述代码为例,ABAP语法中,当select找不到值的时候,into不会生效。(由于作者目前写C#比较多,下意识认为,找不到值的,select语句会找个一个NULL值或者空值,给到l_rpl_aufnr,所以绝对不会死循环。结果ABAP就是这么坑。

最后,给大家看下改善之后的代码。

当然,有的小伙伴说,作者其实可以用sy-subrc判断select语句有无查询成功。但是,作者因为很久没写ABAP和身处于死循环直接影响生产的情况下,一下子没想起来可以使用这个参数判断。于是用了很蠢的一个选择结构,当l_rpl_aufnr=l_rpl_aufnr_f时,进行了跳出循环。

工作过程中,如果早有准备则不会像作者如此慌乱,而早有准备的前提是,平常不疏于练习。吃过此亏,谨以为记。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值