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系统截图,如有侵权联系本人进行删除,感谢,如有疑问请在下方留言共同学习!

相关推荐
ly76892 分钟前
磁盘 I/O 延迟突增:用 iostat、blktrace 与火焰图定位到具体调用栈
java·linux·前端·数据库·iostat·磁盘 i/o·blktrace
程序员-Benothing4 分钟前
Linux查找文件命令:find、locate、which、whereis实战
linux·运维·服务器
泡海椒5 分钟前
jquick-pdf 核心原理解析:基于 HTML 模板动态渲染 PDF 的实现逻辑
java·开发语言·pdf
团子股股东峥哥13 分钟前
day39-RHEL-访问网络附加存储
linux·运维·服务器
Bs_MoneyMagnet14 分钟前
基于springboot+vue的图书馆预约系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·毕业设计·图书管理系统·计算机毕业设计
小蒜学长24 分钟前
基于小程序的绘画作品创作与分享社区系统的设计与实现(代码+数据库+LW)
java·spring boot·后端·绘画作品·创作分享社区
金玉满堂@bj27 分钟前
# Java文件打包成可执行JAR包(两种方式:原生javac\+jar命令 / Maven)
java
事圆则缓35 分钟前
Java 异常、日志与 Android 崩溃定位
java
砍材农夫2 小时前
spring|spring web|拦截器、过滤器、aop
java·spring boot·spring·spring cloud