当前位置: 首页 > news >正文

SAP工具箱 MR22自定义BAPI

点击蓝字 关注我们

前言

标准事务代码MR22 通过调整金额影响物料的成本价,前台界面中单个凭证中允许输入多行物料, 但是对应的BAPI函数仅支持输入单行物料

  • BAPI_MATVAL_DEBIT_CREDIT 正常库存

  • BAPI_SALESORDSTCK_DEBIT_CREDIT 销售订单库存

这种情况

婶可忍叔不可忍 (感谢用户的执着)(不排除SAP有允许输入多行的价格变更BAPI,但没有找到)

本文主要介绍自定义BAPI,允许生成多行物料的价格变更凭证

MR22的标准BAPI

  • BAPI_MATVAL_DEBIT_CREDIT  正常库存

  • BAPI_SALESORDSTCK_DEBIT_CREDIT  销售订单库存

项目中用到过这两个标准BAPI. 因为物料编码作为独立的传入参数, 因此这两个BAPI注定只能传入单行物料.

ac7c2a8730a70088dffe7118e0bcc80e.png

BAPI VS BDC

BDC使用方式详见连接

无峰,公众号:ABAP 技巧与实战ABAP基础知识 BDC记录创建单据

BDC是基于屏幕记录的处理过程, 如果因为配置或者数据的原因导致实际处理的屏幕过程不同于记录的屏幕过程,就会出现异常报错. 因此不推荐使用BDC记录生成的函数创建事务数据.

BDC录屏过程中,对于多行处理会有一个较复杂逻辑调整: 记录时需要形成一个重复处理过程, 该重复处理过程最好使用标准的定位按钮把要处理的行放到第一行. 翻页键或方向键不是一个精确的定位方式,可能会导致异常. 最后生成的代码基于传入的多行,调整重复处理的逻辑. 有些事务没有提供定位按钮,基本上很难实现多行(不定行)录入

BDC 没有一个准确的成功判定方式, 通过SY-SUBRC 和指定一个成功消息号来判断成功, 但特殊业务系统可能会触发另外一个成功消息号 . 这样会导致程序逻辑的不确定性.

综上所述,除非没有找到事务对应BAPI函数. 否则不要用BDC记录生成函数创建事务.

但凡事都有例外, 系统某些标准BAPI(财务居多),内核就是BDC录屏.这些BDC的标准BAPI考虑了所有屏幕呈现的逻辑,基本上不会有自己录制BDC的问题.

标准BAPI的分析

标准BAPI的调用过程比较简单, 程序中也有相应的注释提示

转换物料编码(18位编码->40位编码)

调用FORM matval_debit_credit生成凭证

ddca93987753086044d5479acdbc939b.png

FORM matval_debit_credit中 调用本地类方法产生凭证

818937f87caefa19fd7318f958c96fea.png

类方法lcl_matval_debit_credit中

处理了下述逻辑

  • 检查授权

  • 读取物料的物料分类账信息

  • 读取物料成本

  • 获取原因信息

  • 填写核心调用方法的参数

  • 最后调用核心方法 execute_price_change 生成凭证

1ca8c04f206a7711b80b5c59b11c6274.png

BAPI分析的结论

最终传递给方法 execute_price_change 的参数中. 传递的物料信息通过内表LT_MATPR传递. 该内表允许多行物料.

比较困惑为何SAP在底层类方法中允许多行物料, 但是封装的上层BAPI函数仅支持单行物料.

不管怎样. 上述的分析结果形成了一个想法: 创建一个新的, 允许多行物料的BAPI函数

84523ef9ee74e87d633ff37cfbacdd3d.png

改造结果

函数

ZBAPI_MULTI_SALESORDSTCK_DEBIT

允许传入多行物料. 产生多行物料的凭证

改造的过程比较简单, 把标准BAPI准备核心方法execute_price_change的参数准备部分,从单行调整成多行物料. 最终调用即可.

如下截图的红线部分是改变的部分

105c9074bf204d00c3c47c406245766e.png

a800ab04d4640b02a39964b5777e579c.png

f2fb7ace5ad3ad2c196b465c29b49ac1.png

9c5f34289efd5546169eadbc6eae8d1e.png

测试验证

最终生成的凭证和前台界面MR22创建的凭证一致.

ed7fc66bdb49c815558decd6ccb601b6.png

总结

SAP的标准程序的模块划分比较清晰, 让改造标准BAPI函数成为可能. 这次改造行为仔细分析了MR22标准BAPI的处理逻辑. 因此对改造后的函数比较有信心. 实测也验证了该函数可行.

同时也希望SAP后续能给出MR22的多行创建的BAPI函数

改造后, 标准成本及销售订单成本的修改整合到了一起. 基于传输数据是否有销售订单来判断.

改造的关键点都标识出来了. 感兴趣的可以自行尝试.

相关文章:

SAP工具箱 MR22自定义BAPI

点击蓝字 关注我们 一 前言 标准事务代码MR22 通过调整金额影响物料的成本价,前台界面中单个凭证中允许输入多行物料, 但是对应的BAPI函数仅支持输入单行物料 BAPI_MATVAL_DEBIT_CREDIT 正常库存BAPI_SALESORDSTCK_DEBIT_CREDIT 销售订单库存 这种情况 婶可忍叔不可忍 (感谢用户…...

ASP.NET 网上选课系统的设计与实现(源代码+论文)

随着教育改革的不断深化,建立一套能够适应这些改变的行政管理方案也就显得尤为重要。在高等院校的日常工作中,每个学期都要面临学生的选课工作。以往在选课工作的各个阶段都是手工操作,不但效率低下、工作繁琐,而且容易出错,于是开发一套适合校情的网上选课系统便成为了教…...

SpringMVC学习总结(路由映射、参数传递、转发和重定向...)

目录 1. MVC简介 2. SpringMVC简介 3. 路由映射注解 3.1 RequestMapping 3.2 GetMapping与PostMapping 4. 接收前端传递参数 4.1 接收单/多个参数 4.2 接收对象 4.3 接收JSON对象 4.4 后端参数重命名/映射 4.5 设置参数必传/非必传 4.6 获取URL中的参数 4.7 获取文…...

基于MAC地址的ACL配置

基于MAC地址的ACL配置 【实验目的】 掌握基于MAC地址的标准ACL的配置。验证配置。 【实验拓扑】 实验拓扑如图1所示。 图1 实验拓扑 设备参数如表所示。 表1 设备参数表 设备 接口 IP地址 子网掩码 默认网关 S1 e0/0 N/A N/A N/A e0/1 N/A N/A N/A PC1 N/…...

软件设计师 计算机网络

名字带IP AP的都是网络层 所有带T的除了TFTP其他都是TCP,所有不带T的除了POP3其他都是UDP​ **物理层的互联设备有中继器和集线器,集线器是一种特殊的多路多端口中继器 网络层:路由器 物理层:中继器 数据链路层:网桥…...

Gradle ——Gradle安装与配置

目录 一、简介 二、功能和特点 三、安装 参考: Gradle_百度百科 Gradle 学习 ----Gradle 入门_你若不离不弃,我必生死相依的博客-CSDN博客 还有硬石科技的开源wifiAPP程序,没找到他们的码仓 一、简介 Gradle是一个基于Apache Ant和Apache Maven概念…...

网络安全这条路到底该怎么走?

我之前就写过一篇文章专门解答了这个问题。但是还是有很多小伙伴并不清楚这条路该怎么走下去! 不同于Java、C/C等后端开发岗位有非常明晰的学习路线,网路安全更多是靠自己摸索,要学的东西又杂又多,难成体系。 网络安全虽然是计算…...

【C++】位图(海量数据处理)

文章目录 抛出问题:引入位图位图解决 位图的概念位图的实现结构构造函数设置位清空位判断这个数是否存在反转位size与count打印函数 位图的应用 抛出问题:引入位图 问题:给40亿个不重复的无符号整数,没排序,给一个无符号整数,如何…...

外包干了五年,废了...

先说一下自己的情况。大专生,17年通过校招进入湖南某软件公司,干了接近5年的测试点点点,今年年上旬,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了五年的点工…...

请问你如何理解以下的歌词“unravel - TK from 凛冽时雨 (TK from 凛として時雨)为什么很多人说崖山海战以后无中国

目录 请问你如何理解以下的歌词“unravel - TK from 凛冽时雨 (TK from 凛として時雨) 为什么很多人说崖山海战以后无中国 请问你如何理解以下的歌词“unravel - TK from 凛冽时雨 (TK from 凛として時雨) 以下是我对《unravel - TK from 凛冽时雨》这首歌词的理解&#xff1…...

从8连挂到面面offer,我只用了一个月,面试25K测试岗血泪经验分享给你

直到如今,我才敢把这段经历分享出来,毕竟一个多月前,我是经历了面试八连挂的人。作为一只骄傲的软件测试工程师,恨不得找一块豆腐撞死。但是在闭关修炼了一个多月之后,重新出来面试,面试了五家公司&#xf…...

计算机操作系统(慕课版)第二章课后题答案

一、简答题 (1)什么是前趋图?试画出下面四条语句的前趋图. S1:axy; S2:bz1; S3:ca-b; S4:wc1; 答:前趋图(Precedence Graph)是一个有向无循环图,…...

【离散数学】置换群和伯恩赛德定理编程题

1:置换的轮换表示 给出一个置换,写出该置换的轮换表示。比如 (1 2 3 4 5 6 7 8 9) (3 1 6 2 9 7 8 4 5) 表示为(1 3 6 7 8 4 2)(5 9) 输入: 置换后的序列 输出: 不相杂的轮换乘积,每行表示一个轮换(轮换的起…...

【自然语言处理】 - 作业2: seq2seq模型机器翻译

课程链接: 清华大学驭风计划 代码仓库:Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的,其分为四门课,包括: 机器学习(张敏教授) , 深度学习(胡晓林教授), 计算…...

随身WIFI折腾日记(四)---拓展USB接口读取U盘内容

五、USB行为控制 随身WIFI对外交互的接口只有WIFI和USB接口。如果要想接入其他硬件设备,拓展USB接口至关重要,对于USB接口的控制,参考如下链接: openstick项目官方教程:控制usb行为 HandsomeMod/gc: A Simple Tool To Control Usb Gadget …...

【C++初阶】类与对象(中)之取地址及const取地址操作符重载(了解即可)

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…...

代驾公司如何管理司机

在这个几乎人人都能学车,人人都能开车的时代,代驾职业也越来越专业化和正规化。因此,想要成为一名优秀的代驾司机,一定得有过人之处,对于代驾公司来说,如何管理司机也是尤为的重要。 对于代驾公司来说&…...

面了一个5年经验的测试工程师,自动化都不会也敢喊了16k,我也是醉了····

在深圳这家金融公司也待了几年,被别人面试过也面试过别人,大大小小的事情也见识不少,今天又是团面的一天, 一百多个人都聚集在一起,因为公司最近在谈项目出来面试就2个人,无奈又被叫到面试房间。 整个过程…...

ChatGPT:你真的了解网络安全吗?浅谈攻击防御进行时之网络安全新定义

ChatGPT:你真的了解网络安全吗?浅谈网络安全攻击防御进行时 网络安全新定义总结 ChatGPT(全名:Chat Generative Pre-trained Transformer),美国OpenAI 研发的聊天机器人程序,是人工智能技术驱动…...

LeetCode_DFS_困难_1377.T 秒后青蛙的位置

目录 1.题目2.思路3.代码实现(Java) 1.题目 给你一棵由 n 个顶点组成的无向树,顶点编号从 1 到 n。青蛙从 顶点 1 开始起跳。规则如下: 在一秒内,青蛙从它所在的当前顶点跳到另一个未访问过的顶点(如果它…...

XCTF-web-easyupload

试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...