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

SAP MM开发避坑指南:BAPI_GOODSMVT_CREATE调用时,如何快速找到自定义移动类型对应的GOODSMVT_CODE?

SAP MM开发实战自定义移动类型与GOODSMVT_CODE的精准匹配策略在SAP物料管理MM模块的开发过程中BAPI_GOODSMVT_CREATE是最常用的接口之一但许多开发者在处理自定义移动类型时都会遇到一个共同难题如何准确确定这些非标准移动类型对应的GOODSMVT_CODE值这个问题看似简单却直接影响着库存移动的正确性和系统集成的稳定性。1. 理解GOODSMVT_CODE的核心逻辑GOODSMVT_CODE在SAP系统中扮演着货物移动事务分类的关键角色。这个看似简单的两位代码实际上决定了整个库存移动的业务场景和处理逻辑。标准移动类型如101采购订单收货通常对应01而541库存转储则对应04但当我们面对Z开头的自定义移动类型时这个对应关系就变得模糊不清。为什么GOODSMVT_CODE如此重要它决定了系统如何处理物料凭证的会计过账它控制着移动类型的业务场景验证逻辑它影响着后续的物料评估和库存更新在实际项目中我曾遇到一个典型案例某制造企业使用Z21移动类型处理生产退料开发团队最初尝试使用01作为GOODSMVT_CODE结果导致系统无法正确生成财务凭证。经过排查才发现这个自定义移动类型实际应该对应03生产相关移动。2. 系统表逆向查询技术解决这个问题的关键在于理解SAP底层的数据结构。系统通过T158B和T158G两张表的关联建立了移动类型与GOODSMVT_CODE的映射关系。2.1 标准查询路径以下是完整的逆向查询步骤通过移动类型查找事务码SELECT SINGLE bwart, bwtar, tcode FROM t158b WHERE bwart Z21 INTO DATA(ls_t158b).通过事务码确定GOODSMVT_CODESELECT SINGLE tcode, bwart, lgort, bwtar, kzbew, kzzug, kzvbr, sobkz, weunb, kzbws, kzzu1, kzzu2, kzzu3, kzzu4, kzzu5, kzzu6, kzzu7, kzzu8, kzzu9, kzzua, kzzub, kzzuc, kzzud, kzzue, kzzuf, kzzug, kzzuh, kzzui, kzzuj, kzzuk, kzzul, kzzum, kzzun, kzzuo, kzzup, kzzuq, kzzur, kzzus, kzzut, kzzuu, kzzuv, kzzuw, kzzux, kzzuy, kzzuz, kzzv0, kzzv1, kzzv2, kzzv3, kzzv4, kzzv5, kzzv6, kzzv7, kzzv8, kzzv9, kzzva, kzzvb, kzzvc, kzzvd, kzzve, kzzvf, kzzvg, kzzvh, kzzvi, kzzvj, kzzvk, kzzvl, kzzvm, kzzvn, kzzvo, kzzvp, kzzvq, kzzvr, kzzvs, kzzvt, kzzvu, kzzvv, kzzvw, kzzvx, kzzvy, kzzvz, kzzw0, kzzw1, kzzw2, kzzw3, kzzw4, kzzw5, kzzw6, kzzw7, kzzw8, kzzw9, kzzwa, kzzwb, kzzwc, kzzwd, kzzwe, kzzwf, kzzwg, kzzwh, kzzwi, kzzwj, kzzwk, kzzwl, kzzwm, kzzwn, kzzwo, kzzwp, kzzwq, kzzwr, kzzws, kzzwt, kzzwu, kzzwv, kzzww, kzzwx, kzzwy, kzzwz, kzzx0, kzzx1, kzzx2, kzzx3, kzzx4, kzzx5, kzzx6, kzzx7, kzzx8, kzzx9, kzzxa, kzzxb, kzzxc, kzzxd, kzzxe, kzzxf, kzzxg, kzzxh, kzzxi, kzzxj, kzzxk, kzzxl, kzzxm, kzzxn, kzzxo, kzzxp, kzzxq, kzzxr, kzzxs, kzzxt, kzzxu, kzzxv, kzzxw, kzzxx, kzzxy, kzzxz, kzzy0, kzzy1, kzzy2, kzzy3, kzzy4, kzzy5, kzzy6, kzzy7, kzzy8, kzzy9, kzzya, kzzyb, kzzyc, kzzyd, kzzye, kzzyf, kzzyg, kzzyh, kzzyi, kzzyj, kzzyk, kzzyl, kzzym, kzzyn, kzzyo, kzzyp, kzzyq, kzzyr, kzzys, kzzyt, kzzyu, kzzyv, kzzyw, kzzyx, kzzyy, kzzyz, kzzz0, kzzz1, kzzz2, kzzz3, kzzz4, kzzz5, kzzz6, kzzz7, kzzz8, kzzz9, kzzza, kzzzb, kzzzc, kzzzd, kzzze, kzzzf, kzzzg, kzzzh, kzzzi, kzzzj, kzzzk, kzzzl, kzzzm, kzzzn, kzzzo, kzzzp, kzzzq, kzzzr, kzzzs, kzzzt, kzzzu, kzzzv, kzzzw, kzzzx, kzzzy, kzzzz FROM t158g WHERE tcode ls_t158b-tcode INTO DATA(ls_t158g).提示在实际开发中建议将这部分逻辑封装成可复用的函数模块避免在多个地方重复编写相同的查询代码。2.2 常见移动类型与GOODSMVT_CODE对应表移动类型典型事务码GOODSMVT_CODE业务场景描述101MB0101采购订单收货103MB0101采购订单收货到质检库存105MB0101无订单收货122MB1A03生产退料201MB1A03生产消耗261MB1B04库存转储工厂间301MB1B04库存地点间转储321MB1B04库存状态变更501MB1C05无采购订单入库541MB1B04库存转储带发货551MB1A03成本中心消耗Z21MB1A03自定义生产退料Z41MB1B04自定义库存转储3. 开发中的实战技巧3.1 动态确定GOODSMVT_CODE在实际开发中我们往往需要处理多种移动类型。以下是一个实用的函数模块示例可以动态确定任何移动类型对应的GOODSMVT_CODEFUNCTION z_get_goodsmvt_code. *---------------------------------------------------------------------- **本地接口 * IMPORTING * VALUE(IV_MOVE_TYPE) TYPE BWART * EXPORTING * VALUE(EV_GOODSMVT_CODE) TYPE BAPI2017_GM_CODE * VALUE(EV_ERROR) TYPE CHAR1 * VALUE(EV_MESSAGE) TYPE CHAR255 *---------------------------------------------------------------------- DATA: ls_t158b TYPE t158b, ls_t158g TYPE t158g. CLEAR: ev_goodsmvt_code, ev_error, ev_message. Step 1: 从T158B获取事务码 SELECT SINGLE * INTO ls_t158b FROM t158b WHERE bwart iv_move_type. IF sy-subrc 0. ev_error E. ev_message |移动类型{ iv_move_type }在T158B中未找到配置|. RETURN. ENDIF. Step 2: 从T158G获取GOODSMVT_CODE SELECT SINGLE * INTO ls_t158g FROM t158g WHERE tcode ls_t158b-tcode. IF sy-subrc 0. ev_error E. ev_message |事务码{ ls_t158b-tcode }在T158G中未找到配置|. RETURN. ENDIF. 根据kzzug字段确定GOODSMVT_CODE CASE ls_t158g-kzzug. WHEN 1. 采购订单收货 ev_goodsmvt_code 01. WHEN 2. 生产订单收货 ev_goodsmvt_code 02. WHEN 3. 生产相关移动 ev_goodsmvt_code 03. WHEN 4. 库存转储 ev_goodsmvt_code 04. WHEN 5. 其他收货 ev_goodsmvt_code 05. WHEN OTHERS. ev_error E. ev_message |无法确定移动类型{ iv_move_type }的GOODSMVT_CODE|. ENDCASE. ENDFUNCTION.3.2 常见错误排查在实施过程中以下几个问题需要特别注意事务码与移动类型不匹配检查T158B中移动类型的配置是否正确确保事务码在T158G中有对应记录GOODSMVT_CODE与业务场景不符验证kzzug字段的值是否符合预期业务场景检查是否有自定义增强修改了标准逻辑跨客户端配置差异不同SAP客户端的配置可能有差异开发环境与生产环境的配置可能不一致自定义移动类型的特殊处理某些Z开头的移动类型可能复制了标准逻辑但修改了部分行为需要测试验证实际业务效果4. 高级应用场景4.1 批量处理多种移动类型在接口开发中经常需要处理包含多种移动类型的业务场景。以下是一个优化的处理框架METHOD process_goods_movement. DATA: lt_items TYPE TABLE OF bapi2017_gm_item_create, lw_item TYPE bapi2017_gm_item_create, lv_code TYPE bapi2017_gm_code. 1. 准备物料凭证抬头数据 DATA(lw_header) VALUE bapi2017_gm_head_01( pstng_date sy-datum doc_date sy-datum pr_uname sy-uname ). 2. 处理每个行项目 LOOP AT it_items INTO DATA(lw_input). CLEAR lw_item. 获取移动类型对应的GOODSMVT_CODE CALL FUNCTION Z_GET_GOODSMVT_CODE EXPORTING iv_move_type lw_input-move_type IMPORTING ev_goodsmvt_code lv_code ev_error DATA(lv_error) ev_message DATA(lv_message). IF lv_error IS NOT INITIAL. 错误处理逻辑 CONTINUE. ENDIF. 填充行项目数据 MOVE-CORRESPONDING lw_input TO lw_item. APPEND lw_item TO lt_items. ENDLOOP. 3. 调用BAPI创建物料凭证 CALL FUNCTION BAPI_GOODSMVT_CREATE EXPORTING goodsmvt_header lw_header goodsmvt_code lv_code IMPORTING materialdocument DATA(lv_matdoc) matdocumentyear DATA(lv_mjahr) TABLES goodsmvt_item lt_items return DATA(lt_return). 4. 错误处理与结果返回 IF lv_matdoc IS INITIAL. 错误处理逻辑 ELSE. CALL FUNCTION BAPI_TRANSACTION_COMMIT EXPORTING wait abap_true. ENDIF. ENDMETHOD.4.2 性能优化建议当处理大量数据时查询性能可能成为瓶颈。以下是几个优化建议批量查询替代单条查询 不好的做法在循环中单条查询 LOOP AT it_items INTO DATA(lw_item). SELECT SINGLE * FROM t158b WHERE bwart lw_item-move_type. ... ENDLOOP. 好的做法先收集所有移动类型然后批量查询 DATA(lt_move_types) VALUE ty_range_bwart( FOR lw_item IN it_items ( sign I option EQ low lw_item-move_type ) ). SELECT * FROM t158b INTO TABLE DATA(lt_t158b) WHERE bwart IN lt_move_types.使用缓存机制将常用移动类型的映射关系缓存到内存中考虑使用SAP的buffer表或自定义缓存表异步处理设计对于非实时性要求的场景可以采用异步处理模式使用SAP的background processing或调用RFC函数5. 真实案例解析在某汽车零部件制造企业的SAP实施项目中我们遇到了一个典型的自定义移动类型问题。客户使用Z45移动类型处理供应商寄存库存的消耗但在调用BAPI时始终无法正确生成财务凭证。通过分析我们发现问题的根源在于客户复制了标准移动类型261创建了Z45但未在T158B中正确维护事务码关联导致系统无法确定正确的GOODSMVT_CODE解决方案包括修正T158B中的配置将Z45关联到正确的事务码在程序中添加特殊处理逻辑IF lv_move_type Z45. lv_goodsmvt_code 04. 使用与261相同的代码 lw_item-spec_stock K. 供应商寄存库存标识 ENDIF.在财务模块添加对应的过账配置这个案例告诉我们对于自定义移动类型仅仅确定GOODSMVT_CODE可能还不够还需要考虑其他相关字段的特殊处理。

相关文章:

SAP MM开发避坑指南:BAPI_GOODSMVT_CREATE调用时,如何快速找到自定义移动类型对应的GOODSMVT_CODE?

SAP MM开发实战:自定义移动类型与GOODSMVT_CODE的精准匹配策略 在SAP物料管理(MM)模块的开发过程中,BAPI_GOODSMVT_CREATE是最常用的接口之一,但许多开发者在处理自定义移动类型时都会遇到一个共同难题:如何…...

移动端炼丹新配方:手把手拆解 MobileNetV4 的蒸馏技巧与 JFT 数据增强实战

移动端炼丹新配方:手把手拆解 MobileNetV4 的蒸馏技巧与 JFT 数据增强实战 在移动端AI模型部署的竞技场上,算法工程师们始终面临着一个核心矛盾:如何在有限的算力和数据条件下,让小模型逼近大模型的精度边界?MobileNet…...

用Verilog HDL手把手教你搭建一个4x4脉动阵列(附完整代码与仿真)

从零构建4x4脉动阵列:Verilog实现与深度解析 在硬件加速领域,脉动阵列以其规则的数据流动和高效的并行计算能力,成为矩阵运算、信号处理等场景的理想选择。本文将带您深入理解脉动阵列的工作原理,并手把手实现一个完整的4x4脉动阵…...

华硕路由器AdGuard Home完整部署指南:打造无广告家庭网络终极方案

华硕路由器AdGuard Home完整部署指南:打造无广告家庭网络终极方案 【免费下载链接】Asuswrt-Merlin-AdGuardHome-Installer The Official Installer of AdGuardHome for Asuswrt-Merlin 项目地址: https://gitcode.com/gh_mirrors/as/Asuswrt-Merlin-AdGuardHome-…...

如何用键盘完全替代鼠标?Mouseable终极指南让你效率翻倍

如何用键盘完全替代鼠标?Mouseable终极指南让你效率翻倍 【免费下载链接】mouseable Mouseable is intended to replace a mouse or trackpad. 项目地址: https://gitcode.com/gh_mirrors/mo/mouseable 你是否曾经因为长时间使用鼠标而感到手腕酸痛&#xff…...

安全运营中心中的威胁狩猎与事件调查

安全运营中心中的威胁狩猎与事件调查 在数字化时代,网络安全威胁日益复杂,攻击手段层出不穷。安全运营中心(SOC)作为企业网络安全的核心防线,不仅需要被动响应安全事件,还需主动开展威胁狩猎与事件调查&am…...

ComfyUI-Impact-Pack完整指南:AI图像细节增强的终极解决方案

ComfyUI-Impact-Pack完整指南:AI图像细节增强的终极解决方案 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. 项目地址: ht…...

ABAP ALV删除行后数据又‘复活’?一个方法搞定check_changed_data

ABAP ALV删除行数据同步异常排查指南:从Del键失效到check_changed_data的深度解析 在SAP系统开发中,可编辑ALV报表的数据同步问题堪称"经典陷阱"。许多开发者都遇到过这样的场景:用户信心满满地按下Del键删除行项目,点击…...

5分钟快速上手:AMD Ryzen终极调试工具SMUDebugTool完整指南

5分钟快速上手:AMD Ryzen终极调试工具SMUDebugTool完整指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https…...

短信的“寻址”与“投递”:从信令交互看一条短信的旅程

1. 短信的旅程:从发送到接收的完整路径 你有没有想过,当你按下短信发送按钮后,这条消息究竟经历了怎样的旅程才到达对方手机?这条看似简单的路径背后,其实隐藏着一套精密的通信机制。就像寄快递需要填写收件人地址一样…...

HP ZBook 8 G1i评测:性能强大但有短板,能否满足商务团队需求?

优缺点总结HP的ZBook系列致力于融合工作站级性能与商务特性,14英寸的ZBook G1i便是这一理念的典范。它虽体型厚重、价格高昂,却配备高端硬件,能以低调务实的“商务风”高效完成专业工作流程。优点包括强大的硬件性能、坚固的机身构造、出色的…...

告别‘Hello World’就卡住:Windows/Mac双平台Android Studio保姆级安装与环境变量配置指南

从零到一:Android Studio全平台安装避坑指南 第一次打开Android Studio时,那个旋转的进度条就像开发者生涯的第一道门槛。我清楚地记得三年前那个深夜,盯着"Gradle构建失败"的红字报错,不得不承认——大多数教程都漏掉了…...

3步完成专业演示文稿:PPTist模板系统终极指南

3步完成专业演示文稿:PPTist模板系统终极指南 【免费下载链接】PPTist PowerPoint-ist(/pauəpɔintist/), An online presentation application that replicates most of the commonly used features of MS PowerPoint, allowing for the ed…...

抖音无水印下载终极指南:5分钟掌握专业级资源管理工具

抖音无水印下载终极指南:5分钟掌握专业级资源管理工具 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppo…...

保姆级教程:在CentOS 7上手动安装ClickHouse 21.9.4.35(附目录解析与DBeaver连接)

深度掌控:CentOS 7下手动部署ClickHouse全流程精解 在数据驱动的时代,掌握一款高性能分析型数据库的底层部署逻辑已成为数据工程师的必备技能。不同于一键式安装包带来的"黑箱"体验,手动解压安装ClickHouse能让你真正理解这个列式存…...

Windows 11终极优化指南:免费开源工具Win11Debloat让系统重获新生

Windows 11终极优化指南:免费开源工具Win11Debloat让系统重获新生 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declu…...

基于RISC-V指令集的五级流水线CPU设计与验证:包括详细说明、代码注释及Vivado平台验证

基于riscv指令集的五级流水线CPU设计及其验证 可以上板,且有详细说明和代码注释 基于vivado平台进行验证 包括verilog源代码、汇编验证代码、详细的说明文档(47页)以及PPT Modelsim quartus vivado都跑过,确认代码没有问题 已RISC…...

在Windows上安装Android应用的终极解决方案:APK-Installer完整指南

在Windows上安装Android应用的终极解决方案:APK-Installer完整指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经在Windows电脑上看到喜欢的An…...

AGI变现≠卖API:SITS2026圆桌闭门共识(被11国监管机构引用的“价值锚定四象限”模型首次中文详解)

第一章:AGI变现≠卖API:SITS2026圆桌闭门共识 2026奇点智能技术大会(https://ml-summit.org) 共识的诞生背景 在SITS2026大会期间,来自DeepMind、Anthropic、智谱AI及三家头部产业AI公司的CTO与产品负责人,在“AGI商业化路径”闭…...

从零构建:基于Simulink的导弹制导系统全流程建模实战

1. 导弹制导系统建模基础 导弹制导系统建模可不是简单的搭积木,它涉及到复杂的物理原理和工程实现。我刚开始接触这个领域时,也被各种专业术语搞得晕头转向。但经过多次实践后发现,只要掌握几个核心概念,就能快速入门。 首先得明白…...

Godot-MCP:重构游戏开发效率的AI智能协作框架

Godot-MCP:重构游戏开发效率的AI智能协作框架 【免费下载链接】Godot-MCP An MCP for Godot that lets you create and edit games in the Godot game engine with tools like Claude 项目地址: https://gitcode.com/gh_mirrors/god/Godot-MCP 在游戏开发领域…...

别再死磕公式了!用Python+NumPy手把手带你仿真SS-OCT成像全过程

用PythonNumPy实战SS-OCT成像仿真:从干涉原理到三维重建 光学相干层析技术(OCT)正在重塑医学影像的边界,而扫频光源OCT(SS-OCT)凭借其高速扫描特性成为眼科、皮肤科等领域的明星技术。但当你翻开教科书&…...

从数据遗忘到数字记忆:WeChatMsg如何重塑你的微信聊天价值体系

从数据遗忘到数字记忆:WeChatMsg如何重塑你的微信聊天价值体系 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/…...

Kaggle Notebook保姆级避坑指南:从手机验证到输出路径,新手常踩的5个坑我都帮你填平了

Kaggle Notebook实战避坑指南:从注册验证到路径管理的全流程解决方案 第一次打开Kaggle Notebook时,那种兴奋感我至今记得——免费的GPU资源、海量的开源数据集、可以直接运行的代码模板,一切都显得那么美好。直到我连续收到三次"Verifi…...

Keil的ARMCC和ARMCLANG编译器切换踩坑记:fromelf生成bin文件到底用哪个?

Keil编译器切换实战:ARMCC与ARMCLANG生成bin文件的避坑指南 最近在将项目从Keil MDK的Compiler 5(ARMCC)迁移到Compiler 6(ARMCLANG)时,遇到了一个看似简单却让人头疼的问题——如何正确配置fromelf工具来生…...

探索现代PyQt/PySide界面设计:从开源项目汲取灵感

1. 为什么需要从开源项目学习界面设计? 刚开始用PyQt或PySide做界面时,我总觉得自己设计的UI特别"土"——按钮排列死板、配色辣眼睛、交互反人类。后来发现,直接研究成熟的开源项目是最快的学习方式。这些项目往往经过多次迭代&…...

别再只用ping了!用iperf3给你的CentOS 7服务器做个专业‘体检’(附TCP/UDP带宽测试对比)

别再只用ping了!用iperf3给你的CentOS 7服务器做个专业‘体检’(附TCP/UDP带宽测试对比) 当我们需要评估一台服务器的网络性能时,很多人第一反应就是使用ping命令。确实,ping能告诉我们基本的连通性和延迟情况&#xf…...

3步突破百度网盘下载限制:解析工具让你的下载速度飞起来

3步突破百度网盘下载限制:解析工具让你的下载速度飞起来 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 你是否经常遇到百度网盘下载速度慢如蜗牛,或者…...

前端构建性能优化技巧

前端构建性能优化技巧:提升开发效率的关键 在当今快节奏的前端开发中,构建性能直接影响开发效率和用户体验。随着项目规模扩大,构建时间可能从几秒延长到几分钟,甚至更久。如何优化构建性能,成为开发者必须面对的挑战…...

如何用智能工具10分钟搞定黑苹果配置:OpCore-Simplify终极实战指南

如何用智能工具10分钟搞定黑苹果配置:OpCore-Simplify终极实战指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的黑苹果配置…...