透视ERP增强精Word文档格式.docx
- 文档编号:19199354
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:11
- 大小:83.19KB
透视ERP增强精Word文档格式.docx
《透视ERP增强精Word文档格式.docx》由会员分享,可在线阅读,更多相关《透视ERP增强精Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
*对于以EXIT开头的出口函数,TFDIR-MAND值为C表示此出口函数被激活。
相关增强检查函数:
MODX_FUNCTION_ACTIVE_CHECK:
检查E类用户出口是否被激活。
MODX_MENUENTRY_ACTIVE_CHECK:
检查C类增强激活状况
MODX_SUBSCREEN_ACTIVE_CHECK:
检查S类增强激活状况
你可能会发现,SAP的各模块的任何一个事务码(Tcode对应的标准程序都留下了大量的用户出口,正是SAP灵活的配置功能和强大的用户出口才使其产品轻松应对各种复杂需求成为可能,系统还为能快速找到和激活这些增强进行了有效组织,各类增强被记录在table中并且提供了相关检查函数,从而更方便企业用户。
熟悉ABAP开发的朋友通常都收集了一个可以输入事务码快速找到系统留下的所有出口的程序,下表就是一个检测系统增强被激活的简单参考程序。
*该程序可以检测出系统所有被激活的用户增强.
*
ByStoneFu.on2006/11/07.
Usedtofindoutalltheactivateduser-exitofSAP.
reportzfindactexit.
tables:
modsap,tfdir.
data:
beginofitab_exit
occurs0,
funcnameliketfdir-funcname,
mandliketfdir-mand,
namelikemodsap-name,
endofitab_exit.
field1(30.
selecta~funcnamea~mandb~name
intotableitab_exit
fromtfdirasa
innerjoinmodsapasb
ona~funcname=b~member
wherea~mand='
C'
anda~funcname=b~member.
formatcolorcol_headingintensifiedon.
write:
/1sy-vline,
2'
EnhancementName'
21sy-vline,
22'
ActivatedExitFunction'
95sy-vline.
/(95sy-uline.
loopatitab_exit.
formatcolorcol_normalintensifiedoff.
2itab_exit-namehotspoton,
22itab_exit-funcname,
endloop.
atline-selection.
getcursorfieldfield1.
setparameterid'
MON'
fieldsy-lisel+1(10.
calltransaction'
SMOD'
andskipfirstscreen.
有一种直接有效的查找用户出口增强的方法,就是使用函数MODX_FUNCTION_ACTIVE_CHECK,如图1。
2011-10-618:
15:
45上传
下载附件(42.79KB
图1中的判断语句Iftfdir-mand=aktiv_flag(常数C则出口函数active标志=’X’,表示该用户出口被激活,处理逻辑将从标准程序转入出口函数,在该语句设置断点然后运行任一个事务码,都会调用该函数判断是否存在用户出口。
(四)增强应用实例
业务背景:
如果采购订单已经做了发票校验后,则不再允许用户修改价格。
相关程序:
MM06EFPO_POT_FUELLEN|MM06EF0C_CUSTSCR1_ITEM_SET_DAT
相关Tcode:
SMOD|CMOD
如果没有启动采购审批功能,SAP标准功能是允许用户随时修改采购价格的,不同的企业有对采购价格控制有不同的策略,甲企业规模较小为了省事可能为以后数月的采购开了一个大采购单,如果中途材料价格变动则直接修改价格就行,乙集团则严格控制采购价格,采购价格由总部集中维护,各企业采购员只需要维护采购数量等信息等,真因如此,ERP系统显然不会去禁止用户修改价格,如果企业确实需要如此,则可通过增强实现。
前面已经介绍过如何通过在函数MODX_FUNCTION_ACTIVE_CHECK设置断点跟踪系统每个事务预留的用户出口,你很快将发现增强MM06E005的EXIT_SAPMM06E_017用户出口非常适合此业务背景。
首先来看看增强的EXIT_SAPMM06E_017用户出口(以下称017出口处理流程,Include程序MM06EFPO_POT_FUELLEN被专门用来处理增强出口,调用了子程序CUSTSCR1_ITEM_SET_DATA_
PAI(对应下一级Include程序MM06EF0C_CUSTSCR1_ITEM_SET_DAT,分析Include程序MM06EF0C_CUSTSCR1_ITEM_SET_DAT的代码,如下表,这个程序是从系统原本Copy出来的,注意本人所加的附注粗体部分:
*-----------------------------------------------------------------------
*User-Exitfü
rPositionsfelderversorgen(PAI
FORMcustscr1_item_set_data_paiUSINGim_no_screenLIKEfc_call.
"
770427
DATA:
l_ucommLIKEsy-ucomm,
l_enj_callTYPEc.
STATICS:
first_call(1TYPEcVALUE'
X'
active
LIKEsy-calld.
ENHANCEMENT-POINTCUSTSCR1_ITEM_SET_DATA_PAI_02SPOTSES_MM06EF0C_CUSTSCR1_I_SET_DATINCLUDEBOUND.
*$*$-Start:
CUSTSCR1_ITEM_SET_DATA_PAI_02-------------------------------------------------------$*$*
ENHANCEMENT1
OI0_COMMON_MM06EF0C_ITEM_S_DAT.
"
activeversion
*C5030897I.TwardowskiImplementationofBADIforOGSD
PERFORMOI0_BADISCR1_ITEM_SET_DATA_PAI.
ENDENHANCEMENT.
*$*$-End:
CUSTSCR1_ITEM_SET_DATA_PAI_02-------------------------------------------------------$*$*
IFNOTfirst_callISINITIAL.
CLEARfirst_call.
*注释:
MODX_FUNCTION_ACTIVE_CHECK用来检查017出口是否被激活,如果激活则执行之.
CALLFUNCTION'
MODX_FUNCTION_ACTIVE_CHECK'
EXPORTING
cprogname
='
SAPMM06E'
funcnumber='
017'
IMPORTING
=active
EXCEPTIONS
not_found
=1
OTHERS
=2.
IFNOTsy-subrcISINITIAL.
CLEARactive.
ENDIF.
ENDIF.
CHECKNOTactiveISINITIAL.
IFfc_vorgaEQcva_en.
l_enj_call='
.
ELSE.
l_enj_call=space.
*-DefineData:
lt_usr_tekpoLIKEbekpoOCCURS0,
lt_usr_teketLIKEbeketOCCURS0,
lt_usr_tekknLIKEekknuOCCURS0,
lt_usr_tkomvLIKEtkomvOCCURS0.
*-CopyTables:
lt_usr_tekpo[]=pot[].
lt_usr_teket[]=ett[].
lt_usr_tekkn[]=knt[].
lt_usr_tkomv[]=tkomv[].
l_ucomm=ok-code.
调用出口的一般步骤是先定义数据(DefineData,多为内表或工作区,再将参数赋予这些内表(CopyTables,相当于*建立了原始参数的一个镜象.
*-UserExit:
*如果017出口增强被激活则执行它.
CALLFUNCTION'
EXIT_SAPMM06E_017'
EXPORTING
i_ekpo
=ekpo
i_ekpo_old
=*ekpo
i_ekko
=ekko
i_aktyp
=aktyp
i_bstyp
=ekko-bstyp
i_no_screen=im_no_screen
i_lfa1
=lfa1
i_lfm1
=lfm1
i_rekpo
=rekpo
i_kekpo
=kekpo
i_aekpo
=aekpo
i_reban
=reban
i_mt06e
=mt06e
i_eina
=*eina
i_eine
=*eine
i_komp
=komp
i_ucomm
=l_ucomm
i_enj_call
=l_enj_call
TABLES
tekpo
=lt_usr_tekpo
teket
=lt_usr_teket
tekkn
=lt_usr_tekkn
tkomv
=lt_usr_tkomv
EXCEPTIONS
=0.
ENDFORM.
CUSTSCR1_ITEM_SET_DATA_PAI
上面的程序代码非常简单,相信聪明的读者看了对ERP增强的设计思路会开始有一定了解。
现在你可以通俗理解,增强就是ERP设计者在合适的地点设置了一些合适的游戏规则并提供了一些有意义的游戏给用户自己玩耍!
独乐乐,与人乐乐,孰乐?
好玩的东西应该留点给用户自己乐呵乐呵。
接下来开始编写增强程序,可以使用Tcode:
SMOD直接激活增强或CMOD建立一个项目包含一个或多个增强,如图2,输入增强MM06E005并激活它,然后在EXIT_SAPMM06E_017出口函数中编写代码。
在图2中,我们发现增强MM06E005包括用户出口和屏幕增强(ScreenExit),屏幕增强允许用户在采购订单自定义用户界面,从而使采购订单包含更多企业客户化的信息,这种屏幕增强在固定资产模块中更始发挥到极致。
下载附件(39.03KB
EXIT_SAPMM06E_017包含程序ZXM06U42,程序ZXM06U42示例代码如下表,这段客户化代码逻辑十分简单,为了方便说明,本人注释出该出口函数的输入参数,该出口没有输出参数,也就是说,你只能根据输入参数进行判断而不能更改任何数据:
*增强ZXM06U42的示例代码
*ByStone.Fu
2007/01/02
*"
LokaleSchnittstelle:
*IMPORTING/TABLES是输入的单个参数和输入的内表参数
VALUE(I_EKPOLIKE
EKPOSTRUCTURE
EKPO
VALUE(I_AKTYP
VALUE(I_BSTYPLIKE
EKKO-BSTYP
VALUE(I_NO_SCREEN
VALUE(I_LFA1LIKE
LFA1STRUCTURE
LFA1
VALUE(I_LFM1LIKE
LFM1STRUCTURE
LFM1
VALUE(I_EKKOLIKE
EKKOSTRUCTURE
EKKO
VALUE(I_REKPOLIKE
EKPOOPTIONAL
VALUE(I_KEKPOLIKE
VALUE(I_AEKPOLIKE
VALUE(I_REBANLIKE
EBANSTRUCTURE
EBANOPTIONAL
VALUE(I_MT06ELIKE
MT06ESTRUCTURE
MT06EOPTIONAL
VALUE(I_EINALIKE
EINASTRUCTURE
EINAOPTIONAL
VALUE(I_EINELIKE
EINESTRUCTURE
EINEOPTIONAL
VALUE(I_EKPO_OLDLIKE
VALUE(I_KOMPLIKE
KOMPSTRUCTURE
KOMPOPTIONAL
VALUE(I_UCOMMLIKE
SY-UCOMMOPTIONAL
VALUE(I_ENJ_CALLOPTIONAL
TABLES
TEKPOSTRUCTURE
BEKPOOPTIONAL
TEKETSTRUCTURE
BEKETOPTIONAL
TEKKNSTRUCTURE
EKKNUOPTIONAL
TKOMVSTRUCTURE
KOMVOPTIONAL
----------------------------------------------------------------------
*判断程序代码如下:
DATAZWATEKPOlikeBEKPO.
TABLESEKBE.
*输入的内表参数TEKPO记录该采购单所有的原始旧数据.
*输入的I_EKPO参数表示当前处理的PO行项目,其包含的是采购行项目的最新更新数据.
READTABLETEKPOINTOZWATEKPO
WITHKEYEBELP=I_EKPO-EBELP.
***只对ME21N/22/23才生效.
checkSY-TCODE='
ME22N'
or
SY-TCODE=
'
ME22N'
or
ME23N'
.
***EKBE是POhistory表,如有Q,R表示有发票校验历史,不允许更改价##
SELECT
SINGLE*FROMEKBE
WHEREEBELN=I_EKPO-EBELN
ANDEBELP=I_EKPO-EBELP
AND(BEWTP='
Q'
ORBEWTP='
R'
*如果SY-SUBRC=0表示发票已经校验,不允许更改价格。
CHECKSY-SUBRC=0.
*判断数据更改后新采购行项目的单价是否和从数据库读出的原始行项目单价一致
IFI_EKPO-NETPR<
>
ZWATEKPO-NETPR.
MESSAGE
E001(00with'
采购订单行项目已经进行发票校验,不再允许修改价格
如果你熟悉增强,你会发现一些用户出口都会传入旧数据和更新后的新数据以方便两者比较,和财务模块的替代(Substitution)不同,ERP系统一般对增强保留严谨态度,通常只允许在出口中做检查工作,这一点类似财务模块的检查(Validation)。
(五)再次浅析增强
46上传
下载附件(32.06KB
企业实施ERP的目的之一就是实现各部门信息共享,避免数据孤岛,以一个简单的采购收货为实例,仓库人员只要在收货时输入采购订号,收货日期,物料收货数量和仓位,系统将自动产生各模块数据,对财务数据,系统根据输入的采购订单号找到采购订单主数据中的工厂,通过在组织结构中设置的工厂和公司代码的对应关系找到相应公司代码;
通过收货物料的Valuationclass和收货的移动类型找到对应科目,通过收货数量*采购单价得到本次该料库存金额,通过物料主数据获得业务范围和利润中心,这样财务凭证数据自动收集完毕;
如果物料采用标准价格出现采购差异并将差异科目的模认成本对象对应到获利分析段,则将数据写入利润分析模块等等;
我要说的是,在这些复杂的逻辑背后,任何一个模块收集过程中存在校验,任何校验失败ERP系统都将停止业务交易,比如说校验收货日期不在物料期间或会计期间允许范围,校验失败向用户提示错误,比如预算模块找不到对应基金中心提示错误中止交易等,当所有的校验完毕,系统将数据Commit到数据库,这些校验是系统标准的,而增强则是系统预留给用户的,和系统的校验一样,在任何模块的增强中只要是出现错误都将停止本次业务交易。
在图3中出现的检查/替代/增强/字段移动/推导等关键词,实际上这些东东都可看成系统增强,即使用客户化代码增强标准功能。
有趣的是,SAP的各种增强的代码编写都是极其简单的,象检查/替代/字段移动/推导/派生用户甚至只要简单将对应的源字段和目标字段拖拖拽拽关联关联就行,代码是自动生成的,即使涉及Coding也是非常简单的。
神奇的是,作为SAP顾问你甚至可以对编程和数据库毫不了解,实际上很都SAP顾问的确如此,你只要专注于业务蓝图实现就行,这一点值得国内管理软件设计同行学习,在管理软件设计过程中,同样是细节决定成败。
新一代增强BADI(Tcode:
SE17|SE18
BADI(BusinessAdd-In是一种新的功能增强概念,它使用类、接口及方法等面向对象的概念,采用一种使用面向对象的方法来进行SAP增强。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 透视 ERP 增强