ME51N ME52N创建修改采购申请时的一个BADI

(2013-07-11 16:50:58)

转载
怎样找badi不做介绍

无论是类里打断点、或者st05跟踪,或者是spro里找都行
我这个badi比较简单,网上一搜或者群里一问大家都知道
ME_PROCESS_REQ_CUST
这里简单实现里面的check
 
FM内具体代码见最后
 
这里说下不借助其他帮助的时候,怎么找到想要的方法,怎么找到需要的值

显示参数

双击进入im_header

一般都会有get_data.此处还有个get_tiems

打开参数

双击查看该结构

就是想要的采购申请号和行项目号,不过描述是:last
item number

说明是一条数据,而不是个表

注意看看后面的描述

然后看get_items,一般情况这两个方法是常用的

会发现re_itmes是
个内表

而且这个内表参考类型,是个类IF_PURCHASE_REQUISITION_ITEM

一般也会有get_data.

一层层跟下去,调用的时候定义类对象,调用其方法即可

另外:ME53N查看时,点编辑按钮,进入编辑状态,可以在ME_PROCESS_REQ_CUST --
open方法中写逻辑

FM内代码:

FUNCTION zlm_fm_me52n.

*"----------------------------------------------------------------------

*"*"Local interface:

*"  IMPORTING

*"     VALUE(IM_HEADER) TYPE REF TO  IF_PURCHASE_REQUISITION
OPTIONAL

*"  EXPORTING

*"     VALUE(E_ITEM_DATA) TYPE  MEREQ_ITEM

*"  EXCEPTIONS

*"      ERROR

*"----------------------------------------------------------------------

*"*"Local interface:

*"  IMPORTING

*"     VALUE(IM_HEADER) TYPE REF TO  IF_PURCHASE_REQUISITION
OPTIONAL

*

*1、  通过Tcode:ME52N进行采购申请修改时,

*     更改行项目物料编码保存时需判断已更换物料是否未冻结物料,

*     如果为冻结物料,则禁止采购申请保存并给与错误提示:行项目XXX新更换物料XXXXXXX已冻结,请选择其他物料。

*2、  冻结物料判断逻辑如下:

*     当物料主数据MARA-MATNR的跨工厂物料状态MARA-MSTAE为非空时表示该物料已经冻结;

*     当物料主数据MARA-MATNR的MARA-LVORM字段为“X”表示该物料已删除

*"----------------------------------------------------------------------

DATA: wa_head     TYPE mereq_header.      
                   
"表头数据:采购申请号等

DATA: it_item     TYPE mmpur_requisition_items.  
             "行项目表:采购申请下各行项目

DATA  wa_item     LIKE LINE OF it_item.    
                   "行项目工作区

DATA  cl_item     TYPE REF TO
if_purchase_requisition_item.    "获取行项目数据的类

DATA  l_item_data TYPE mereq_item.        
                   
"行项目中具体值

DATA: l_matnr     TYPE matnr.

DATA:

BEGIN OF str_dongjie,

mstae     TYPE mstae,

lvorm     TYPE lvorm,

END OF str_dongjie,

wa_dongjie LIKE str_dongjie.

"获取头数据

CALL METHOD im_header->get_data

RECEIVING

re_data = wa_head.

"如果不是ME52N进入,没有采购申请单号,采购申请单号第一位是‘#’,不需要进行后续校验

IF wa_head-banfn(1) = '#'.

RETURN.

ENDIF.

"获取行项目

CALL METHOD im_header->get_items

RECEIVING

re_items = it_item.

"解析行项目

LOOP AT it_item INTO wa_item.

"获取行项目数据的类

cl_item = wa_item-item.

"获取行项目值

CALL METHOD cl_item->get_data

RECEIVING

re_data = l_item_data.

CLEAR l_matnr.

"获取采购申请物料号

SELECT SINGLE matnr

FROM eban

INTO l_matnr

WHERE banfn = wa_head-banfn AND

bnfpo = l_item_data-bnfpo.

"如果修改了物料,检查更新的物料是否被冻结,冻结则输出物料信息、抛出异常并退出

IF l_item_data-matnr <> l_matnr.

SELECT SINGLE mstae lvorm

INTO wa_dongjie

FROM mara

WHERE matnr = l_item_data-matnr.

IF sy-subrc = 0 AND ( wa_dongjie-mstae IS NOT INITIAL OR
wa_dongjie-lvorm = 'X'  ) .

e_item_data = l_item_data.

RAISE error.

RETURN.

ENDIF.

ENDIF.

ENDLOOP.

ENDFUNCTION.

ME51N, ME52N 创建采购申请的一个BADI的更多相关文章

  1. 【ABAP系列】SAP ABAP BAPI_REQUISITION_CREATE创建采购申请

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP BAPI_RE ...

  2. SAP MM 无料号采购申请单中'评估价格'之填写

    SAP MM 无料号采购申请单中'评估价格'之填写 1),SAP系统中,采购申请里的'评估价格'来源有二, a)如果是有物料号的采购,则该价格来自于物料主数据里里的成本价(移动平均价或者标准价),自动 ...

  3. [转载]ME51n,ME52n,ME53n屏幕增强

    原文地址:ME51n,ME52n,ME53n屏幕增强作者:cyzhang811 http://blog.sina.com.cn/s/blog_721b218c0100zch9.html 使用增强:ME ...

  4. SAP MM已经转成PO的采购申请Item依旧可以被删除?

    SAP MM已经转成PO的采购申请Item依旧可以被删除? 笔者测试发现,我们可以删除已产生PO的PR item, 系统只是给一个警告信息,不阻止保存. Purchase orders already ...

  5. 详解EBS接口开发之采购申请导入

    更多内容可以参考我的博客  详解EBS接口开发之采购订单导入 http://blog.csdn.net/cai_xingyun/article/details/17114697 /*+++++++ ...

  6. SAP MM 根据采购订单反查采购申请?

    SAP MM 根据采购订单反查采购申请? 前日微信上某同行发来一个message,说是想知道如何通过采购订单号查询到其前端的采购申请号. 笔者首先想到去检查采购订单相关的常用报表ME2L/ME2M/M ...

  7. 函数使用二:采购申请BAPI_PR_CREATE

    REPORT YTEST01. ***************************采购申请创建*****************************begin DATA:LV_BANFN TY ...

  8. ABAP-增强-MRP运行-根据工厂/父件/子件/供应商拆分采购申请

    最近有个业务需要,MRP运行过程中需要根据生产计划订单/子件/供应商对应关系来拆解采购申请. 1.具体实例: a.基础数据 整车物料:NL1G58420151001219 子件:00000000888 ...

  9. 从0系统学Android--1.3创建你的第一个 Android 项目

    1.3 创建你的第一个 Android 项目 环境搭建完成后,我们就可以写下我们的第一个项目了. 1.3.1 创建 HelloWorld 项目 在 Android Studio 的欢迎页面点击 Sta ...

随机推荐

  1. dogpile搜索引擎

    有发现了一个新的搜索引擎——dogpile,结果还不错.据说是综合了多个搜索引擎的结果,展现了最终的搜索结果. 从百科上介绍说,这是一个[元搜索引擎].不懂,继续百科之,如下: 搜索引擎分为全文搜索引 ...

  2. HTML小技巧将table边框改为细线

    HTML制作新手在用TABLE表格时,会碰到如何改变边线粗线,因为默认的TABLE边线设置即使是1px 是很粗的.因此会使用其他一些方法来制作出细线边框,这里介绍一种利用CSS来实现细线的方法,很有效 ...

  3. extern static const abstract virtual

    extern static const abstract virtual const const.常量,初始化过后值不能再变化的变量.

  4. 九度oj题目&amp;吉大考研10年机试题全解

    吉大考研机试2010年题目 题目一(jobdu1478:三角形的边).    http://ac.jobdu.com/problem.php?pid=1478 给出三个正整数,计算最小的数加上次小的数 ...

  5. from: Java开发必须要知道的知识体系

    from:  https://zhuanlan.zhihu.com/p/21895647 作者:靳洪飞链接:https://zhuanlan.zhihu.com/p/21895647来源:知乎著作权归 ...

  6. > 1366 - Incorrect string value: '\xE6\xB5\x8B\xE8\xAF\x95...' for column 'description' at row 1 字符串格式错误

    mysql 执行insert时报错 > 1366 - Incorrect string value: '\xE6\xB5\x8B\xE8\xAF\x95...' for column 'desc ...

  7. AAuto如何设置字体大小

    在代码视图中(按钮呈现的是设计视图,你再按一下就切换成代码视图了)可以设置缩放比率,右下角也可以设置字体大小   如果你的"设计视图"是灰色不可点击,那是因为你的代码根本没有按钮, ...

  8. codeforces 204(Div.1 A) Little Elephant and Interval(贪心)

    题意: 有一种个位数与最高位数字相等的数字,求在l,r的范围内,这样的数字的个数. 思路: 找下规律就知道当当n>10的时候除去个位以后的答案等于n/10,然后考虑第一个数字是否小于最后一个.小 ...

  9. linux驱动开发重点关注内容--摘自《嵌入式Linux驱动模板精讲与项目实践》

    本文摘自本人拙著 <嵌入式Linux驱动模板精讲与项目实践> 初步看起来Linux设备驱动开发涉及内容非常多,而须要实现驱动的设备千差万别.事实上做一段时间驱动之后回首看来主要就是下面几点 ...

  10. vue 中 this.$router.push() 路由跳转传参 及 参数接收的方法

    传递参数的方法:1.Params 由于动态路由也是传递params的,所以在 this.$router.push() 方法中 path不能和params一起使用,否则params将无效.需要用name ...