版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
小技巧透视ERP增强(一)什么是增强(Enhancement)?简单地说,增强就是ERP系统中标准程序的出口,在该出口中由用户根据企业实际需求编写客户化逻辑代码。增强是ERP系统设计时考虑到企业实际的流程有可能和系统默认标准流程不同,在标准流程框架下专门留的接口,每个接口对应一个客户化函数,这些出口函数有标准处理程序传入的参数和输出参数,用户可根据系统输入参数做条件编写适合本企业流程的逻辑,然后通过输出参数传输回。(二)用户增强分类SAP的用户增强通常包括下面3类。1.E类:Enhancementexits,即通常所谓的用户出口(User_exit)用户出口也叫功能出口(FunctionExit)。使用Tcode:SE37搜索EXIT*,找到的函数大都是做系统预留的出口函数,前面说过,用户出口是标准程序留给用户的接口,标准程序通常不允许用户任意修改,如果修改需要申请AccessKey,而且修改标准程序可能导致的错误ERP公司通常是不负责的。在SAP中,自定义的程序通常以保留字Y或Z开头,因此,出口函数中都预包含了一个Z开头的程序。2.C类:GUI接口(GUIcodes)3.S类:屏幕增强(ScreenExit)比如,在建立采购订单,工单和固定资产主数据时,系统都预留屏幕增强,也就是说允许用户自定义用户输入界面并编写相应的输入输出处理程序。在各类增强中,可能还用户自己定义结构或表格,系统对应类型T类。比如增强MM06E005允许用户建立两个结构CI_EKKODB和CI_EKPODB。接下来将重点介绍功能出口的应用。(三)组织用户增强相关增强表格:MODSAP:增强表格TFDIR:包括出口函数在内的所有函数表(E类)CUATEXTS:修改GVI界面,界面:菜单文本被客户(C类)
TSDIR:动态程序区CALLCUSTOMERSUBSCREEN(S类)*对于以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_exitoccurs0,funcnameliketfdir-funcname,mandliketfdir-mand,namelikemodsap-name,endofitab_exit.data:field1(30).selecta~funcnamea~mandb~nameintotableitab_exitfromtfdirasainnerjoinmodsapasbona~funcname=b~memberwherea~mand='C'anda~funcname=b~member.formatcolorcol_headingintensifiedon.write:/1sy-vline,2'EnhancementName',21sy-vline,22'ActivatedExitFunction',95sy-vline.write:/(95)sy-uline.loopatitab_exit.formatcolorcol_normalintensifiedoff.write:/1sy-vline,2itab_exit-namehotspoton,21sy-vline,22itab_exit-funcname,95sy-vline.endloop.atline-selection.getcursorfieldfield1.setparameterid'MON'fieldsy-lisel+1(10).calltransaction'SMOD'andskipfirstscreen.有一种直接有效的查找用户出口增强的方法,就是使用函数MODX_FUNCTION_ACTIVE_CHECK,如图1。图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."770427DATA:l_ucommLIKEsy-ucomm,l_enj_callTYPEc.STATICS:first_call(1)TYPEcVALUE'X',activeLIKEsy-calld.ENHANCEMENT-POINTCUSTSCR1_ITEM_SET_DATA_PAI_02SPOTSES_MM06EF0C_CUSTSCR1_I_SET_DATINCLUDEBOUND.*$*$-Start:CUSTSCR1_ITEM_SET_DATA_PAI_02-------------------------------------------------------$*$*ENHANCEMENT1OI0_COMMON_MM06EF0C_ITEM_S_DAT."activeversion*C5030897I.TwardowskiImplementationofBADIforOGSDPERFORMOI0_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'EXPORTINGcprogname='SAPMM06E'funcnumber='017'IMPORTINGactive=activeEXCEPTIONSnot_found=1OTHERS=2.IFNOTsy-subrcISINITIAL.CLEARactive.ENDIF.ENDIF.CHECKNOTactiveISINITIAL.IFfc_vorgaEQcva_en.l_enj_call='X'.ELSE.l_enj_call=space.ENDIF.*-DefineData:DATA: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'EXPORTINGi_ekpo=ekpoi_ekpo_old=*ekpoi_ekko=ekkoi_aktyp=aktypi_bstyp=ekko-bstypi_no_screen=im_no_screen"770427i_lfa1=lfa1i_lfm1=lfm1i_rekpo=rekpoi_kekpo=kekpoi_aekpo=aekpoi_reban=rebani_mt06e=mt06ei_eina=*einai_eine=*einei_komp=kompi_ucomm=l_ucommi_enj_call=l_enj_callTABLEStekpo=lt_usr_tekpoteket=lt_usr_tekettekkn=lt_usr_tekkntkomv=lt_usr_tkomvEXCEPTIONSOTHERS=0.ENDFORM."CUSTSCR1_ITEM_SET_DATA_PAI上面的程序代码非常简单,相信聪明的读者看了对ERP增强的设计思路会开始有一定了解。现在你可以通俗理解,增强就是ERP设计者在合适的地点设置了一些合适的游戏规则并提供了一些有意义的游戏给用户自己玩耍!独乐乐,与人乐乐,孰乐?好玩的东西应该留点给用户自己乐呵乐呵。接下来开始编写增强程序,可以使用Tcode:SMOD直接激活增强或CMOD建立一个项目包含一个或多个增强,如图2,输入增强MM06E005并激活它,然后在EXIT_SAPMM06E_017出口函数中编写代码。在图2中,我们发现增强MM06E005包括用户出口和屏幕增强(ScreenExit),屏幕增强允许用户在采购订单自定义用户界面,从而使采购订单包含更多企业客户化的信息,这种屏幕增强在固定资产模块中更始发挥到极致。EXIT_SAPMM06E_017包含程序ZXM06U42,程序ZXM06U42示例代码如下表,这段客户化代码逻辑十分简单,为了方便说明,本人注释出该出口函数的输入参数,该出口没有输出参数,也就是说,你只能根据输入参数进行判断而不能更改任何数据:*增强ZXM06U42的示例代码*ByStone.Fu2007/01/02*"*"LokaleSchnittstelle:*IMPORTING/TABLES是输入的单个参数和输入的内表参数*"IMPORTING*"VALUE(I_EKPO)LIKEEKPOSTRUCTUREEKPO*"VALUE(I_AKTYP)*"VALUE(I_BSTYP)LIKEEKKO-BSTYP*"VALUE(I_NO_SCREEN)*"VALUE(I_LFA1)LIKELFA1STRUCTURELFA1*"VALUE(I_LFM1)LIKELFM1STRUCTURELFM1*"VALUE(I_EKKO)LIKEEKKOSTRUCTUREEKKO*"VALUE(I_REKPO)LIKEEKPOSTRUCTUREEKPOOPTIONAL*"VALUE(I_KEKPO)LIKEEKPOSTRUCTUREEKPOOPTIONAL*"VALUE(I_AEKPO)LIKEEKPOSTRUCTUREEKPOOPTIONAL*"VALUE(I_REBAN)LIKEEBANSTRUCTUREEBANOPTIONAL*"VALUE(I_MT06E)LIKEMT06ESTRUCTUREMT06EOPTIONAL*"VALUE(I_EINA)LIKEEINASTRUCTUREEINAOPTIONAL*"VALUE(I_EINE)LIKEEINESTRUCTUREEINEOPTIONAL*"VALUE(I_EKPO_OLD)LIKEEKPOSTRUCTUREEKPOOPTIONAL*"VALUE(I_KOMP)LIKEKOMPSTRUCTUREKOMPOPTIONAL*"VALUE(I_UCOMM)LIKESY-UCOMMOPTIONAL*"VALUE(I_ENJ_CALL)OPTIONAL*"TABLES*"TEKPOSTRUCTUREBEKPOOPTIONAL*"TEKETSTRUCTUREBEKETOPTIONAL*"TEKKNSTRUCTUREEKKNUOPTIONAL*"TKOMVSTRUCTUREKOMVOPTIONAL*"----------------------------------------------------------------------*判断程序代码如下:DATAZWATEKPOlikeBEKPO.TABLESEKBE.*输入的内表参数TEKPO记录该采购单所有的原始旧数据.*输入的I_EKPO参数表示当前处理的PO行项目,其包含的是采购行项目的最新更新数据.READTABLETEKPOINTOZWATEKPOWITHKEYEBELP=I_EKPO-EBELP.***只对ME21N/22/23才生效.checkSY-TCODE='ME22N'orSY-TCODE='ME22N'orSY-TCODE='ME23N'.***EKBE是POhistory表,如有Q,R表示有发票校验历史,不允许更改价##SELECTSINGLE*FROMEKBEWHEREEBELN=I_EKPO-EBELNANDEBELP=I_EKPO-EBELPAND(BEWTP='Q'ORBEWTP='R').*如果SY-SUBRC=0表示发票已经校验,不允许更改价格。CHECKSY-SUBRC=0.*判断数据更改后新采购行项目的单价是否和从数据库读出的原始行项目单价一致IFI_EKPO-NETPR<>ZWATEKPO-NETPR.MESSAGEE001(00)with'采购订单行项目已经进行发票校验,不再允许修改价格ENDIF.如果你熟悉增强,你会发现一些用户出口都会传入旧数据和更新后的新数据以方便两者比较,和财务模块的替代(Substitution)不同,ERP系统一般对增强保留严谨态度,通常只允许在出口中做检查工作,这一点类似财
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医院调动岗位申请书(8篇)
- 勤俭节约从我做起广播稿(8篇)
- 网络钓鱼识别模型研究-洞察分析
- 犀角地黄丸药效安全性-洞察分析
- 网站速度提升策略-洞察分析
- 压缩算法优化研究-洞察分析
- 虚拟现实室内设计体验-洞察分析
- 稀土压延材料性能测试-洞察分析
- 历史新课程改革的心得(5篇)
- 游戏技术发展趋势-洞察分析
- 超星尔雅学习通《当代大学生国家安全教育》章节测试答案
- 2024年广东省广州市白云区来穗人员服务管理局招聘历年高频难、易错点500题模拟试题附带答案详解
- GB/T 10433-2024紧固件电弧螺柱焊用螺柱和瓷环
- (新版)高级考评员职业技能鉴定考试题库(含答案)
- 2024年密码行业职业技能竞赛参考试题库500题(含答案)
- 项目农民工考勤管理制度
- 10.2+文化自信与文明交流互鉴【中职专用】高一思想政治《中国特色社会主义》(高教版2023基础模块)
- 专项训练:坐标的变化(30题)(原卷版+解析)
- 2024年新人教版一年级数学上册课件 第六单元 复习与关联 1.数与运算
- 2024年中考英语专项复习训练:语法填空20篇【附解析】
- 中国华能招聘笔试题库2024
评论
0/150
提交评论