|
实战SAP USER EXIT MBCF0009
SAP通过增强来实现用户自定义代码来增强原有的SAP系统程序, 一般有以下几种增强方式:
USER-EXIT 比较旧的增强方式通过实现在某个位置放置的过程函数来增强, 同一个增强点只能实现一次
Business-Add-ins 一种新的增强技术, 同一个增强点可以有多个不同的实现
Modifications 直接修改SAP系统代码增强
以下文档实现User-Exit增强, Business-Add-ins的实现可以参考我先前发过的文档:
http://www.itpub.net/thread-1202518-1-2.html
增强MBCF0009, 此函数实现可以控制物料异动的库存位置的控制,如:MIGO, MB1A发料时通过程序控制物料的库存位置
创建增强:
事务码CMOD, 也可以通过SMOD加入这个Exit, 但是用CMOD可以一次加入多个相关联的EXIT在一个项目以便于管理:
<ignore_js_op>
创建项目ZMM01后点击 <ignore_js_op>
将MBCF0009 Exit加入到此项目:
<ignore_js_op>
点击 <ignore_js_op>
查看它包含的组件,一个EXIT可能包含多个组件,可以只实现我们需要的那个组件:
<ignore_js_op>
默认EXIT被禁用执行 <ignore_js_op>
激活EXIT:
<ignore_js_op>
双击 <ignore_js_op>
实现EXIT:
<ignore_js_op>
可以看到, 一个USER EXIT增强只不过是SAP在某个程序点上放置一个空函数,因为没有实现所以并没有代码执行,实现之后它就会调用这段代码以达到增强原有系统的功能.
双击ZXMBCU09添加要实现的代码:
<ignore_js_op>
以上是一个简单的示例, 它会修改所有物料的存储位置为0001, 如果你只想测试一下增强的效果,可以激活并运行MB1A输入一个发货检查程序是否可以正确工作
USER EXIT增强一般都是一个函数, SAP会按照某个增强所有实现的功能来传入不同的参数,如:
<ignore_js_op>
EXPORT参数指示可以修改存储位置的值
<ignore_js_op>
以下是一个示例程序, 检查输入的参数值来判断物料位置:
*&---------------------------------------------------------------------*
*& Include ZXMBCU09
*&---------------------------------------------------------------------*
DATA:
mtart TYPE mara-mtart.
SELECT SINGLE mtart INTO mtart
FROM mara
WHERE matnr EQ i_mseg-matnr. "查询物料类型
IF sy-subrc EQ 0.
IF mtart EQ 'ROH'. "当物料类型是ROH时设定库存位置为0107
e_lgort = '0107'.
ELSEIF mtart EQ 'FERT'. "当物料类型是FERT时设定库存位置CP03
e_lgort = '0001'.
ENDIF.
ENDIF.
激活程序后此增强即可完成, 测试程序是否工作:
事务码MB1A:
<ignore_js_op>
<ignore_js_op>
输入物料和数量后按Enter:
<ignore_js_op>
2009-8-20 20:43 上传下载附件 (7.32 KB)
系统自动填入存储位置0107, 因为它的物料类型是ROH
<ignore_js_op>
T-BZ12存储位置自动填入0001
为了让程序更加灵活可以定义参数ID控制它的执行, 一个Parameter ID可以指派给一个用户,它对于SAP程序全局可用,可以为某个字段定义默认值使用,可以通过程序控制它的值以达到某个实用功能:
创建一个Parameter ID:
SM30
<ignore_js_op>
点击 <ignore_js_op>
出现创建ID的画面:
<ignore_js_op>
输入一个参数ID号并确认, 系统提示输入描述:
<ignore_js_op>
点击Save保存记录
我使用这个参数ID控制只有设定ID值为X后才执行自动设定库存位置:
修改用户信息填入参数ID资料, 事务码SU01:
<ignore_js_op>
修改先前创建的增强程序检查参数ID信息:
*&---------------------------------------------------------------------*
*& Include ZXMBCU09
*&---------------------------------------------------------------------*
DATA:
mtart TYPE mara-mtart,
id TYPE sy-repid.
GET PARAMETER ID 'Z02' FIELD id. "获取参数ID值
IF id EQ 'X'. "只有当用户有设定参数ID:Z02值为'X'时才会执行以下程序, 这样可以方便的控制EXIT执行
SELECT SINGLE mtart INTO mtart
FROM mara
WHERE matnr EQ i_mseg-matnr.
IF sy-subrc EQ 0.
IF mtart EQ 'ROH'.
e_lgort = '0107'.
ELSEIF mtart EQ 'FERT'.
e_lgort = '0001'.
ENDIF.
ENDIF.
ENDIF.
完成. 以上程序在SAP IDES中ECC 6.0中测试并用于生产环境只不过程序代码有过更改.
User exit是SAP中比较旧的增强技术,可以通过BADI新的增强技术同样可实现这里所实现的功能, 如实现BADI: MB_MIGO_ITEM_BADI也可修改库存位置
摘自:http://www.itpub.net/forum.php?mod=viewthread&tid=1206557 |
|
|