【业务案例】F.13——SAP系统标准的清帐程序有BUG?

肯定是没有BUG的啦,是我又当标题党了

问题来源于,用户气势汹汹地跑来质问,为什么测试运行F.13的时候也没有报错全部都能成功,但是正式运行清帐功能的时候就少了好多数据,一点规律都没有!SAP系统有BUG!!

嗯,那就让我们来看看"BUG"~

目录

业务名称:

背景说明:

解决方案:

第一个方案:

第二个方案:


业务名称:

会计凭证增强

背景说明:

用户反馈在使用F.13进行自动清帐的时候,总有一部分凭证不能清掉。并且测试运行的时候也不会报错,但是一旦正式运行就会遗漏很多凭证,不能一次性全部清完。

和业务顾问进行问题复刻的时候发现系统在正式运行的时候有报错(如下截图),用户看不懂就直接忽略了,认为是被系统遗漏了。但确实这个报错需要分析原因,是由于两张凭证上面带的贸易伙伴不同导致的,而且同一张凭证下,只要有一对凭证的行项目的贸易伙伴不相同,就会导致所有行项目都清帐失败。

解决方案:

解决方案有两个:

第一个方案:

是对于已经生成的凭证,这些凭证因为账期已经关闭了,所以不能冲销重做,所以是一个临时方案,即手动打断点进行数据更改,然后跳过报错,直接清账,这种方案其实会导致同一凭证的不同行项目全部都清账生成到同一个凭证里面,但是由于业务没有要求太多,只要保证能够清账就可以了,所以可行,具体步骤如下:

1、根据报错消息编号和消息名称,找到报错的位置

这里消息名称是F5,编号是080,使用SE91进入

2、从使用位置查询源代码

3、源代码截图如下,打上断点

可以看到报错是在一个IF...ENDIF里面的,只要在调用函数ASSOCIATED_COMP_COMPARE后,系统变量SY-SUBRC=1就会报错,在DEBUG的时候可以清楚看到这里BSEG-VBUND是有值的话就会报错,所以我们在CALL FUNCTION的时候打上断点,手动修改BSEG-VBUND的值,使其为空就可以了。

这个方法就会使同一凭证编号下不同行项目的凭证都会清到同一个清账凭证下面。也可以直接将SY-SUBRC改成0,只要跳过报错就行。

第二个方案:

第二个是长久方案,就是做会计凭证增强/替代,把VBUND贸易伙伴字段替换成空值。最开始是在OBBH里面做替代,但是由于拆分凭证的原因(或者其他原因,emm原因暂时还没有找到,因为我找了其它的增强地方,也没有看到字段被覆盖),总之就是替代没有成功,所以考虑做增强。

1、逻辑如下:

2、使用BADI名称:AC_DOCUMENT,做增强实施

按照平时的增强实施步骤来做就可以了,我这里因为之前同事做了增强,所以找到名称就直接进去修改就可以了。

因为VBUND贸易伙伴是凭证行项目的字段,对于行项目,一般是在方法CHANGE_AFTER_CHECK里面做修改。CHANGE_INITIAL是初始化的方法,我一般没有使用。

3、进入方法CHANGE_AFTER_CHECK,看到方法上面的参数,IM_DOCUMENT表示进入增强前的数据,EX-DOCUMENT表示做了增强之后出去的数据,所以我们要将EX_DOCUMENT里面的VBUND的值做替代。

这里有一个注意点就是,IM_DOCUMENT参考的是ACC_DOCUMENT结构,EX_DOCUMENT参考的是ACC_DOCUMENT_SUBST结构,两个结构不同,我们点进去看一下。

可以看到上面截图种IM_DOCUMENT-ITEM里面有字段VBUND(点进去就可以看见)

4、EX_DOCUMENT的ITEM里面没有VBUND字段,所以要在结构ACCIT_SUB里面加上字段VBUND,再激活,如下

ACCIT_SUB这个结构可以直接加字段,激活也很快(如果需要替代的字段在结构里面本身就有,那就直接使用,不需要再加了)。

5、结构激活后,再返回增强点,加上代码。

要记得APPEND行到EX_DOCUMENT里面即可。

代码如下:

复制代码
*IF SY-TCODE = 'MIRO' OR  IM_DOCUMENT-HEADER-TCODE EQ 'MIRO' .
      DATA:LS_ACCIT_T TYPE ACCIT.
      DATA:LS_ACCIT   TYPE ACCIT.
      DATA:LS_ACCIT_SUB TYPE ACCIT_SUB.
      LOOP AT IM_DOCUMENT-ITEM INTO LS_ACCIT.
IF ( LS_ACCIT-BLART = 'WA' OR LS_ACCIT-BLART = 'WE' OR LS_ACCIT-BLART = 'RE' )
  AND ( LS_ACCIT-HKONT = '0014010100' OR  LS_ACCIT-HKONT = '0033101999' ).
MOVE-CORRESPONDING LS_ACCIT TO LS_ACCIT_SUB.
LS_ACCIT_SUB-VBUND = ''.
APPEND LS_ACCIT_SUB TO EX_DOCUMENT-ITEM.
CLEAR:LS_ACCIT.
ENDIF.
      ENDLOOP.
*      ENDIF.
相关推荐
用户0328472220704 小时前
如何搭建本地yum源(上)
运维
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智3 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_3 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉3 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦3 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw
java_cj3 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes