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

采购申请创建后如何修改?SAP ABAP中BAPI_PR_CHANGE的实用指南与常见问题

SAP ABAP采购申请修改实战BAPI_PR_CHANGE深度解析与避坑指南在SAP MM模块的日常运维中采购申请的修改操作远比创建更考验开发者的技术功底。当业务部门频繁提出能否追加行项目、预算科目填错了、交货日期需要提前等修改需求时BAPI_PR_CHANGE便成为ABAPer手中的瑞士军刀。本文将带您穿透官方文档的抽象描述直击采购申请修改的实战核心。1. 修改与创建的本质差异X结构详解许多开发者初次接触BAPI_PR_CHANGE时容易陷入一个思维陷阱——认为只需复用BAPI_PR_CREATE的数据结构填充新值即可。这种误解往往导致字段未更新的诡异现象。其根本原因在于修改操作需要同时处理数据值结构和更改标识结构两套体系。以采购申请头信息为例正确的结构声明应该包含DATA: ls_prheader TYPE bapimereqheader, 新值结构 ls_prheaderx TYPE bapimereqheaderx. 更改标识结构当需要修改采购申请类型时必须同步设置两个结构体ls_prheader-pr_type NB. 新采购申请类型 ls_prheaderx-pr_type X. 标识此字段需要更新关键区别对比表维度BAPI_PR_CREATEBAPI_PR_CHANGE必填结构仅数据值结构数据值结构X标识结构字段控制所有字段默认生效仅标记X的字段会被更新空值处理空值视为正常输入空值X标识会清空原字段值行项目操作只能新增支持新增/修改/删除实际项目中遇到过这样的案例某开发者试图通过仅更新ls_prheader-deliv_date修改交货日期却始终不生效。根本原因正是遗漏了ls_prheaderx-deliv_date X的设置。这种错误在测试环境可能被忽视但在生产环境会导致严重的业务流程中断。2. 行项目操作的三种武器增删改实战采购申请修改最复杂的部分莫过于行项目管理。与创建不同修改时需要明确指定每个行项目的操作类型这通过item_structure字段控制DATA: lt_pritem TYPE TABLE OF bapimereqitemimp, lt_pritemx TYPE TABLE OF bapimereqitemx. 修改现有行项目10 ls_pritem-preq_item 10. 行号 ls_pritem-quantity 20. 新数量 ls_pritemx-preq_item 10. 行号 ls_pritemx-preq_itemx X. 行号修改标识 ls_pritemx-quantity X. 数量修改标识 APPEND ls_pritem TO lt_pritem. APPEND ls_pritemx TO lt_pritemx. 新增行项目20 ls_pritem-preq_item 20. 新行号 ls_pritem-material MAT100. 物料编码 ls_pritemx-preq_item 20. 新行号 ls_pritemx-preq_itemx I. I表示新增 APPEND ls_pritem TO lt_pritem. APPEND ls_pritemx TO lt_pritemx. 删除行项目30 ls_pritem-preq_item 30. 待删除行号 ls_pritemx-preq_item 30. 待删除行号 ls_pritemx-preq_itemx D. D表示删除 APPEND ls_pritem TO lt_pritem. APPEND ls_pritemx TO lt_pritemx.注意删除操作只需提供行号和操作类型无需填充其他字段值。但务必确保该行项目未被后续业务流程引用否则会导致修改失败。3. 账户分配修改的特殊处理逻辑当采购申请涉及K类成本中心或A类资产的账户分配时修改逻辑需要特别注意成本中心分配修改示例DATA: lt_praccount TYPE TABLE OF bapimereqaccount, lt_praccountx TYPE TABLE OF bapimereqaccountx. 修改行项目10的账户分配 ls_praccount-preq_item 10. 行号 ls_praccount-serial_no 01. 账户分配序号 ls_praccount-costcenter CC1002. 新成本中心 ls_praccountx-preq_item 10. 行号 ls_praccountx-serial_no 01. 账户分配序号 ls_praccountx-costcenter X. 修改标识 APPEND ls_praccount TO lt_praccount. APPEND ls_praccountx TO lt_praccountx.资产账户分配的特殊性资产号修改需要同时更新asset_no和sub_number字段必须保持serial_no的连续性删除中间序号会导致错误资产类采购申请修改后需要重新触发折旧计算在最近一个制药行业项目中就曾因为资产账户分配的serial_no序列中断导致BAPI报错Account assignment inconsistency。最终通过先查询ME5A获取完整账户分配明细再重新构建修改序列才解决问题。4. 高频错误排查与性能优化4.1 典型错误代码解析错误代码可能原因解决方案E110采购申请不存在检查BANFN输入确认采购申请未归档E147字段XX不可修改检查字段状态配置(OMJJ)E302数据被锁定检查ME22N是否有人正在编辑E476行项目已发生收货需先取消相关物料凭证4.2 性能优化技巧批量操作优化 错误做法循环调用BAPI LOOP AT lt_pr_list INTO ls_pr. CALL FUNCTION BAPI_PR_CHANGE... ENDLOOP. 正确做法内表批量处理 CALL FUNCTION BAPI_PR_CHANGE EXPORTING number lv_banfn TABLES return lt_return pritem lt_all_items pritemx lt_all_itemsx.减少不必要字段更新只包含真正需要修改的字段避免对未变化的字段设置X标识使用BAPI_PR_GETDETAIL先获取当前状态锁机制最佳实践 先尝试获取锁 CALL FUNCTION ENQUEUE_EREQNN EXPORTING banfn lv_banfn EXCEPTIONS foreign_lock 1. IF sy-subrc 0. 获取锁成功后再执行修改 CALL FUNCTION BAPI_PR_CHANGE... 提交后立即释放锁 CALL FUNCTION DEQUEUE_EREQNN EXPORTING banfn lv_banfn. ENDIF.5. 增强开发实战用户出口与BADI应用标准BAPI有时无法满足特殊业务需求此时需要借助SAP提供的扩展机制用户出口示例 在PRCH0001中增强字段校验逻辑FORM userexit_save_document_prepare. IF bapi_te_mereqheader-pur_group WS1 AND bapi_te_mereqheader-plant 1000. MESSAGE e888(sabapdocu) WITH WS1采购组不允许创建1000工厂的采购申请. ENDIF. ENDFORM.BADI实现方案CLASS zcl_badi_pr_change IMPLEMENTATION. METHOD if_ex_me_process_requisition~change_at_save. 在保存前校验自定义字段 IF cs_preq_itemx-zz_contract IS INITIAL AND cs_preq_item-zz_contract_flg X. MESSAGE e001(zmm) WITH 合同采购必须输入合同编号. ENDIF. ENDMETHOD. ENDCLASS.在汽车行业项目中曾通过BADI实现了采购申请修改时的供应商资质校验——当修改后的采购金额超过阈值时自动检查供应商的ISO认证状态。这种深度定制正是SAP灵活性的体现。

相关文章:

采购申请创建后如何修改?SAP ABAP中BAPI_PR_CHANGE的实用指南与常见问题

SAP ABAP采购申请修改实战:BAPI_PR_CHANGE深度解析与避坑指南 在SAP MM模块的日常运维中,采购申请的修改操作远比创建更考验开发者的技术功底。当业务部门频繁提出"能否追加行项目"、"预算科目填错了"、"交货日期需要提前"…...

VSPD虚拟串口的5个高级用法:从基础调试到TCP/IP设备模拟

VSPD虚拟串口的5个高级用法:从基础调试到TCP/IP设备模拟 在嵌入式开发和工业自动化领域,串口通信调试一直是工程师们的日常挑战。传统物理串口受限于硬件连接、端口数量和环境干扰,而虚拟串口技术则打破了这些限制。VSPD作为业内知名的虚拟串…...

Conan实战:如何把本地编译好的cJSON库(Linux ARM平台)一键发布为团队共享包

Conan实战:从本地构建到团队共享的ARM平台cJSON库高效封装指南 在嵌入式开发领域,跨平台库的管理往往伴随着复杂的工具链配置和漫长的编译等待。当你的团队在为Linux ARM平台开发时,是否经历过这样的场景:每位新成员加入项目时&am…...

智能车电磁循迹:从吴恩达的机器学习课到我的小车,聊聊归一化为什么比差比和更香

智能车电磁循迹:为什么归一化比差比和更值得选择? 第一次参加智能车比赛时,我和大多数新手一样选择了电磁循迹方案。面对差比和与归一化两种处理方法,我毫不犹豫地选择了看起来更简单的差比和——毕竟数值结果看起来差不多&#x…...

如何用 checkValidity 触发 HTML5 表单的原生校验提示

checkValidity()仅返回布尔值,不触发红框和气泡提示;reportValidity()才真正触发UI反馈,但需控件有校验属性、未禁用、已挂载且表单未设novalidate。调用 checkValidity() 本身不会显示错误提示这是最常被误解的一点:checkValidit…...

Grafana Loki 从零到一:Windows环境部署、配置与典型问题排查指南

1. 为什么选择Grafana Loki? 如果你正在寻找一个轻量级的日志聚合系统,Grafana Loki绝对值得考虑。相比传统的ELK方案,Loki最大的特点就是"只索引日志元数据"的设计理念。简单来说,它不会像Elasticsearch那样对日志内容…...

Phi-3-mini-4k-instruct-gguf开源镜像优势:免编译、低显存、高兼容的GGUF部署方案

Phi-3-mini-4k-instruct-gguf开源镜像优势:免编译、低显存、高兼容的GGUF部署方案 1. 模型简介 Phi-3-Mini-4K-Instruct是一个38亿参数的轻量级开源大语言模型,采用GGUF格式提供。作为Phi-3系列的一员,这个模型经过专门优化,在保…...

V4L2抓图失败?RK3588/RK356X Camera调试实战排查指南

1. 当V4L2抓图失败时,你该从哪里开始排查? 最近在调试RK3588/RK356X平台的Camera时,遇到了一个让人头疼的问题:使用V4L2抓取图像时总是失败。这种情况在嵌入式开发中很常见,特别是当你刚接触这个平台时。我记得第一次遇…...

给你的STM32F429项目加个“网口”:基于CubeMX的LAN8720以太网模块驱动与LWIP应用实战

STM32F429以太网实战:从CubeMX配置到LWIP应用开发 当你需要为工业传感器节点或智能设备添加远程监控能力时,以太网通信往往是可靠的选择。本文将手把手带你完成STM32F429与LAN8720的硬件协同设计,并通过CubeMX快速构建包含FreeRTOS和LWIP的工…...

Qwen3-4B-Thinking多场景落地:电商客服+教育答疑+IT文档生成三合一

Qwen3-4B-Thinking多场景落地:电商客服教育答疑IT文档生成三合一 1. 模型简介与核心能力 Qwen3-4B-Thinking-2507-Gemini-2.5-Flash-Distill是一个基于vLLM部署的高效文本生成模型,通过在大约5440万个由Gemini 2.5 Flash生成的token上进行训练&#xf…...

Qianfan-OCR应用场景:跨境电商商品说明书多语言文本提取

Qianfan-OCR应用场景:跨境电商商品说明书多语言文本提取 1. 跨境电商文档处理的痛点与机遇 跨境电商行业每天需要处理海量的商品说明书,这些文档通常具有以下特点: 多语言混合(中文英文目标国语言)复杂排版&#xf…...

华硕梅林路由器DNSMASQ保姆级配置:为你的Switch NS打造专属‘纯净’网络环境

华硕梅林路由器DNSMASQ深度配置:为Switch打造高性能游戏网络 家里有Switch的玩家都懂,联机对战突然卡顿、下载游戏速度慢如蜗牛、时不时弹出广告有多烦人。今天我们就来彻底解决这些问题——不是简单地屏蔽几个域名,而是为你的Switch打造一个…...

告别枯燥理论!用Proteus 8.15 + 51汇编亲手“点亮”硬件:数码管、按键、LED全搞定

从零玩转Proteus仿真:51汇编驱动LED/数码管/按键的实战指南 当看到LED随着你的代码指令亮起熄灭,数码管显示你编写的数字,按键触发预设功能时,那种亲手操控硬件的成就感是理论学习无法替代的。Proteus仿真平台配合经典的51单片机汇…...

Rust的match中的模式覆盖检查与编译器在穷尽性验证中的智能推断

Rust语言以其强大的类型系统和内存安全性著称,而其中的模式匹配(match)机制更是其核心特性之一。match不仅能让代码逻辑更加清晰,还能通过编译器的穷尽性检查确保所有可能的情况都被处理。这种模式覆盖检查与编译器的智能推断相结…...

Android13 Activity启动流程深度解析:从进程间通信到窗口树构建

1. Android13 Activity启动流程概述 Activity启动是Android应用开发中最基础也最核心的机制之一。在Android 13中,这个流程涉及多个系统进程的协作,主要包括: 应用进程:发起Activity启动请求SystemServer进程:通过Acti…...

用PYNQ-Z2开发板,从零实现一个HDMI彩条信号发生器(Vivado 2023.1工程分享)

用PYNQ-Z2开发板从零构建HDMI彩条发生器:Vivado 2023.1全流程实战 当你第一次拿到PYNQ-Z2这块集成了FPGA与ARM处理器的开发板时,最令人兴奋的莫过于通过硬件编程实现视觉输出。本文将带你完成一个经典入门项目——HDMI彩条信号发生器,这个项目…...

Git版本控制工具(Linux运维CICD版)

git概述 Git诞生:分布式项目管理工具,目前整个行业内最流行最受欢迎的项目版本管理工具 开发者:Linus Torvalds Linux的创始人 Linux诞生以后,全球很多开发者开发了很多个版本的Linux,提交给Linus Torvalds Linus To…...

研一在雁栖湖,研二在中关村:中科院网信中心读研的真实体验与避坑指南

研一在雁栖湖,研二在中关村:中科院网信中心读研的真实体验与避坑指南 第一次踏入雁栖湖校区时,湖面泛起的粼粼波光与远处连绵的青山构成了一幅令人屏息的画面。作为中科院计算机网络信息中心(以下简称"网信中心"&#x…...

【Element】el-select远程搜索进阶:自定义搜索逻辑与后端接口高效联调实战

1. el-select远程搜索的核心场景与痛点 在实际企业级应用中,下拉选择器往往需要处理海量动态数据。比如电商平台的后台管理系统,可能需要从数十万商品中快速定位某个SKU;CRM系统要实时搜索客户数据库;城市选择器需要支持拼音首字母…...

Fortify SCA 24.4 安装与配置全攻略:从零开始搭建代码安全防线

Fortify SCA 24.4 安装与配置全攻略:从零开始搭建代码安全防线 在当今快速迭代的软件开发环境中,代码安全已成为不可忽视的重要环节。作为一款专业的静态代码分析工具,Fortify SCA 24.4能够帮助开发团队在早期发现潜在的安全漏洞,…...

从电位器到内部温度传感器:一个STM32 ADC多通道采集的完整项目实战(含代码与波形分析)

从电位器到内部温度传感器:一个STM32 ADC多通道采集的完整项目实战(含代码与波形分析) 当你第一次拿到STM32开发板时,可能会被它丰富的功能所吸引,尤其是内置的ADC(模数转换器)模块。这个看似简…...

Multisim仿真 vs 洞洞板实战:我的双路稳压电源项目翻车与复盘全记录

Multisim仿真与洞洞板实战:双路稳压电源的翻车启示录 仿真软件里完美的电路设计,在现实中却频频翻车——这几乎是每个硬件工程师的必经之路。去年冬天,我也经历了这样一场"理想很丰满,现实很骨感"的双路稳压电源项目。当…...

深入RK3588 DTS:从频率电压表看Rockchip芯片的能效设计思路与调试技巧

深入RK3588 DTS:从频率电压表看Rockchip芯片的能效设计思路与调试技巧 当工程师拿到一块RK3588开发板时,最先关注的往往是性能参数——四核Cortex-A76加四核Cortex-A55的配置,高达2.4GHz的主频,以及强大的NPU算力。但真正决定这颗…...

别再死记硬背了!用LM358电平灯电路,轻松搞懂运放‘电压比较器’模式

用LM358电平灯电路直观理解运放电压比较器 当教科书上密密麻麻的运算放大器公式让你头晕目眩时,不妨试试这个能"看得见"的学习方法——用LM358搭建一个电平灯电路。这个看似简单的小项目,却能让你对电压比较器的工作原理产生前所未有的直观理解…...

从Spring Security到Spring Security OAuth2:权限异常处理配置的‘平滑迁移’实战指南

从Spring Security到OAuth2资源服务器:异常处理架构的平滑升级策略 当你的应用从单体架构向微服务演进时,安全框架的升级往往成为最容易被忽视的痛点。特别是在处理401和403这类权限异常时,许多团队发现原本在Spring Security中运行良好的异常…...

实战避坑指南:用Confluence或SharePoint搭建符合FDA/ISO要求的DHFDMR数字文档体系

医疗器械数字文档体系实战:用Confluence/SharePoint构建合规DHF&DMR 在医疗器械行业,合规性从来不是可选项而是生存线。当FDA审核员敲开您公司大门时,能否在五分钟内调出三年前某款产品的设计验证报告?当ISO13485认证机构要求…...

别再一上来就写复位了!聊聊Xilinx FPGA里那些“不用复位”的寄存器

颠覆认知:Xilinx FPGA中那些无需复位的寄存器设计艺术 在FPGA设计领域,复位信号的使用几乎成了一种宗教仪式般的惯例——每个工程师在编写Verilog代码时,都会条件反射地为所有寄存器添加复位逻辑。这种"宁可错杀一千,不可放过…...

【多无人机路径规划】粒子群优化算法PSO求解复杂三维环境下多无人机动态避障路径规划问题(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

GooglePlay开发者风控规避指南:2026账号稳定性策略

如何有效规避 Google Play 开发者风控风险:2026账号稳定性实践思路随着 Google Play 审核与风控机制逐步升级,开发者在应用上架过程中面临的不确定性明显增加。尤其是新注册开发者账号,更容易在早期阶段触发风控检测,从而出现审核…...

Real-Anime-Z惊艳效果:不同肤色/人种/年龄在2.5D风格下的普适性表现

Real-Anime-Z惊艳效果:不同肤色/人种/年龄在2.5D风格下的普适性表现 1. 引言:探索2.5D风格的独特魅力 Real-Anime-Z是一款基于Stable Diffusion的写实向动漫风格大模型,它巧妙地在真实质感与动漫美感之间找到了平衡点。这种被称为"2.5…...