SAP工具箱 MR22自定义BAPI

news2025/1/10 17:26:46

点击蓝字 关注我们

前言

标准事务代码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函数

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/561787.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python 闭包装饰器和多任务--闭包,装饰器,进程,线程

1.闭包案例 在函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数称为闭包. 外层函数: config_name(),外层函数中的变量是 name 内层函数: inner(),inner()使用了外层函数的变…

34从零开始学Java之构造方法都有哪些特性?

作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在前面的几篇文章中,壹哥给大家介绍了不少关于方法的内容,这些内容是我们日常…

zabbix监控之javasnmp自定义监控

1、客户端开启 java jmxremote 远程监控功能 上传 tomcat 软件包到 /opt 目录中 cd /opt tar zxvf apache-tomcat-9.0.16.tar.gz mv apache-tomcat-9.0.16 /usr/local/tomcat #配置 java jmxremote 远程监控功能 vim /usr/local/tomcat/bin/catalina.sh ...... #位置在 cygw…

嵌入式音视频开发面试过程遇到的问题!

前言: 今天继续给大家分享音视频面试过程会被常问到的一些问题! 面试的具体题目: 1、说一下播放器的设计过程: 这里的话主要分以下几步完成: 开启一个线程进行解封装操作 , 这包括:读取音频、视频的压缩数据…

chatgpt赋能Python-python_ps图片

Python PS图片的SEO指南 Python在数字图像处理中广泛应用。其中,Photoshop文件(psd)是一种常见的图像文件格式。但是,如何在搜索引擎上优化Python PS图片并提高其排名仍然是一个挑战。 什么是Python PS图片? Python…

数据结构和算法基础学习1

​​​​​​​ 网址第01周b--1.1数据结构研究_哔哩哔哩_bilibili

学C的第十九天【实用调试技巧:1. 调试;2. Windows环境调试介绍;3. 一些调试的实例;4. 一些调试的实例】

相关代码gitee自取:C语言学习日记: 加油努力 (gitee.com) 接上期:学C的第十八天【指针初阶:5. 指针和数组、6. 二级指针、7. 指针数组;初识结构体:1. 结构体的声明、2. 结构体成员的访问、3. 结构体传参&#xff1b…

java中的栈、堆、方法区

栈(stack) Java栈与堆不同每一个线程都有一个stack,栈的区域非常小,大概只有1M左右,但是存储速度非常快,所以我们把快速执行的任务存储在stack。 特点:自动分配,连续空间&#xff0…

如何从文档中提取结构化数据?parsio.io

parsio.io 产品名:Parsio电子邮件解析器 技术:采用人工智能技术的电子邮件解析器。 支持多种格式: 可以解析电子邮件和附件中的数据,包括PDF、HTML、XLSX(Excel)、CSV、DOCX、XML、TXT等格式。 提取模版&am…

FANUC机器人作为EtherCAT通信从站的相关配置方法

FANUC机器人作为EtherCAT通信从站的相关配置方法 基本介绍: 前提条件: 硬件部分: 机器人需要使用EtherCAT从站板卡 A20B-8101-0821。使用带屏蔽层的网线连接板卡和PLC的网口。 本例中使用的网络接口为EC-IN(CD38Y) 软件部分: 机器人需要安装软件:1A05B-2600-J743! Et…

NLog使用

Nlog 日志组件的使用 这个博文关注 .net framework下的NLog日志组件的使用. 在项目中需要将日志写到日志文件中, 另外一些重要信息要显示在界面上. 使用 NLog 可以轻松做到这点.NLog wiki 页面 nuget 安装两个主要组件 NLogNLog.Windows.Forms 使用总结 日志文件 layout 按照 j…

程序员的 Windows 工具箱「GitHub 热点速览」

作者:HelloGitHub-小鱼干 如何精简 Windows 并快速配置开发环境呢?本周特推的 winutil 是一个程序员的 Windows 工具箱,它提供了开发工具的一键安装以及减少系统垃圾的功能,一切为了简洁、高效。同样高效的还有 C 日志库 spdlog&a…

对讲机亚音是什么?有什么作用?

一、对讲机亚音是什么? 对讲机亚音又被称为亚音频。是比音频信号频率更低的一种特殊信号,目的在于检查信号是否合法,是否对信号进行响应。 亚音是一种特殊的振幅信号,人耳无法感觉也无法听闻到这些信号,所以对于无线…

mac mongodb 安装及配置

1.官网下载地址:MongoDB: The Developer Data Platform | MongoDB 2.下载好压缩包,解压后放在想放的地方,例如: /Users/xiaokeai/environment/mongodb-macos-x86_64-5.0.18 3.打开终端后,在家目录中打开.bash_profil…

Linux系统编程学习 NO.4 ——基础指令学习、操作系统时间的概念、文件压缩包的概念

1.时间相关的概念以及指令 1.1.时间相关的指令 1.1.1.date指令 date可以指定时间显示的格式:date 指定格式 选项 %H:小时 %M:分钟 %S:秒数 %Y:年份 %m:月份 %d:日 %F:相当于%Y-%m-%d %X:相当…

java网络编程从0到1快速上手

目录 网络编程概述 网络基础 网络编程的目的 网络通信要素概述 通信要素1:ip地址及端口号 IP 地址:InetAddress 端口号 InetAddress类 通信要素2:网络协议 网络协议概述 TCP/IP协议簇 TCP 和 UDP ​Socket Socket类的常用构造…

都什么年代了你还不学习postgreSQL(入门篇)

postgreSQL学习 一,简介 1.什么是postgresql https://www.postgresql.org/#官网​ PostgreSQL 是一个功能强大的开源对象关系数据库系统,它使用和扩展了 SQL 语言,并结合了许多安全存储和扩展最复杂数据工作负载的功能。PostgreSQL的起源可…

消息队列对比

目录 什么是消息队列 常用的消息队列工具对比 1 、ActiveMQ 2 、RabbitMQ 3、Kafka 4、 RocketMQ 什么是消息队列 消息队列是分布式应用间交换信息的重要组件,消息队列可驻留在内存或磁盘上, 队列可以存储消息直到它们被应用程序读走。通过消息队列&#xff0…

docker 镜像和容器

一、简述 win系统常用Ghost技术来做镜像,把系统和系统上安装的应用程序一起打包做备份,在别的电脑上安装这个GHO镜像则会有和源系统一摸一样的系统和应用。 docker功能类似,而且是分层的,在拉取镜像时候可见。 docker镜像拉取下…

4、js - 闭包

1、闭包的概念 闭包:函数嵌套函数,内层函数访问了外层函数的局部变量。 // 闭包 function func1() {let a 9;let b 8;function func2() {console.log("a", a); // a 9}func2(); } func1(); 分析: 需要访问的变量会被放到闭包…