发生系统错误53_SAP那些事-推理剧-36-奇怪的付款清账(F-53)报错“TABLE_INVALID_INDEX”...

问题描述:

在使用F-53进行供应商付款清账操作时,模拟凭证(包括保存凭证)时出现如下的ABAP Down错误:

e3957256bd17a035194e462a1f8fd943.png

3b151d7d0305db177601726e6be7be1a.png

问题分析:

从报错内容看,我们首先看到报错的程序为SAPMF05A,这个程序财务顾问都熟悉,是财务模块的主程序,大部分的财务过账(如F-02)操作都是调用的这个程序。

另外,就是报错的原因是因为index小于等于0了,这对于数据库来说是不允许的,因为index只能大于0。

关于SAPMF05A这个程序,我们可以使用SE80查看开发对象,截图如下:

28402190cb35cf2b923f45ab1c861535.png

在这里我们也能看到这个程序会被哪些使用代码用到,如下图:

4dbeb964c3e9a1319f235752affaadf4.png

反过来,我们也可以通过SE93或者执行事务代码时来查看对应的程序,比如SE93查看F-02所对应的程序:

b1bbeee4c5e98996ed8bf75a82bf3dd3.png

下图则是通过执行事务代码F-02,对任意一个字段按F1按钮,再点击“技术信息”按钮,从而查看事务代码所使用的程序。

4371b446b37f3d48d1e84bd031f60126.png

接下来,我们通过ST22再进行分析,转到具体的程序代码,如下图操作:

8b301be24c0c74de930714597baf98ac.png

1edc9db69a7465697e8c6ccf938c7c6d.png

这里看到了具体的程序行和程序名。

在这里相应的位置打断点,并继续操作F-53进行debug时,发现是因为内表kontab的索引index变为0导致的错误,而index的值来源于变量i,而变量i则是由ld_tabix-1得到的,ld_tabix来源于系统的索引值sy-tabix。

我们再找sy-tabix为何变为1,这个时候的思路是找一个没有报错的系统对比进行debug,比较在不同的系统里内表kontab的数据是否有不一致的地方。

283e737f516331f6e5b7c8ae8a2f7464.png

d4c1f1a400a2cc633554dab9ead7e9ad.png

第一个图是没有发生错误的系统内表kontab的值,第二个图则是有错误的系统内表kontab的值,再debug发现,对于无错误的系统,在对内表kontab执行loop循环时,因为kontab-shkzg(借贷方)为H,就直接结束了第一次循环,第二次循环时,sy-tabix(系统索引)已经变为了2,再减1变为了1,就不会出现索引为0的情况了。

那接下来就是看kontab的数据来源于哪里了,为什么到了这里字段kontab-shkzg为空了。

通过在主程序中搜索。

c92d0e80705fd2ac941a704948ad6f06.png

我们发现内表kontab是由postab赋值的,如下图:

129f3cc08a5ae3e5df8e7c0974e52aaf.png

5aa66a07a714803aaccbdf39ad9556cb.png

通过上图发现,有一个增强(S4H900878是增强产生的请求号)把字段shkzg的赋值代码给注释掉了。这样终于找到了最终的原因。

然后通过SE01查看请求号S4H900878,发现是在今年2月5号做的一个增强。

总结:最近发现年纪大了,反而更想钻研技术了,说到底,程序还是一堆堆代码组成的,如果我们想用系统解决业务问题,对代码以及底层程序逻辑的理解是不可或缺的,不过这个时候查找程序的速度快了很多,这个过程和刚开始接触系统的时候去看程序有所不同,此时看系统代码会结合业务,更多的去研究系统的设计思路。毕竟不是专业的开发人员,这个过程写出来大家看到没多少时间,实际花费了2个多小时才搞定。标准程序还是尽量少写增强吧,一个是影响面太广,一旦出问题,就是比较大的问题,另外是出现问题也不好排查,基本就是靠debug(或者有比较完备的文档)去发现,然后去调整。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值