SAP MM 供应商银行主数据更新报错!message R1228!

1、前台数据

供应商A

银行主数据原始数据长成这样:

xml 复制代码
 标识     国家      银行账户    控制码     有效日期从    	有效日期到
 CN01     CN       1000001      CN        20260801        99991231

此时我们前台BP去修改

第一种:我改账户,没问题

xml 复制代码
 标识     	国家      银行账户    控制码        有效日期从     有效日期到
 CN01      CN        1000002      CN           20260801        99991231

此时正常!

第二种:我新增一行,数据和原始数据一样

xml 复制代码
 标识     国家      银行账户    控制码          有效日期从    有效日期到
 CN01      CN       1000001       CN          20260801        99991231

此时候会报错,说明细标识CN01已经存在!(因为BUT0BK主键就是这个玩意,这个就不解释了,不可能再让你建一行一模一样的)

这时候,我把再标识换了,其他保持不变

xml 复制代码
 标识     	国家      银行账户     	 控制码       有效日期从    有效日期到
 US01      CN       1000001            CN          20260801        99991231 

此时候会报错R1228,有效期间的银行明细 CN 1000001 CN不唯一!

为什么会报R1228呢,这是因为SAP标准功能就是这样的。SAP NOTE 3164505

其实SAP NOTE说的少了一个唯一KEY 控制码,因为当你这样插入的时候是没有问题的

xml 复制代码
 标识     	国家      银行账户     	   控制码        有效日期从    有效日期到
 US01      CN       1000001            **留空**      20260801        99991231 

但是我就想把控制码和之前数据一样怎么插入呢,SAP NOTE解决方案说到了你改一下有效期间就行(改完BP直接保存就行,回车其实会报错,可以忽略!)

xml 复制代码
 标识     	国家      银行账户     	   控制码         有效日期从    有效日期到
 US01      CN       1000001              CN         **20260701     20260731**

2、前台你想怎么操作都是你可以控制,但是BAPI执行时候可不是那样的

本次用到供应商主数据创建类方法:

xml 复制代码
        CALL METHOD cl_md_bp_maintain=>maintain
          EXPORTING
            i_data   = it_data
          IMPORTING
            e_return = it_return

原始数据:

xml 复制代码
 标识     国家      银行账户    控制码     有效日期从    	有效日期到
 CN01     CN       1000001      CN        20260801        99991231

假如此时是8月2日,好了你传一条数据如下

xml 复制代码
 标识     国家      银行账户    控制码     有效日期从    	有效日期到
 CN01     CN       1000001      CN        20260801        99991231

结果:

xml 复制代码
 标识     国家      银行账户    控制码     有效日期从    	有效日期到
 0001     CN       1000001      CN        20260801        20260801
 CN01     CN       1000001      CN        20260802        99991231

对于这个结果是SAP标准逻辑,因为你传入的数据和原始数据一样,此时就会触发SAP NOTE说的那段逻辑,对SAP来说他会自动把这个8月1日的失效掉,并且插入一条8月2日的有效期进来,说实话这也解释得通,毕竟按NOTE说的不让主键重复。

假如又过了一天,此时8月3日了,你上午又传入一模一样数据传一条数据如下

xml 复制代码
 标识     国家      银行账户    控制码     有效日期从    	有效日期到
 CN01     CN       1000001      CN        20260801        99991231

结果:

xml 复制代码
 标识     国家      银行账户    控制码     有效日期从    	有效日期到
 0001     CN       1000001      CN        20260801        20260801
 0002     CN       1000001      CN        20260802        20260802
 CN01     CN       1000001      CN        20260803        99991231

这个结果应该也是正常的继续拆分没毛病。

好了到了8月3日晚上,你再传一条一模一样的数据或者你重传。

xml 复制代码
 标识     国家      银行账户    控制码     有效日期从    	有效日期到
 CN01     CN       1000001      CN        20260803        99991231

结果:此时候会报错R1228,有效期间的银行明细 CN 1000001 CN不唯一!

为什么在同一天传2次会报错呢,原因在于有0001和0002 在

从而触发RI228报错。

用的那个最上面供应商创建的类,追溯的源代码发现会走这些函数:

bupa_bankdetail_change

BUP_CHECK_BANK_ACCOUNTS_CHANGE

BUP_BUT0BK_SELECT_WITH_PARTNER

4、怎么解决这个问题

xml 复制代码
1调用:BAPI_BUPA_BANKDETAIL_REMOVE删除0001 0002 (根据那几个主键值先把相同这几个自动创建的行全部删除),这里删除目的不让底下那个报错R1228
2再调用类函数:
        CALL METHOD cl_md_bp_maintain=>maintain
          EXPORTING
            i_data   = it_data
          IMPORTING
            e_return = it_return
3再调用:BAPI_BUPA_BANKDETAIL_REMOVE删除0001 0002  (因为创建完还会生成0001 0002 .所以这里再删一遍这样供应商主数据生成就很完美 )

5、其实供应商银行拿这几个函数去操作即可,我觉得那个类方法不怎么好用,而且那个类写入删除标记D还不好使垃圾一批更新也LOW,DEBUG改数据更LOW一层层,都不如下面那个删除函数好。

BAPI_BUPA_BANKDETAIL_CHANGE 更新

BAPI_BUPA_BANKDETAIL_ADD 新增

BAPI_BUPA_BANKDETAIL_REMOVE 删除

以上只是个人理解分享的笔记仅供参考,如果喜欢帮忙点个赞!以上截图均来自SAP系统截图,如有侵权联系本人进行删除,感谢,如有疑问请在下方留言共同学习!

相关推荐
daidaidaiyu10 小时前
ThingsBoard 集群的核心逻辑源码分析
java
我可能是个假开发10 小时前
FTP Unicode 文件名导致 `550` 的问题分析与解决方案
java·开发语言·spring
caoerzhong11 小时前
中小企业上 WMS 该先上哪几块:JeeWMS 开源 Java 仓库管理系统的分批上线清单
java·python·开源
正在走向自律11 小时前
AI数据分析与可视化:从基础到应用实践
服务器·人工智能·python·机器学习·数据分析·pandas
OnlineProxy11 小时前
亚马逊多账号运营:如何在规避“关联封号”风险的同时实现电商规模化扩张
服务器·数据库·redis
【JAVA】玩家12 小时前
Spring核心原理全解析:从零到生产实战
java·后端·spring
Android系统攻城狮12 小时前
Linux Gstreamer深度解析之gst_audio_encoder_set_frame_max调用流程与实战(六十一)
android·linux·运维·音视频·gstreamer音视频·音视频进阶·gstreamer音视频进阶
Wang's Blog12 小时前
Java框架 SpringCloud 快速入门: 实现 Feign 最佳实践(抽取方式)
java·spring cloud
91刘仁德13 小时前
IP协议详解:从IP协议头到网段划分、路由与NAT
linux·服务器·网络·网络协议·tcp/ip
辻弋20113 小时前
五年前的旅行视频糊成马赛克?Video2X用Real-ESRGAN逐帧重建细节,但只支持Windows、集显用户建议直接放弃
服务器·数据库·windows·游戏引擎·电脑