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.

收工!追番!为美好的世界献上祝福!

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

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

相关文章

《广告数据定量分析》读书笔记之理论/概论

《广告数据定量分析 如何成为一位厉害的广告优化师》 一、理论/概况 1.广告优化中的统计学&#xff1a; &#xff08;1&#xff09;获取推广相关数据&#xff1b; &#xff08;2&#xff09;将数据处理为需要的指标如转化率、roi等进行分析其投放效果&#xff1b; &#x…

flask的一些简要基础问答

1. Flask 中的 blinker&#xff1a; Blinker 是一个用于信号分发的库。在 Flask 中&#xff0c;它主要用于实现事件的发送和接收机制。通过使用 blinker&#xff0c;可以方便地在不同的组件之间进行通信和协调&#xff0c;当特定的事件发生时&#xff0c;可以触发相关的处理函…

NVIDIA Jetson 上编译opencv 4.9.0

直接上命令 cmake .. \ -DCMAKE_C_COMPILER/usr/bin/gcc-7 -DCMAKE_CXX_COMPILER/usr/bin/g-7 \ -DCMAKE_BUILD_TYPERelease \ -DCMAKE_INSTALL_PREFIX/usr/local \ -DOPENCV_ENABLE_NONFREE1 \ -DBUILD_opencv_python21 \ -DBUILD_opencv_python31 \ -DCUDA_TOOLKIT_ROOT_DIR…

C++STL容器系列(三)list的详细用法和底层实现

目录 一&#xff1a;介绍二&#xff1a;list的创建和方法创建list方法 三&#xff1a;list的具体用法3.1 push_back、pop_back、push_front、pop_front3.2 insert() 和 erase()3.3 splice 函数 四&#xff1a;list容器底层实现4.1 list 容器节点结构5.2 list容器迭代器的底层实…

【window 安装 service bus explorer】

安装ServiceBusExplorer 首先需要安装Chocolatey安装 service bus explorer 首先需要安装Chocolatey 参考&#xff1a; https://chocolatey.org/install#install-step2 以管理员身份运行powershell输入Get-ExecutionPolicy回车&#xff0c;若显示 Restricted输入Set-Executio…

CentOS8环境下FTP服务器安装与配置

在本指南中&#xff0c;我们将一步步介绍如何在CentOS 8环境下安装和配置一个FTP服务器。FTP&#xff08;文件传输协议&#xff09;是一种网络传输协议&#xff0c;用于在网络中的计算机之间传输文件。虽然现在有更安全的传输方式&#xff0c;如SFTP或FTP over SSL&#xff0c;…

python -【一】基础语法

python 基础语法 一. 基础数据类型 常用的 6 种数据类型 类型描述说明数字&#xff08;Number&#xff09;int&#xff0c;float&#xff0c;complex(复数)&#xff0c;bool复数&#xff1a;4 3j&#xff0c;j 表示复数字符串&#xff08;String&#xff09;文本&#xff1…

小短片创作-理论知识(三)

1、抗锯齿 1.相机移动的时候出现锯齿 2.当1个像素在三角形边缘的时候&#xff0c;可能取值为白色&#xff0c;也可能取值为黑色&#xff0c;表现出来就是闪烁&#xff0c;或锯齿 3.如果我们通过超采样将1个像素变成4个像素进行计算&#xff0c;得到的结果就会更准确&#x…

Codeforces Round 945 (Div. 2) C. Cat, Fox and Double Maximum 题解 贪心 构造

Cat, Fox and Double Maximum 题目描述 Fox loves permutations! She came up with the following problem and asked Cat to solve it: You are given an even positive integer n n n and a permutation † ^\dagger † p p p of length n n n. The score of another …

电脑显示不出网络

你的电脑是否在开机后显示不出网络&#xff0c;或者有网络消失的现象&#xff1f;今天和大家分享我学到的一个办法&#xff0c;希望对大家有用。 分析出现这类现象的原因&#xff1a;可能是电脑网卡松动了&#xff0c;电脑中存在静电流。 解决办法&#xff1a;先将电脑关机&am…

深度学习(一)

深度学习&#xff08;一&#xff09; 一、实验目的 掌握前馈全连接神经网络&#xff0c;具体包括&#xff1a; (1) 前馈全连接神经网络的网络结构 (2) 前馈神全连接经网络的工作原理 (3) 前馈全连接神经网络的代码实现 二、实验内容 1. 导入常用工具包 2. 数据导入与数据…

大模型对齐方法笔记二:基于Rank的对齐方法RRHF和PRO

文章目录 RRHFPRO将RLHF嫁接到PRO 参考资料 RRHF RRHF(Rank Responses to align Human Feedback)出自2023年4月的论文《RRHF: Rank Responses to Align Language Models with Human Feedback without tears》&#xff0c;是较早提出的不需要使用PPO来对齐人类偏好的方法。 设…

nginx安装部署问题

记一次nginx启动报错问题处理 问题1 内网部署nginx&#xff0c;开始执行make&#xff0c;执行不了&#xff0c;后面装了依赖的环境 yum install gcc-c 和 yum install -y pcre pcre-devel 问题2&#xff0c;启动nginx报错 解决nginx: [emerg] unknown directive “stream“ in…

Keil5 ~STM32报错Solutions#1

一、error: #268: declaration may not appear after executable statement in block

tar 详细说明

tar命令在Unix和类Unix系统中被广泛用于打包和压缩文件。以下是对tar命令的详细说明&#xff1a; 一、命令概述 tar命令的名称来源于“tape archive”&#xff08;磁带存档&#xff09;&#xff0c;最初设计用于在磁带上创建备份。现在&#xff0c;它已成为在Unix和类Unix系统…

Thingsboard规则链:Customer Details节点详解

在物联网&#xff08;IoT&#xff09;平台Thingsboard的规则引擎体系中&#xff0c;Customer Details节点是一个功能强大的组件&#xff0c;它专为处理与客户&#xff08;Customer&#xff09;实体相关的综合信息而设计。这个节点不仅能够读取客户的基本属性&#xff0c;还能提…

【NumPy】全面解析subtract函数:高效数组减法指南

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

GPT-4o:人工智能新纪元的开端

引言 近年来&#xff0c;人工智能领域的发展日新月异&#xff0c;特别是在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;各种生成预训练模型不断推陈出新。自OpenAI发布GPT-3以来&#xff0c;生成预训练模型在文本生成、语言理解等任务中展现了强大的能力。近期&a…

报表中的某个单元格如何绑定实时数据库的统计值?

在报表中绑定实时数据库的统计值通常涉及几个关键步骤。具体方法可能因所使用的报表工具、数据库类型和技术栈而异&#xff0c;但以下是一个一般性的流程&#xff1a; 1. 确定数据源&#xff1a; 首先&#xff0c;你需要明确你的报表要连接哪个数据库或数据源。这可能是关系型…

网工内推 | 国企信息安全工程师,CISP认证优先

01 浙江省公众信息产业有限公司 &#x1f537;招聘岗位&#xff1a;安全运营工程师 &#x1f537;职责描述&#xff1a; 1. 负责公司内部安全运营平台及其子系统的安全事件管理、事件发现分析、应急响应和系统维护等&#xff1b; 2. 负责风险和漏洞管理&#xff0c;包括漏洞预…