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)https://cloud.tencent.com/developer/article/2337673?felosearch_translate=1BP保存增强
https://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供应商分组,不填写业务合作伙伴类型,保存时会报错,满足需求。
至此,本次业务需求已完成,有错误之处,欢迎批评指正,谢谢~~
相关文章:

SAP_MM模块-设置业务合作伙伴类型字段必输(多种方案)
一、业务背景 公司需要把供应商增加一个细分的维度,并且要求该字段设置为必输,防止用户新增供应商时忘记维护。这里给用户找了一个分类的字段:业务合作伙伴类型,本文主要讲解如何设置该字段设置为必填; 注意ÿ…...

STM32平台上实现串口接收不定长数据-实际项目中应用
文章目录 一、中断串口监听方式初始化中断处理串口监听 二、空闲中断方式三、空闲中断DMA方式四、总结 本文将详细介绍在STM32平台上实现串口接收不定长数据的几种方法 一、中断串口监听方式 这种方式也是我早期使用的方式,直接使用寄存器来操作,这种方…...

AWD入门
一、简介 AWD(Attack With Defense,攻防兼备)模式。你需要在一场比赛里要扮演攻击方和防守方,攻者得分,失守者会被扣分。也就是说攻击别人的靶机可以获取 Flag 分数时,别人会被扣分,同时你也要保护自己的主机不被别人…...

T3矩阵看功率
每个像素的T3矩阵,功率等于特征值的和。 不同的像素的T3矩阵相加,可不能用特征分解的相加,因为两个T矩阵的特征向量不同...

VLMEvalKit多模态大模型评测工具源码解析
vlmeval/api和vlmeval/vlm文件夹下分别是api接口和本地运行的大模型的代码 基类都是base vlmeval/dataset是数据集处理代码 vlmeval/inference.py是推理代码 run.py的整个流程 1 vlmeval/api/base.py 主要为需要与外部API交互的系统提供了一个通用的框架 类属性 allowed_type…...

将 Docker 安装到指定目录
将 Docker 安装到指定目录 将 Docker 安装到指定目录 Docker 默认安装在 C:\Program Files\Docker\Docker,这可能会占用大量 C 盘空间。你可以按以下步骤将 Docker 安装到其他盘(例如 E 盘): 创建安装目录:在 E 盘创…...

哪些企业需要部署SD-WAN?
首先,让我们先明确SD-WAN的定义。SD-WAN,中文全称为软件定义广域网(Software-Defined Wide Area Network),通过集中化管理与流量控制,帮助企业优化网络性能,提升用户体验。与传统广域网…...

通信基站类型、频段与网络标准
【1】通信基站类型 移动通信基站根据覆盖面积和功率大小主要可以分为以下几种类型: 宏基站(宏站):这是最常见的基站类型,具有较大的发射功率和较广的覆盖范围,通常覆盖半径从1到25公里不等。宏基站主要用于…...

Java IO教程之Java 文件一口气讲完!( *︾▽︾)
Java 文件 Java IO教程 - Java文件 File类的对象是文件或目录的路径名的抽象表示。 创建文件 我们可以从中创建一个 File 对象 路径名父路径名和子路径名URI(统一资源标识符) 我们可以使用File类的以下构造函数之一创建一个文件: File(…...

如何在 Ubuntu 24 上安装 Vmware Tools
原文 Vmware Tools作用 增强图形显示性能 分辨率适配 可使虚拟机的分辨率能够自动适应窗口大小的变化。当您调整 VMware 软件窗口的大小时,Ubuntu 24 虚拟机的屏幕分辨率会随之自动调整,为用户提供更好的视觉体验,方便在不同的使用场景下进…...

内网穿透:如何借助Cloudflare连接没有公网的电脑的远程桌面(RDP)
内网穿透:如何借助Cloudflare连接没有公网的电脑的远程桌面(RDP)-含详细原理配置说明介绍 前言 远程桌面协议(RDP, Remote Desktop Protocol)可用于远程桌面连接,Windows系统(家庭版除外)也是支持这种协议的,无需安装…...

明星作家都在使用的电子书制作工具,现在向大家介绍
在数字化时代,电子书已经成为了广大读者和作家的新宠。越来越多的作家开始尝试将手中的文字作品转化为电子书,以便在更广泛的平台上推广和传播。那么,如何高效、便捷地制作电子书呢?今天,我们就来为大家揭秘一款明星…...

简单认识Maven 3-认识pop.Xml配置文件中的代码
pom.xml是 Maven 项目的核心配置文件,它包含了项目的各种配置信息,以下是对其主要内容含义的认识: 一、项目基本信息 <groupId>: 定义项目的组织或团体的唯一标识符,通常采用反向域名的格式。例如,“…...

LangChain4j系列—OpenAI开发实例
一、引入Maven依赖 1、纯Java <dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai</artifactId><version>0.35.0</version> </dependency> 2、Spring boot <dependency><groupId&g…...

Java 中简化操作集合的方法
在日常 Java 开发中,我们经常需要操作集合,如 List、Set 和 Map。虽然 Java 提供了丰富的集合框架供开发者使用,但在实际编写业务逻辑时,如何简化集合操作、提高代码可读性和效率,依然是一个经常遇到的问题。特别是随着…...

ArcGIS Pro SDK (十七)宗地结构
ArcGIS Pro SDK (十七)宗地结构 环境:Visual Studio 2022 + .NET6 + ArcGIS Pro SDK 3.0 宗地结构 1 获取活动记录 string errorMessage = await QueuedTask.Run(() => {...

D. Co-growing Sequence
传送门:Problem - 1547D - Codeforces 题意:给定一个 数组 a , 构造一个数组 b ,使得 ( a[i] ^ b[i] ) & ( a[i 1] ^ b[ i 1] ) a[i] ^ b[i] 思路:(二进制题目) 设 a[i] ^ b[i] t 我们要让…...

docker配置加速器
阿里云 控制台》容器镜像服务》镜像工具》镜像加速器 复制地址:https://ywtoq7bz.mirror.aliyuncs.com 到:etc/docker下:vi daemon.json 格式: { "registry-mirrors": ["加速器地址"] } 注࿱…...

JS事件和DOM
1. DOM 1.1 基本概念 DOM,全称 Document Object Model,即文档对象模型。它是 Web 上最常用的 API 之一,是加载在浏览器中的文档模型,可以将文档表示为节点树(或称 DOM 树),其中每个节点代表文…...

CAS 详解
目录 Java 中 CAS 是如何实现的? CAS 算法存在哪些问题? ABA 问题 循环时间长开销大 只能保证一个共享变量的原子操作 Java 中 CAS 是如何实现的? 在 Java 中,实现 CAS(Compare-And-Swap, 比较并交换)操作的一个关键类是Unsafe。 Un…...

AI大模型那么火,教你一键Modelarts玩转开源LlaMA(羊驼)大模型
近日, LlaMA(羊驼) 这个大模型再次冲上热搜! LLaMA(Large Language Model Meta AI),由 Meta AI 发布的一个开放且高效的大型基础语言模型,共有 7B、13B、33B、65B(650 亿)四种版本。…...

Spring AI Alibaba: 支持国产大模型的Spring ai框架
Spring AI :java做ai应用的最好选择 过去,Java在AI应用开发方面缺乏一个高效且易于集成的框架,这限制了开发者快速构建和部署智能应用程序的能力。 Spring AI正是为解决这一问题而生,它提供了一套统一的接口,使得AI功…...

ChatGPT4o、o1 谁才是最佳大模型?
如何选择合适的 ChatGPT 模型?OpenAI 更新细节与 GPTs 的深入解析 随着人工智能的发展,ChatGPT 已成为众多用户的强大助手,广泛应用于写作、编程、学习和商业等多个领域。然而,面对 OpenAI 提供的众多模型(如 GPT-4、…...

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

Ubuntu的Qt编译环境配置
1、找不到C和C编译器 利用run文件安装QT6.8.0和QT5.12.2版本后,打开QtCreator时,找不到编译器。 可在终端中查找gcc和g版本,如果没有就安装。 gcc --version g --version 如果没有就安装: sudo apt-get install gcc sudo apt-…...

12 django管理系统 - 注册与登录 - 登录
为了演示方便,我就直接使用models里的Admin来演示,不再创建用户模型了。 ok,先做基础配置 首先是在base.html中,新增登录和注册的入口 <ul class"nav navbar-nav navbar-right"><li><a href"/ac…...

2020年计算机网络408真题解析
第一题: 解析:OSI参考模型网络协议的三要素 网络协议的三要素:语法 ,语义,同步(时序) 语法:定义收发双方所交换信息的格式 语法:定义收发双方所要完成的操作 网页的加载 …...

速盾:cdn高防服务器防火墙的特性是什么?
CDN高防服务器防火墙是一种专门为互联网应用提供安全防护的网络安全设备。它采用先进的技术和算法,通过对网络流量进行过滤和检测,以防止恶意攻击和非法访问,保障网络服务的可用性和安全性。CDN高防服务器防火墙的特性主要包括以下几个方面&a…...

小程序分包和预加载
一、目的 分包的目的: 提升小程序的首屏加载速度,其原理和PC端网页的路由懒加载非常类似。即当我们第一个打开一个小程序的时候,只加载主包以及一些公共的资源,当调到某个页面的时候,在加载该页面所在的分包…...

【MATLAB 串口调试+虚拟串口测试】
文章目录 前言一、matlab 串口二、测试串口1.从系统中获取串口号2.避免串口打开被占用3. 安装虚拟串口4. 打开串口助手和MATALB 进行测试 总结 前言 提示:这里可以添加本文要记录的大概内容: 项目需要: 提示:以下是本篇文章正文…...