ABAP MD04增强排除MRP元素
场景
MD04跑出来很多MRP元素,用户想手工控制某些MRP元素不参与运算
分析
增强点还蛮好找的,控制MRP元素是否参与运算用下面的se19三代增强点就可以,打个断点看下MD04进的哪个增强点就行
旧版本的用这个:MD_CHANGE_MRP_DATA
新版本的用这个:MD_ADD_ELEMENTS
这个项目的客户SAP版本比较新,用的MD_ADD_ELEMENTS
只要在这个增强点中找到用户需要排除的行项目,将该行的需求数量置空,同时将参数CH_CHANGED赋值’X’即可
看到这好像还挺简单的,只要拉个报表把MD04的行项目拉出来,把需要排除的行项目打上标记,在增强点读取出需要排除掉的行项目即可
对于一般的MRP元素上述方案完全可行,但是有些MRP元素是多层的,比如工单涉及的其他下层物料MRP元素也需要一起排除,所以此时用户实际上的需求并不是按屏幕上MD04的行项目去排除,而是按订单去排除…跟业务沟通了好些时候才弄清楚,可能我以前没做过MRP增强而且也比较笨
分析完了就开始冻手观察前台的数据了,通过BAPI【MD_STOCK_REQUIREMENTS_LIST_API】输入工厂和物料可以拉取前台MD04的内表(实际MD04也是用的这个BAPI),前台的内表对应BAPI中的mdezx,后台增强的内表对应mdpsx
可以通过mdezx-aline找到对应的mdpsx,aline这个字段就代表前台md04内表mdezx在后台增强内表mdpsx的索引值
现在前后台内表的关联关系也有了,下一步就是排除所有相关的MRP元素对应的单据,业务给我做了条数据,左侧是最上层的工单,右侧是此工单产生的需求,都是要排除掉的
以此工单10000000560为例,增强的内表mdpsx中字段del12,delnr,delps三个字段组合起来可以作为唯一值关联到后续两个MD04的MRP元素,也是找了不少数据做校验才得出这个结论,所以只要能够在MD04增强的内表中组合这三个字段,在后台表中捞取得到就把该行MRP元素排除
实现
我就只放关键代码和自建表了
MRP排除元素自建表,内表mdpsx中字段del12,delnr,delps组合起来形成的主键MRP_ELMENTS才是关键,其他都是没啥用的字段,不重要
报表取数逻辑
" CODE PART1
" 报表内表结构
TYPES:BEGIN OF ty_output,matnr TYPE marc-matnr , " 物料maktx TYPE makt-maktx , " 物料描述werks TYPE marc-werks , " 工厂name1 TYPE t001w-name1 , " 工厂描述del12 TYPE mdps-del12,delnr TYPE mdps-delnr,delps TYPE mdps-delps,excld TYPE c , " 排除mrp_elments TYPE zppt025-mrp_elments , " MRP元素号 DEL12+DELNR+DELPS组合字段flag TYPE c , " 修改标记delb1 TYPE t457t-delb1 . " MRP元素描述INCLUDE STRUCTURE mdez.TYPES:END OF ty_output." CODE PART2 " 根据物料和工厂获取MD04物料信息CALL FUNCTION 'MD_STOCK_REQUIREMENTS_LIST_API'EXPORTINGmatnr = ls_data-matnrwerks = ls_data-werksTABLESmdpsx = lt_mdps " MD04前台内表mdezx = lt_mdez. " 后台增强的内表" 将前后台的表根据aline做匹配,mdezx中数据量会多一些,具体原因不清楚LOOP AT lt_mdez INTO DATA(ls_mdez).lv_tabix = sy-tabix.READ TABLE lt_zppt024 TRANSPORTING NO FIELDS WITH KEY delkz = ls_mdez-delkz BINARY SEARCH.IF sy-subrc = 0.MOVE-CORRESPONDING ls_mdez TO gs_output.READ TABLE lt_mdps INTO DATA(ls_mdps) INDEX gs_output-aline.IF sy-subrc = 0.gs_output = VALUE #( BASE gs_outputdel12 = ls_mdps-del12delnr = ls_mdps-delnrdelps = ls_mdps-delpsmrp_elments = ls_mdps-del12 && ls_mdps-delnr && ls_mdps-delps ). " 重点就是这个字段,后续需要存到数据库中ENDIF.APPEND gs_output TO gt_output.ENDIF.ENDLOOP.
报表成品长这样,用户勾选哪行要删除的话,对应的字段del12,delnr,delps组合起来形成主键mrp_elments保存到数据库
增强代码
METHOD if_ex_md_add_elements~add_change_elements.TYPES:BEGIN OF ty_data,index TYPE i , " 索引mrp_elments TYPE zppt025-mrp_elments , " MRP元素号 DEL12+DELNR+DELPS组合字段END OF ty_data.DATA: lv_index TYPE i,lt_data TYPE TABLE OF ty_data,lr_delkz TYPE RANGE OF zppt024-delkz.IF sy-tcode = 'SE38' OR sy-tcode = 'ZPPR026'. " 跑程序的时候需要拉所有清单,不做过滤EXIT.ENDIF." 获取配置表,拉取需要排除的订单类型" zppt024这个表也是个配置表,用户想在MD04排除某一特定类型的单据,好像是预留单被排除掉了...SELECT*FROM zppt024WHEREexcld = 'X'INTO TABLE @DATA(lt_zppt024).SORT lt_zppt024 BY delkz.lr_delkz[] = VALUE #( FOR lw_zppt024 IN lt_zppt024( sign = 'I' option = 'EQ' low = lw_zppt024-delkz ) )." 拉取所有元素,预处理索引和MRP元素LOOP AT ch_copy_mdpsx INTO DATA(ls_mdps).lt_data = VALUE #( BASE lt_data( index = lv_index + 1mrp_elments = ls_mdps-del12 && ls_mdps-delnr && ls_mdps-delps ) )." 工单特殊处理,下钻的时候有可能带上预留单,所以要通过这个方式筛选出下钻的工单lt_data = VALUE #( BASE lt_data( index = lv_index + 1mrp_elments = ls_mdps-del12 && ls_mdps-delps ) )." 委外订单特殊处理,下钻的时候需要通过AUFVR和POSVR找到上层的委外订单,才能删除下钻的预留单IF ls_mdps-delvr = 'BE' AND ls_mdps-delkz = 'BB'. " 采购 & 外协lt_data = VALUE #( BASE lt_data( index = lv_index + 1mrp_elments = ls_mdps-aufvr && ls_mdps-posvr ) ).ENDIF.lv_index += 1.ENDLOOP.SORT lt_data BY index mrp_elments.DELETE ADJACENT DUPLICATES FROM lt_data COMPARING ALL FIELDS.IF lt_data IS INITIAL.EXIT.ENDIF." 读取需要被排除的mrp_elmentsSELECTtb~index,zppt025~mrp_elmentsFROM zppt025INNER JOIN @lt_data AS tb ON tb~mrp_elments = zppt025~mrp_elments " 其次在MRP元素中删除所有该单据WHEREzppt025~exclude = 'X'INTO TABLE @DATA(lt_zppt025).SORT lt_zppt025 BY index.DELETE ADJACENT DUPLICATES FROM lt_zppt025 COMPARING index.IF lt_zppt025 IS INITIAL.EXIT.ENDIF." 按mrp_elments排除单据LOOP AT lt_zppt025 INTO DATA(ls_zppt025).READ TABLE ch_copy_mdpsx ASSIGNING FIELD-SYMBOL(<fs_mdps>) INDEX ls_zppt025-index.IF sy-subrc = 0.CLEAR <fs_mdps>-mng01.ch_changed = 'X'.ENDIF.ENDLOOP." 按单据类型排除单据IF lr_delkz[] IS NOT INITIAL.LOOP AT ch_copy_mdpsx ASSIGNING <fs_mdps> WHERE delkz IN lr_delkz.CLEAR <fs_mdps>-mng01.ch_changed = 'X'.ENDLOOP.ENDIF.ENDMETHOD.
收工!追番!为美好的世界献上祝福!
相关文章:

ABAP MD04增强排除MRP元素
场景 MD04跑出来很多MRP元素,用户想手工控制某些MRP元素不参与运算 分析 增强点还蛮好找的,控制MRP元素是否参与运算用下面的se19三代增强点就可以,打个断点看下MD04进的哪个增强点就行 旧版本的用这个:MD_CHANGE_MRP_DATA 新…...
构建一个简单的情感分析器:使用Python和spaCy
构建一个简单的情感分析器:使用Python和spaCy 引言 情感分析是自然语言处理(NLP)中的一项重要技术,它可以帮助企业和研究人员理解公众对特定主题或产品的看法。 在本篇文章中,我们将使用Python编程语言和 spaCy 库来构…...

数据库设计实例---学习数据库最重要的应用之一
一、引言【可忽略】 在学习“数据库系统概述”这门课程时,我一直很好奇,这样一门必修课,究竟教会了我什么呢? 由于下课后,,没有拓展自己的眼界,上课时又局限于课堂上老师的讲课水平,…...
数据结构算法题day05
数据结构算法题day05 题目算法思想代码运行代码 题目 从有序表中删除所有其值重复的元素,使表中所有元素的值均不同。算法思想 第一个元素(不重复)依次向后扫描,不重复就保留,重复(不保留)就删…...
关于《Java并发编程之线程池十八问》的补充内容
一、写在开头 在上一篇文章我们写《Java并发编程之线程池十八问》的时候,鉴于当时的篇幅已经过长,很多内容就没有扩展了,在这篇文章里对一些关键知识点进行对比补充。 二、Runnable vs Callable 在创建线程的时候,一般会选用 Runnable 和 Callable 两种方式。 【源码对…...

扒出秦L三个槽点,我不考虑买它了
文 | Auto芯球 作者 | 雷慢 比亚迪的有一个王炸“秦L”,再一次吸引了我注意力, 我上一辆车刚卖不久,最近打算买第二辆车, 二手车和新车都有在看, 我又是一个坚定的实用主义者, 特别是现在的经济环境不…...

【408真题】2009-28
“接”是针对题目进行必要的分析,比较简略; “化”是对题目中所涉及到的知识点进行详细解释; “发”是对此题型的解题套路总结,并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材(2025版&…...

LeetCode---链表
203. 移除链表元素 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 代码示例1:(直接使用原来的链表来进行移除节点操作) //时间复杂度: O(n) //空间复杂度: O(1) class Solu…...
idea 快捷键运用
ctrl d 向下复制一行 shiftalt↑/↓ 向上或者向下移动光标所在行 shiftctrl↑/↓ 向上或者向下移动光标所在行(自动对齐) shift F6 rename包名或者类名或者批量修改变量名(不建议更改项目名,包名也尽量别改) 输入if 然后ctrlshift回车 补全缺失的括号 shift …...
k8s问题
文章目录 本地搭K8s集群 bilibili什么是声明式API?kubectl apply Etcd数据库有什么特性,为什么K8S选用了Etcd数据库?K8S中一个node的生命周期是怎样的?服务发现机制介绍docker的实现原理介绍如果只是使用Linux命名空间进行分离&am…...

串口通信问题排查总结
串口通信问题排查 排查原则: 软件从发送处理到接收处理,核查驱动、控制及发送接收数据是否正常。硬件从发送到接收,针对信号经过的各段,分段核对信号是否正常。示波器、逻辑分析仪。用万用表、示波器、逻辑分析仪等工具…...

【教学类-59-】专注力视觉训练01(圆点百数图)
背景需求: 视觉训练的神奇效果,让你的宝贝成为焦点 - 小红书魔法视觉追踪-视觉训练—— 🔍视觉训练🔍 🔹想要提高宝宝的专注力,视觉训练是个绝佳方法! 🔹让宝宝仔细观察数字的路线&a…...
C 语言实例 - 循环输出26个字母
循环输出 26 个字母。 以下例子我们用变量 letter 来存储当前要输出的字母,然后,使用 for 循环来重复 26 次输出字母,并在每个字母后面加一个空格。 循环内部使用 printf 函数来输出 letter 变量的值,%c 是 printf 的格式控制符…...
qt多语言翻译不生效的原因
假设您有QT语言家的基础知识,假设网上那些所有的问题您都已经排查过了,但依然翻译不生效,那么可以看下这篇帖子,其实就一个问题,变量的生命周期,假设QTranslator是一个函数内的变量,且没有被声明…...

springboot集成达梦数据库8,用springboot+mtbatisplus查询值为空
springboot集成达梦数据库8,用springbootmtbatisplus查询值为空 背景:springboot集成达梦数据库8,用springbootmtbatisplus查询值为空,但是在DB管理工具中是可以查询到数据的。 原因及解决方法:执行添加语句后…...

C语言-----指针数组 \ 数组指针
一 指针数组 用来存放指针的数组 int arr[10]; //整型数组 char ch[5]; //字符数组 int * arr[6]; //存放整型指针的数组 char * arr[5]; //存放字符指针的数组 // 指针数组的应用 int main() {int arr1[] { 1,2,3,4,5 };int arr2[] { 2,3,4,5,6 };int arr3[] { 3,4,…...
Go语言 gRPC 简述
参考文章: 聊聊gRPC的特性和背后设计的原则(一)-腾讯云开发者社区-腾讯云 grpc-我们为什么要用gRpc?gRpc快在哪里?_grpc 优点-CSDN博客 GRPC详解-CSDN博客 1. 什么是gRPC gRPC 是一个高性能 远程调用(RPC)框架&#…...

信息系统项目管理师0136:工具与技术(8项目整合管理—8.9结束项目或阶段—8.9.2工具与技术)
点击查看专栏目录 文章目录 8.9.2 工具与技术 8.9.2 工具与技术 专家判断 结束项目或阶段过程中,应征求具备如下领域相关专业知识或接受过相关培训的个人或小组的意见,涉及领域包括:管理控制;审计;法规与采购…...
appium-driver方法待整理。。
app C:\Users\v-hongweishi\AppData\Local\Programs\Xmind\Xmind.exe deviceName DESKTOP-7NJ1ENB platformName Windows 应用程序ID(AppId)是应用程序用户模型 ID (AppUserModelID),简称 AUMID Outlook …...

Android Ktor 网络请求框架
Ktor 是一个由 JetBrains 开发的用于 Kotlin 编程语言的应用框架,旨在创建高性能的异步服务器和客户端应用程序。由于完全基于 Kotlin 语言,Ktor 能够让开发者编写出简洁、可读性强且功能强大的代码,特别适合那些已经熟悉 Kotlin 的开发人员。…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...

STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...