SAP_MM模块-设置业务合作伙伴类型字段必输(多种方案)

embedded/2024/10/22 0:10:38/

一、业务背景

        公司需要把供应商增加一个细分的维度,并且要求该字段设置为必输,防止用户新增供应商时忘记维护。这里给用户找了一个分类的字段:业务合作伙伴类型,本文主要讲解如何设置该字段设置为必填;

注意:BP分组为Z001-集团外供应商时才需要设置必输,其他分组不需要必输~~

如果对于BP主数据的前提操作和后台配置没有基础概念的话,可以查看往期写过的一篇文章:

SAP_MM模块-S4版本BP业务伙伴的逻辑原理_sap bp-CSDN博客文章浏览阅读1.6k次,点赞32次,收藏16次。本文详细解释了SAPS4/HANA版本中的业务伙伴(BP)功能配置,包括BP角色、角色类别、主数据同步等内容,以及这些配置如何与前台业务界面交互,提供了一个简化的大致逻辑和思维导图链接帮助理解。https://blog.csdn.net/qq_40141758/article/details/137636389?fromshare=blogdetail&sharetype=blogdetail&sharerId=137636389&sharerefer=PC&sharesource=qq_40141758&sharefrom=from_link

二、系统实现

        本文主要记录设置字段必输的实现过程中,遇到的一些问题点以及最后的实现方法,大致分为5个部分

1、定义业务合作伙伴类型

2、后台配置--根据BP角色类别配置字段属性(根据角色类别FLVN00/FLVN01 配置字段必输)--无法实现!!

3、后台配置-根据供应商科目组配置字段属性(根据BP分组Z001配置字段必输)--无法实现!!

4、通过BADI:BUPA_ADDR_CHECK增强开发实现--可实现!!

5、通过BDT业务数据工具集(BUPT)来开发实现--可实现!!

1、定义业务合作伙伴类型

后台配置路径:跨应用组件->SAP 业务伙伴->业务伙伴->基本设置->商业伙伴类型->定义业务伙伴类型

PS:该业务合作伙伴类型,还可以通过不同的选项,配置影响其他其他页签的字段内容是否必输;

双击Z101进入字段控制界面

2、后台配置--根据BP角色类别配置字段属性--无法实现!!

根据角色类别FLVN00/FLVN01 配置字段必输

后台配置路径:跨应用组件->SAP 业务伙伴->业务伙伴->基本设置->字段分组->配置每个商业伙伴角色的字段属性

保存后,修改供应商主数据,可以看到,该字段被标记为必输;

但是,可以看到,其他分组的供应商,该字段也是必输,不符合我们的要求---我们的要求是,只有Z001 集团外供应商需要必输!!

此方法无法实现用户需求~~

PS:(1)根据该配置,可以知道,只要业务伙伴角色,不创建FLVN01的业务伙伴角色时,那么该字段就不会必输;

PS:(2)根据该配置,可以知道,只要业务伙伴角色,创建FLVN01的业务伙伴角色时,那么该字段就会必输;(与BP分组无关)

BP前提操作页面中,可以根据实际情况,选择系统配置的BP角色(如FLVN00/FLVN01),也可以选择BP角色分组(参考上图的配置,新增BP角色分组,把BP角色分配给BP角色分组中,那么当用户操作前台,选中操作BP角色分组是时,就同时包含BP角色的所有功能)

3、后台配置-根据供应商科目组配置字段属性--无法实现!!

根据BP分组Z001配置字段必输

既然BP角色与BP分组没有关联性,那么BP角色的字段控制组,也与BP分组没有关联性,那么我们的需求是根据BP分组“Z001 集团外供应商”来设置“业务合作伙伴类型”必输,那我们就考虑找到该BP分组的字段控制组;

后台配置路径:后勤 - 常规->业务伙伴->供应商->控制->定义科目组和字段选择(供应商)

这里的控制点,确实是可以根据BP分组来控制字段是否必输的,但是所有选项都查看后发现,并没有找到“业务合作伙伴类型”的字段,也就无法进行配置设置;

此方法无法实现用户需求~~

4、通过BADI:BUPA_ADDR_CHECK增强开发实现--可实现!!

(1)找到对应的BADI,并创建实施

SE18:BUPA_ADDR_CHECK

METHOD if_ex_bupa_addr_check~check.
DATA: ls_return type BAPIRET2.**清除返回结构
CLEAR ls_return.IF is_but000-bu_group EQ 'Z001'.CHECK is_but000-bpkind IS INITIAL.IF sy-subrc EQ 0.ls_return-TYPE = 'E'.ls_return-number = '005'.ls_return-ID = 'B1'.ls_return-MESSAGE_v1  =   'Z001 外集团外供应商:业务合作伙伴类型不能为空'.ls_return-MESSAGE_v2  =   ''.ls_return-MESSAGE_v3  =   ''.ls_return-MESSAGE_v4  =   ''.append ls_return to et_return.ENDIF.ENDIF.ENDMETHOD.

(2)这里编写代码时,有几个地方需要注意:

A. 不能直接用MESSAGE的报错语法,否则系统会一直报错,然后界面还无法跳转到填写“业务合作伙伴类型”的地方;

B. 使用BADI中自带的消息返回参数时, 需要定义工作区,后面通过append to的方式添加到et_return中;

C. 需要用MESSAGE_V1—MESSAGE_V4的字段,不能用MESSAGE。

效果演示;

填写字段后,才允许保存

5、通过BDT业务数据工具集(BUPT)来开发实现

原理:通过BDT的配置,调用自定义的增强函数,使得BP主数据在保存时触发该自定义的增强函数。而自定义的增强函数,通过调用系统标准函数,从而获取BP主数据对应的视图信息。

本次实例参考了网上两篇文章来开发测试,但是由于功能已经实现,并且需求已经实现,所以讲解不会太清晰,大概记录一下实现过程。

SAP S4 HANA业务伙伴工具集(BDT)icon-default.png?t=O83Ahttps://cloud.tencent.com/developer/article/2337673?felosearch_translate=1BP保存增强icon-default.png?t=O83Ahttps://blog.csdn.net/csdnye26/article/details/134014717

应用程序

使用BDT维护的主数据和文档数据的每个对象都被定义为应用程序对象

BUP–普通业务伙伴

BUB–业务伙伴关系

BUA–地址

BUS-中心业务伙伴:控制

CVIC–客户链接

CVIV–供应商链接

应用程序可以单独打开或关闭。

获取当前bp其他视图的函数:

CVIV_BUPA_LFM1_GET 采购视图

CVIV_BUPA_LFB1_GET 公司视图

CVIV_BUPA_LFA1_GET 原视图

CVIC_BUPA_KNA1_GET 客户数据

CVIC_BUPA_KNB1_GET 客户数据

BUP_BUPA_BUT000_GET 基本视图数据

(1)SE37:创建BP的供应商或客户视图保存函数

其他导入、导出、表等所有页签均不需要输入内容;另外,需要注意,输出报错信息时,最好不要用MESSAGE XXXX WITH XXX的语法,最好使用对应的报错信息函数,便于系统报错时,用户可以重新修改错误地方的数据。

FUNCTION zmm_bupa_check_bpkind.
*"----------------------------------------------------------------------
*"*"本地接口:
*"----------------------------------------------------------------------
DATA e_but000 TYPE but000.
DATA e_but000_stat TYPE bus_istat.
DATA e_data TYPE bussdi3-data.
DATA e_partner_ext TYPE bu_partner.CALL FUNCTION 'BUP_BUPA_BUT000_GET'IMPORTINGe_but000            = e_but000." e_but000_stat       = e_but000_stat." e_data              = e_data." e_partner_ext       = e_partner_ext.IF e_but000-bu_group eq 'Z001'.IF e_but000-bpkind IS INITIAL." MESSAGE E005(B1) WITH '分组Z001 集团外供应商必须要维护业务合作伙伴类型'." LEAVE TO screen 0.CALL FUNCTION 'BUS_MESSAGE_STORE'EXPORTINGarbgb                      = 'B1'msgty                      = 'E'txtnr                      = '005'
*         CANCEL                     = ' 'MSGV1                      = ' 分组Z001 集团外供应商必须要维护业务合作伙伴类型'
*         MSGV2                      = ' '
*         MSGV3                      = ' '
*         MSGV4                      = ' '.ENDIF.ENDIF.ENDFUNCTION.

(2)配置业务伙伴保存前检查的事件

A、点击新条目,新增项目:这里只能用数字

B、填写功能函数名称:上一步创建的函数

C、应用程序:填写需要控制的BP视图对应的应用程序(由于我这边的需求是修改基本视图的业务类型合作伙伴,所以选择BUS,具体对应关系没有深究,有兴趣的小伙伴可以自行研究下)

(3)配置BP视图对应的应用程序

事务码:BUSD

如果这里找不到对应的应用程序,那么需要手动添加新条目

(4)测试功能

Z001供应商分组,不填写业务合作伙伴类型,保存时会报错,满足需求。

 

至此,本次业务需求已完成,有错误之处,欢迎批评指正,谢谢~~


http://www.ppmy.cn/embedded/129406.html

相关文章

JavaScript中 固定 this指向 (call、apply、bind 函数)

前置知识 this 关键字js原型及原型链 背景 由于对象的属性可以赋给另一个对象,所以属性所在的当前对象是可变的,即this的指向是可变的。 this的动态切换,固然为 JavaScript 创造了巨大的灵活性,但也使得编程变得困难和模糊。 有…

新书速览|Android智能座舱开发:从源码到实践

《Android智能座舱开发:从源码到实践》 本书内容 《Android智能座舱开发:从源码到实践》是一本专注于Android智能座舱系统开发与优化的实战指南。《Android智能座舱开发:从源码到实践》共9章,第1章从搭建源码编译环境开始,详细指导读者如何下载和编译An…

归一化——5种方法详细分类说明

归一化(Normalization)是一种数据预处理技术,旨在将不同量纲、不同取值范围的数据转换到相同的尺度上,以便进行更加公平、有效的比较或分析。 通过归一化,数据被调整到一定的标准范围内,常见的范围有 [0, …

Java爬虫API:获取商品详情数据的利器

为什么选择Java爬虫API 强大的库支持:Java拥有丰富的网络编程库,如Apache HttpClient、OkHttp等,这些库提供了强大的HTTP请求功能,使得发送请求和处理响应变得简单。高效的数据处理:Java的数据处理能力,结…

比亚迪车机安装第三方应用教程

比亚迪车机安装第三方应用教程 比亚迪车机U盘安装APP, 无论是dlink3.0还是4.0都是安卓系统,因此理论上安卓应用是都可以安装的,主要就是横屏和竖屏的区别。在比亚迪上安装软件我主要推荐两种方法。 第一种,直接从电脑端下载安装布…

C++(stack和queue)

1. stack的介绍、使用和实现 1.1 stack的介绍 stl里的stack其实和数据结构内的stack和前面数据结构的栈不能说百分百一样,但也有百分之90是一样的,他们的特性都是LIFO(last in first out)先进后出的原则,前面有类似的…

论新能源智能化电动车个性化(高定)产品对制造生产的影响

一、新能源智能化电动车高定体现模式 1.个性体现在品牌之间 在不同主机产产品上体现,例如国产新能源新势力在智能座舱、内饰配置(冰箱、彩电、大沙发)方面对于合资品牌的碾压,提供更多细分,功能拉满的车型。 2.个性化…

C#从零开始学习(继承)(6)

本章所有的代码都放在 https://github.com/hikinazimi/head-first-Csharp 使用冒号继承一个基类,子类扩展一个基类时,他会继承它的成员:也就是基类中的所有字段,属性和方法,他们会自动增加到子类 子类覆盖方法改变它继承的成员 基类中的方法增加virtual关键字子类同名方法增加…