SAP ME21/22/23N 创建增强ME_PROCESS_PO_CUST

news2025/2/5 22:06:53

增强ME_PROCESS_PO_CUST

二、实现方式:实现的方式可以有很多种,这里讲一下用BADI增强ME_PROCESS_PO_CUST实现的方式

第一步:执行事务码se19,在BAdI Name处输入:ME_PROCESS_PO_CUST,然后点“Create Impl”按钮

第二步:在Implementation Name输入ZME_PROCESS_PO_CUST,点OK按钮。

第三步:双击“PROCESS_HEADER”

第四步:在METHOD里编写代码,就可以实现需求的功能了

代码如下:

 METHOD IF_EX_ME_PROCESS_PO_CUST~PROCESS_HEADER.

  DATA:LT_HEADER TYPE MEPOHEADER,
       LV_BSART TYPE EKKO-BSART.

  IF SY-TCODE = 'ME21N' OR SY-TCODE = 'ME22N' OR SY-TCODE = 'ME23N'.
    IF IM_HEADER IS NOT INITIAL.
      CALL METHOD IM_HEADER->GET_DATA
        RECEIVING
          RE_DATA = LT_HEADER.

      CLEAR LV_BSART.
      SELECT SINGLE
             BSART
             INTO LV_BSART
             FROM EKKO
             WHERE EBELN = LT_HEADER-EBELN.
      IF LV_BSART <> 'ZNPI' and LV_BSART <> 'NNPI' .
          IF LT_HEADER-BSART = 'ZNPI'.
            LT_HEADER-SUBMI = 'ZNPI'.
          ELSEIF LT_HEADER-BSART = 'NNPI'.
            LT_HEADER-SUBMI = 'ZNPI'.
          ELSE.
            LT_HEADER-SUBMI = ''.
          ENDIF.

          CALL METHOD IM_HEADER->SET_DATA
              EXPORTING
                IM_DATA = LT_HEADER.
      ENDIF.


      IF LT_HEADER-SUBMI = 'ZNPI'.
           CALL METHOD IM_HEADER->GET_DATA
            RECEIVING
              RE_DATA = LT_HEADER.

           LT_HEADER-BEDAT = SY-DATUM.

           CALL METHOD IM_HEADER->SET_DATA
              EXPORTING
                IM_DATA = LT_HEADER.
      ENDIF.
    ENDIF.
  ENDIF.

ENDMETHOD.
METHOD IF_EX_ME_PROCESS_PO_CUST~PROCESS_SCHEDULE.
*{   INSERT         REDK926367                                        1
IF  SY-UNAME = 'WM_YANGH'.
DATA:SCHEDULE     TYPE MEPOSCHEDULE.
DATA:RE_ITEM      TYPE REF TO IF_PURCHASE_ORDER_ITEM_MM.
DATA:RE_HEADER    TYPE REF TO IF_PURCHASE_ORDER_MM.
DATA:HEADER       TYPE MEPOHEADER.
DATA:ITEM         TYPE MEPOITEM.
 
DATA:BEGIN OF L_WINFNR,
  INFNR TYPE EINA-INFNR,  "采购信息记录
  MATNR TYPE EINA-MATNR,  "物料号
  LIFNR TYPE EINA-LIFNR,  "供应商
  APLFZ TYPE EINE-APLFZ,  "计划交货天数
  END OF L_WINFNR.
DATA:L_TINFNR LIKE L_WINFNR.
DATA:WERKS TYPE ZMARC-WERKS.
 
DATA:BEGIN OF L_DC,
  LIFNR TYPE ZMARC-LIFNR,
  END OF L_DC.
 
INCLUDE MM_MESSAGES_MAC.
 
 
 
"获取行项目---- 计划日期数据
SCHEDULE =   IM_SCHEDULE->GET_DATA( ).
 
"获取行项目-----项目数据
RE_ITEM    = IM_SCHEDULE->GET_ITEM( ).
ITEM       = RE_ITEM->GET_DATA( ).
 
"获取------------抬头数据
RE_HEADER  = RE_ITEM->GET_HEADER( ).
HEADER     = RE_HEADER->GET_DATA( ).
 
"处理数据
IF  ITEM IS NOT INITIAL AND HEADER IS NOT INITIAL.
SELECT SINGLE
  EINA~INFNR
  EINA~MATNR
  EINA~LIFNR
  EINE~APLFZ
  INTO  CORRESPONDING FIELDS OF L_WINFNR
  FROM EINA
  INNER JOIN EINE ON EINA~INFNR = EINE~INFNR
  WHERE EINA~MATNR  = ITEM-MATNR
  AND   EINA~LIFNR  = HEADER-LIFNR.
*  and   eine~ekorg  = header-ekorg.
ENDIF.
 
 
IF HEADER-BSART <> 'ZNBE' AND ITEM-RETPO <> 'X'.
SHIFT HEADER-LIFNR LEFT DELETING LEADING '0'.   "去前导零
IF HEADER-LIFNR+0(2) <> 'DC' AND STRLEN( HEADER-LIFNR ) <>  4.
SCHEDULE-EEIND = HEADER-AEDAT + L_WINFNR-APLFZ.                   "计划交货日期 = 记录的创建日期 + 供应商采购信息记录的计划交货天数
ELSEIF HEADER-LIFNR+0(2) = 'DC' AND STRLEN( HEADER-LIFNR ) = 4.
  WERKS = HEADER-LIFNR.
  "在ZMARC里面根据DC取值供应商
SELECT  SINGLE LIFNR INTO CORRESPONDING FIELDS OF L_DC
  FROM ZMARC
  WHERE WERKS = WERKS
  AND   MATNR = ITEM-MATNR.
 
 
"根据DC的供应商取值采购信息记录
  IF L_DC IS NOT INITIAL.
  SELECT SINGLE
  EINA~INFNR
  EINA~MATNR
  EINA~LIFNR
  EINE~APLFZ
  INTO  CORRESPONDING FIELDS OF L_TINFNR
  FROM EINA
  INNER JOIN EINE ON EINA~INFNR = EINE~INFNR
  WHERE EINA~MATNR  = ITEM-MATNR
  AND   EINA~LIFNR  = L_DC-LIFNR.
  ENDIF.
*  and   eine~ekorg  = header-ekorg.
SCHEDULE-EEIND = HEADER-AEDAT + L_WINFNR-APLFZ + L_TINFNR-APLFZ. "计划交货日期 = 记录的创建日期 + DC采购信息记录的计划交货天数 + DC供应商采购信息记录的计划交货天数
ENDIF.
 
"更新数据
IM_SCHEDULE->SET_DATA( SCHEDULE ).
ENDIF.
ENDIF.
*}   INSERT
ENDMETHOD.

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

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

相关文章

鸿蒙列表,item组件封装传参问题?@ObjectLink 和@Observerd

鸿蒙列表渲染&#xff0c;封装内容组件&#xff0c;进行item传参会报错&#xff1f; class FoodClass {order_id: number 0food_name: string ""food_price: number 0food_count: number 0 }Entry Component struct Demo07 {State message: string Hello World…

C练习——不创建临时变量,交换两个数值

面试可能会问 方法一&#xff08;有缺陷&#xff0c;int 型数值有上限&#xff0c;ab可能超范围&#xff09; // int 型数值有上限&#xff0c;ab可能超范围 #include <stdio.h> int main() {int a 2;int b 3;printf("交换前&#xff1a;%d %d\n", a, b);a…

SpringBoot整合JWT+Spring Security+Redis实现登录拦截(一)登录认证

一、JWT简介 JWT 全称 JSON Web Token&#xff0c;JWT 主要用于用户登录鉴权&#xff0c;当用户登录之后&#xff0c;返回给前端一个Token&#xff0c;之后用户利用Token进行信息交互。 除了JWT认证之外&#xff0c;比较传统的还有Session认证&#xff0c;如何选择可以查看之前…

基于单片机的语音识别自动避障小车(论文+源码)

1.系统设计 此次基于单片机的语音识别自动避障小车&#xff0c;以STC89C52单片机作为系统的主控制器&#xff0c;利用超声波模块来实现小车与障碍物距离的测量并通过LCD液晶显示&#xff0c;当距离低于阈值时会通过WT588语音模块进行报警提示&#xff0c;并且小车会后退来躲避…

知识付费saas租户平台的核心功能设计:打造高效、个性化的学习体验

在在当今数字化时代&#xff0c;知识付费市场正在迅速崛起&#xff0c;而私域流量的概念也日益受到重视。私域流量指的是企业通过自有渠道获取的、能够自由支配的流量&#xff0c;这种流量具有更高的用户粘性和转化率。因此&#xff0c;打造一个基于私域流量的知识付费小程序平…

【C++】并发:异步操作

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍并发&#xff1a;异步操作。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不…

Astro无人车发布,颜值与功能兼修

介绍 Astro是云讷科技&#xff08;深圳&#xff09;有限公司推出的一款高度智能化和轻量化的小型无人车&#xff0c;其外观基于Tesla Cybertruck 1:10比例还原&#xff0c;支持ROS机器人软件系统开发和视觉SLAM、激光SLAM、路径规划、深度学习等应用。 在线文档&#xff1a; h…

【Unity6.0+AI】Sentis加载模型识别手写数字案例实现

按照国际惯例,看效果: 素材准备: 自己在PS中绘制黑底白字手写字体,导出jpg,尺寸28*28! 素材设置 基本步骤 准备工作:从 ONNX Model Zoo 下载手写识别 ONNX 模型文件 【下载模型】MNIST 手写数字识别模型 mnist-12.onnx,并将其拖入项目窗口的 Assets 文件夹。 【下载模…

亿赛通电子文档安全管理系统 user JNDI远程命令执行

产品简介 亿赛通电子文档安全管理系统&#xff0c;&#xff08;简称&#xff1a;CDG&#xff09;是一款电子文档安全加密软件&#xff0c;该系统利用驱动层透明加密技术&#xff0c;通过对电子文档的加密保护&#xff0c;防止内部员工泄密和外部人员非法窃取企业核心重要数据资…

Dbeaver如何连接Oceanbase?

Dbeaver & Oceanbase 一、新增驱动二、连接数据库 一、新增驱动 1、新建驱动 点击数据库 -> 驱动管理器 -> 新建 2、设置驱动 驱动名称可随意填写注意驱动类型要是Generichost:port填写实际的host和port 库中新增下载的oceanbase驱动jar包 二、连接数据库 1、找…

RK3568驱动指南|第八篇 设备树插件-第83章 设备树插件驱动分析实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

JAVA web面试大全(全)

摘自&#xff1a; Java技术栈 公众号 一、JVM篇 &#xff08;含&#xff1a;JVM类加载机制&#xff0c;JVM内存模型&#xff0c;垃圾收集机制&#xff0c;类字节码实现机制&#xff0c;JVM调优案例&#xff0c;GC日志详解等&#xff09; 二、Java并发编程 &#xff08;含&am…

微信小程序---API的promise化

1.实现API promise化 npm install --save miniprogram-api-promise1.0.4 2.构建miniprogram_npm&#xff0c;先把miniprogram_npm删除&#xff0c;再点击工具->构建npm 3. 4.页面使用 async getInfo(){const {data:res} await wx.p.request({method:GET,url:https://ap…

项目管理及系统规划

一、项目管理 1.软件工程基本概念 1.1 软件 &#xff08;1&#xff09;什么是软件&#xff1f; 软件一般认为由三部分组成&#xff1a; • 程序&#xff1a;在运行时&#xff0c;能提供所希望的功能和性能的指令集。 • 数据结构&#xff1a;使程序能够正确运行的数据结构 …

少走十年弯路!!!webpack详解

webpack是什么&#xff1f;&#xff1f; 本质上&#xff0c;webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时&#xff0c;它会在内部从一个或多个入口点构建一个 依赖图(dependency graph)&#xff0c;然后将你项目中所需的每一个模…

【问题系列】同时管理多版本node方案

目录 一、问题描述 二、解决方案 三、详细步骤 3.1 安装NVM&#xff1a; 3.2 运行NVM 3.3 安装Node.js 3.4 切换Node.js版本 3.5 验证安装&#xff1a; 四、拓展 4.1 设置默认 Node.js 版本 4.2 列出已安装的 Node.js 版本 4.3 其他命令介绍 一、问题描述 需要运行…

java:4-7运算符优先级

运算符优先级 运算符有不同的优先级&#xff0c;所谓优先级就是表达式运算中的运算顺序。如右表&#xff0c;上一行运算符总优先于下一行。只有单目运算符&#xff08;第二行&#xff09;、赋值运算符&#xff08;倒数3行&#xff09;是从右向左运算的。一览表, 不要背&#x…

Fiddler抓包,怎么抓抓得好抓得快?

01.什么是 Fiddler? Fiddler 是一个 HTTP 协议调试代理工具&#xff0c;它能够记录并检查所有你的电脑和互联网之间的 HTTP 通讯。Fiddler 提供了电脑端、移动端的抓包、包括 http 协议和 https 协议都可以捕获到报文并进行分析&#xff1b;可以设置断点调试、截取报文进行请…

智慧导游带你“一部手机游景区”——VR版

不知不觉中&#xff0c;元旦小假期快要来了&#xff0c;既然期待了这么久&#xff0c;那肯定不能让假期就这样平淡的“溜走”&#xff0c;各大景区的攻略你都做好了吗&#xff1f;是不是翻遍网上各式各样的图文攻略&#xff0c;依旧感觉没有做到位呢&#xff1f;你可能需要一个…