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

一、业务背景

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

注意: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.rhkb.cn/news/453294.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[笔记] 关于CreateProcessWithLogonW函数创建进程

函数介绍 https://learn.microsoft.com/zh-cn/windows/win32/api/winbase/nf-winbase-createprocesswithlogonw BOOL CreateProcessWithLogonW([in] LPCWSTR lpUsername,[in, optional] LPCWSTR lpDomain,[in] …

【MySQL】表的约束、基本查询、内置函数

目录 1. 表的约束1.1 空属性1.2 默认值1.3 列描述1.4 zerofill1.5 主键1.6 自增长1.7 唯一键1.8 外键 2. 基本查询2.1 表的增删改查2.1.1 插入数据2.1.2 插入否则更新2.1.3 替换插入 2.2 Retrieve2.2.1 select ----- 查询2.2.2 where ----- 筛选2.2.3 order by ----- 结果排序2…

C++11——基础新增特性

目录 C11介绍统一的列表初始化对内置类型initializer_list 声明autodecltypenullptr 范围for容器新增接口emplace容器的新方法 C的前身是“C with Classes”, 最早于 1979年由 祖师爷Bjarne Stroustrup(本贾尼斯特劳斯特鲁普) 在贝尔实验室…

#HarmonyOS:页面和自定义组件生命周期

页面生命周期 即被Entry装饰的组件生命周期 onPageShow:页面每次显示时触发一次,包括路由过程、应用进入前台等场景。onPageHide: 页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景。onBackPress: 当用户点击返回按钮是触发 组件…

成都睿明智科技有限公司解锁抖音电商新蓝海

在这个短视频风靡的时代,抖音已不仅仅是一个娱乐平台,它更是商家们竞相追逐的电商新战场。成都睿明智科技有限公司,作为抖音电商服务领域的佼佼者,正以敏锐的洞察力和专业的服务,助力众多品牌在这片蓝海中乘风破浪&…

RHCE-多IP访问网站

关闭防火墙 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0下载nginx工具 [rootlocalhost ~]# yum install nginx Updating Subscription Management repositories. Unable to read consumer identityThis system is not registered with an …

面对AI算力需求激增,如何守护数据中心机房安全?

随着人工智能(AI)技术飞速发展,AI算力需求呈现爆发式增长,导致对数据设备电力的需求指数级攀升。这给数据中心带来前所未有的挑战和机遇,从提供稳定的电力供应、优化高密度的部署,到数据安全的隐私保护&…

【unity小技巧】Unity6 LTS版本安装和一些修改和新功能使用介绍

文章目录 前言安装新功能变化1、官方推荐使用inputsystem进行输入控制2、修复了InputSystem命名错误导致listen被遮挡的bug3、自带去除unity启动画面logo功能4、unity官方的behavior行为树插件5、linearVelocity代替过时的velocity方法待续 完结 前言 2024/10/17其实unity就已…

前端拦截302重定向

背景: 根据业务场景需要拦截302做后续的逻辑处理 尝试一: : axios拦截 、、、、、async created() {// 获取302请求返回的location后手动修改video的src路径let targetSrc;try {await axios.get(this.video).then((res) > {const { headers, status } res;const { locat…

Spring Cloud 解决了哪些问题?

大家好,我是锋哥。今天分享关于【Spring Cloud 解决了哪些问题?】面试题?希望对大家有帮助; Spring Cloud 解决了哪些问题? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring Cloud 是一个为构建分布式…

如何删除Maven

1.找到Maven安装路径 方法一: 可以直接在文件资源管理器里面选中“此电脑”然后右上角搜“apache-maven”,这个过程可能长达几分钟甚至更久 方法二: 这里推荐一个名叫“Everything”的软件,能够快速的查找到需要的文件 2.找到本…

每日一道算法题(Leetcode 20)

Whats past is prologue. 凡是过去,皆为序章。 题目 分析 1. 我们可以用栈的结构来解决这道题。 2. 我们使用while循环,每次读取字符串中一个元素进行操作,直到最后读取到 \0为止。 3. 如果遇见 (, [ ,{ 这三种左括号,则把该左…

【AIGC】AI如何匹配RAG知识库:关键词搜索

关键词搜索 引言jieba库简介TF-IDF简介实践例子用jieba库提取关键词计算TF-IDF计算文档和查询相似度结果完整代码: 总结 引言 RAG作为减少模型幻觉和让模型分析、回答私域相关知识最简单高效的方式,我们除了使用之外可以尝试了解其是如何实现的。在实现…

写一个自动采集地球前30行业的小程序

创建一个自动采集地球前30行业信息的小程序可以使用Python和一些常用的库,如BeautifulSoup和Requests。以下是一个基本示例,展示如何从网页上抓取行业信息: 环境准备 安装Python:确保你的计算机上已安装Python。安装库&#xff…

电影评论网站开发:Spring Boot技术指南

3系统分析 3.1可行性分析 通过对本电影评论网站实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本电影评论网站采用SSM框架,JAVA作为开发语言&#…

从传统到智能,从被动监控到主动预警,解锁视频安防平台EasyCVR视频监控智能化升级的关键密钥

视频监控技术从传统监控到智能化升级的过程是一个技术革新和应用场景拓展的过程。智能视频监控系统通过集成AI和机器学习算法,能够实现行为分析、人脸识别和异常事件检测等功能,提升了监控的准确性和响应速度。这些系统不仅用于传统的安全防护&#xff0…

【linux009】文件操作命令篇 - touch 命令

文章目录 touch 命令1、基本用法2、常见选项3、举例4、注意事项 touch 命令 touch 是 Linux 系统中的一个常用命令,用于创建空文件或更新已有文件的时间戳。它既可以用来快速生成新文件,也可以用来修改文件的访问时间(access time, atime&am…

react18中如何监听localstorage的变化获取最新的本地缓存

有时候业务中会需要监听缓存的变化,实时更新页面的内容获取发送接口请求。这就要我们来监听对localstorage的修改,实时响应变化!!一下方法同样实用于vue项目。 同一个项目中不同页面的实现 实现效果 代码分析 修改localstoare的…

【算法】KMP算法

写在前面 在学习KMP算法前,不才也曾在众多博客中阅读过KMP算法的文章,但是都看得迷迷糊糊,所以不才在学透了KMP算法后,详细编写了这篇笔记,希望对你有帮助🥰🥰。 KMP算法的核心思想不分任何语…

二叉树习题其二Java【力扣】【算法学习day.9】

前言 前言 书接上篇文章二叉树习题其一,这篇文章我们将基础拓展 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思…