-
E. Function exits:函数增强(最常用,在SAP上线很多年后都会使用,如:销售单VA02中,对PO长度限制在10-15位之间,且不能为中文与其他特殊字符,还有如对PO采购日期不能晚于交货日期的检验等,这些都会用来函数增强)
-
C.GUI codes:GUI增强
-
S. Screens:屏幕增强 增强屏幕的调用是使用CALL CUSTOMER-SUBSCREEN(不常用,一般在上线之初才会做,上线后不常用)
-
T. Tabes:表结构增强
*&---------------------------------------------------------------------*
*& Report ZLC_FIND_EXIT
*&---------------------------------------------------------------------*
*&根据T-CODE / 程序名查询出口、BADI增强
*&---------------------------------------------------------------------*
REPORT ZLC_FIND_EXIT.
TABLES : TSTC,
TADIR,
MODSAPT,
MODACT,
TRDIR,
TFDIR,
ENLFDIR,
SXS_ATTRT ,
TSTCT.
DATA : JTAB LIKE TADIR OCCURS 0 WITH HEADER LINE.
DATA : FIELD1(30).
DATA : V_DEVCLASS LIKE TADIR-DEVCLASS.
PARAMETERS : P_TCODE LIKE TSTC-TCODE,
P_PGMNA LIKE TSTC-PGMNA.
DATA WA_TADIR TYPE TADIR.
START-OF-SELECTION.
IF NOT P_TCODE IS INITIAL.
SELECT SINGLE * FROM TSTC WHERE TCODE EQ P_TCODE.
ELSEIF NOT P_PGMNA IS INITIAL.
TSTC-PGMNA = P_PGMNA.
ENDIF.
IF SY-SUBRC EQ 0.
SELECT SINGLE * FROM TADIR
WHERE PGMID = 'R3TR'
AND OBJECT = 'PROG'
AND OBJ_NAME = TSTC-PGMNA.
MOVE : TADIR-DEVCLASS TO V_DEVCLASS.
IF SY-SUBRC NE 0.
SELECT SINGLE * FROM TRDIR
WHERE NAME = TSTC-PGMNA.
IF TRDIR-SUBC EQ 'F'.
SELECT SINGLE * FROM TFDIR
WHERE PNAME = TSTC-PGMNA.
SELECT SINGLE * FROM ENLFDIR
WHERE FUNCNAME = TFDIR-FUNCNAME.
SELECT SINGLE * FROM TADIR
WHERE PGMID = 'R3TR'
AND OBJECT = 'FUGR'
AND OBJ_NAME EQ ENLFDIR-AREA.
MOVE : TADIR-DEVCLASS TO V_DEVCLASS.
ENDIF.
ENDIF.
SELECT * FROM TADIR INTO TABLE JTAB
WHERE PGMID = 'R3TR'
AND OBJECT IN ('SMOD', 'SXSD')
AND DEVCLASS = V_DEVCLASS.
SELECT SINGLE * FROM TSTCT
WHERE SPRSL EQ SY-LANGU
AND TCODE EQ P_TCODE.
FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
WRITE:/(19) 'Transaction Code - ',
20(20) P_TCODE,
45(50) TSTCT-TTEXT.
SKIP.
IF NOT JTAB[] IS INITIAL.
WRITE:/(105) SY-ULINE.
FORMAT COLOR COL_HEADING INTENSIFIED ON.
* Sorting the internal Table
SORT JTAB BY OBJECT.
DATA : WF_TXT(60) TYPE C,
WF_SMOD TYPE I,
WF_BADI TYPE I,
WF_OBJECT2(30) TYPE C.
CLEAR : WF_SMOD, WF_BADI , WF_OBJECT2.
* Get the total SMOD.
LOOP AT JTAB INTO WA_TADIR.
AT FIRST.
FORMAT COLOR COL_HEADING INTENSIFIED ON.
WRITE:/1 SY-VLINE,
2 'Enhancement/ Business Add-in',
41 SY-VLINE ,
42 'Description',
105 SY-VLINE.
WRITE:/(105) SY-ULINE.
ENDAT.
CLEAR WF_TXT.
AT NEW OBJECT.
IF WA_TADIR-OBJECT = 'SMOD'.
WF_OBJECT2 = 'Enhancement' .
ELSEIF WA_TADIR-OBJECT = 'SXSD'.
WF_OBJECT2 = ' Business Add-in'.
ENDIF.
FORMAT COLOR COL_GROUP INTENSIFIED ON.
WRITE:/1 SY-VLINE,
2 WF_OBJECT2,
105 SY-VLINE.
ENDAT.
CASE WA_TADIR-OBJECT.
WHEN 'SMOD'.
WF_SMOD = WF_SMOD + 1.
SELECT SINGLE MODTEXT INTO WF_TXT
FROM MODSAPT
WHERE SPRSL = SY-LANGU
AND NAME = WA_TADIR-OBJ_NAME.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WHEN 'SXSD'.
* For BADis
WF_BADI = WF_BADI + 1 .
SELECT SINGLE TEXT INTO WF_TXT
FROM SXS_ATTRT
WHERE SPRSL = SY-LANGU
AND EXIT_NAME = WA_TADIR-OBJ_NAME.
FORMAT COLOR COL_NORMAL INTENSIFIED ON.
ENDCASE.
WRITE:/1 SY-VLINE,
2 WA_TADIR-OBJ_NAME HOTSPOT ON,
41 SY-VLINE ,
42 WF_TXT,
105 SY-VLINE.
AT END OF OBJECT.
WRITE : /(105) SY-ULINE.
ENDAT.
ENDLOOP.
WRITE:/(105) SY-ULINE.
SKIP.
FORMAT COLOR COL_TOTAL INTENSIFIED ON.
WRITE:/ 'No.of Exits:' , WF_SMOD.
WRITE:/ 'No.of BADis:' , WF_BADI.
ELSE.
FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
WRITE:/(105) 'No userexits or BADis exist'.
ENDIF.
ELSE.
FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
WRITE:/(105) 'Transaction does not exist'.
ENDIF.
AT LINE-SELECTION.
DATA : WF_OBJECT TYPE TADIR-OBJECT.
CLEAR WF_OBJECT.
GET CURSOR FIELD FIELD1.
CHECK FIELD1(8) EQ 'WA_TADIR'.
READ TABLE JTAB WITH KEY OBJ_NAME = SY-LISEL+1(20).
MOVE JTAB-OBJECT TO WF_OBJECT.
CASE WF_OBJECT.
WHEN 'SMOD'.
SET PARAMETER ID 'MON' FIELD SY-LISEL+1(10).
CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.
WHEN 'SXSD'.
SET PARAMETER ID 'EXN' FIELD SY-LISEL+1(20).
CALL TRANSACTION 'SE18' AND SKIP FIRST SCREEN.
ENDCASE.
只能根据T-CODE查询出口增强
*TABLES : TSTC, TADIR, MODSAPT, MODACT, TRDIR, TFDIR, ENLFDIR.
*TABLES : TSTCT.
*DATA : JTAB LIKE TADIR OCCURS 0 WITH HEADER LINE.
*DATA : FIELD1(30).
*DATA : V_DEVCLASS LIKE TADIR-DEVCLASS.
*PARAMETERS : P_TCODE LIKE TSTC-TCODE OBLIGATORY.
*
*SELECT SINGLE * FROM TSTC WHERE TCODE EQ P_TCODE.
*IF SY-SUBRC EQ 0.
* SELECT SINGLE * FROM TADIR WHERE PGMID = 'R3TR'
* AND OBJECT = 'PROG'
* AND OBJ_NAME = TSTC-PGMNA.
* MOVE : TADIR-DEVCLASS TO V_DEVCLASS.
* IF SY-SUBRC NE 0.
* SELECT SINGLE * FROM TRDIR WHERE NAME = TSTC-PGMNA.
* IF TRDIR-SUBC EQ 'F'.
* SELECT SINGLE * FROM TFDIR WHERE PNAME = TSTC-PGMNA.
* SELECT SINGLE * FROM ENLFDIR WHERE FUNCNAME =
* TFDIR-FUNCNAME.
* SELECT SINGLE * FROM TADIR WHERE PGMID = 'R3TR'
* AND OBJECT = 'FUGR'
* AND OBJ_NAME EQ ENLFDIR-AREA.
*
* MOVE : TADIR-DEVCLASS TO V_DEVCLASS.
* ENDIF.
* ENDIF.
* SELECT * FROM TADIR INTO TABLE JTAB
* WHERE PGMID = 'R3TR'
* AND OBJECT = 'SMOD'
* AND DEVCLASS = V_DEVCLASS.
* SELECT SINGLE * FROM TSTCT WHERE SPRSL EQ SY-LANGU AND
* TCODE EQ P_TCODE.
* FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
* WRITE:/(19) 'Transaction Code - ',
* 20(20) P_TCODE,
* 45(50) TSTCT-TTEXT.
* SKIP.
* IF NOT JTAB[] IS INITIAL.
* WRITE:/(95) SY-ULINE.
* FORMAT COLOR COL_HEADING INTENSIFIED ON.
* WRITE:/1 SY-VLINE,
* 2 'Exit Name',
* 21 SY-VLINE ,
* 22 'Description',
* 95 SY-VLINE.
* WRITE:/(95) SY-ULINE.
* LOOP AT JTAB.
* SELECT SINGLE * FROM MODSAPT
* WHERE SPRSL = SY-LANGU AND
* NAME = JTAB-OBJ_NAME.
* FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
* WRITE:/1 SY-VLINE,
* 2 JTAB-OBJ_NAME HOTSPOT ON,
* 21 SY-VLINE ,
* 22 MODSAPT-MODTEXT,
* 95 SY-VLINE.
* ENDLOOP.
* WRITE:/(95) SY-ULINE.
* DESCRIBE TABLE JTAB.
* SKIP.
* FORMAT COLOR COL_TOTAL INTENSIFIED ON.
* WRITE:/ 'No of Exits:' , SY-TFILL.
* ELSE.
* FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
* WRITE:/(95) 'No User Exit exists'.
* ENDIF.
*ELSE.
* FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
* WRITE:/(95) 'Transaction Code Does Not Exist'.
*ENDIF.
*
*AT LINE-SELECTION.
* GET CURSOR FIELD FIELD1.
* CHECK FIELD1(4) EQ 'JTAB'.
* SET PARAMETER ID 'MON' FIELD SY-LISEL+1(10).
* CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.
各T-CODE增强总结:
计划订单转生产订单增强
WORKORDER_UPDATE~INITIALIZE,此时生产订单还没有生成,不能报错,没有生产订单号。CO40,CO41,COHV,CO02等各种TCODE都会进去。
AT_SAVE可以报错
CO01
保存订单时增强 PPCO0001,不能报错,否则会dump
CO02
已报工订单禁止修改,使用CMOD增强,在增强PPCO0019的出口EXIT_SAPLCOVG_001中
没有权限时禁止查看订单成本,使用隐式增强
生产订单下达增强,使用BADI增强,在WORKORDER_UPDATE方法AT_RELEASE中
生产订单修改记录,CMOD增强,在增强PPCO0001的出口EXIT_SAPLCOBT_001中
修改抬头数据-EXIT_SAPLCOZV_001
生产订单功能状态变更-SE18-WORKORDER_UPDATE-方法REORG_STATUS_ACT_CHECK
方法-BEFORE_UPDATE-变更前后对比检查
CO11N增强
报工检查,使用CMOD增强,在增强CONFPP02的出口EXIT_SAPLCORF_102中。修改数据后回车、点击保存时触发,报工BAPI会触发
报工检查,使用CMOD增强,在增强CONFPP03。填写订单号回车时触发(之后不再触发)
屏幕增加字段,输入员工号查询员工姓名,CMOD,在增强CONFPP07的出口EXIT_SAPLCORF_105中
CO13取消报工增强
CMOD,CONFPP05,EXIT_SAPLCORF_105,报工和取消报工都会触发
VA02
销售订单审核后禁止修改,使用USER_EXIT增强,在程序MV45AFZZ的FORM USEREXIT_SAVE_DOCUMENT_PREPARE中
MM01增强
保存时触发(可用于检查数据,无法修改) CMOD增强MGA00001 ,出口EXIT_SAPLMGMU_001
在此增强中报E类型消息时,输出时会自动转成TYPE ”E’ DISPLAY LIKE ‘S’.
只有修改部分的数据,没有物料的全部数据
BADI_MATERIAL_REF 可用于创建时填充默认值(只有在MM01创建时才会触发增强)
BADI_MATERIAL_CHECK 可用于保存时检查,可以修改部分值(查看changing参数)
添加物料主数据附加数据
ME11
保存时触发:BADI ME_INFOREC_SEND
ME22N
采购订单审核后禁止修改,使用CMOD增强,在增强MM06E005的出口EXIT_SAPMM06E_007中
注:此出口只适用于ME22N修改的情况,ME21N第一次保存时TEKPO表是空的
控制净价字段需要权限才能修改,隐式增强
ME29N、ME28
取消二级审核后才允许取消一级审核,使用CMOD增强,在增强ME06E005的出口EXIT_SAPMM06E_007中
MD16,CO40等
计划订单转生产订单增强,使用隐式增强
MB51
根据权限显示物料部分金额,使用隐式增强
MIGO
收货检查报错,使用CMOD增强,在增强MBCF0002的出口EXIT_SAPMM07M_001中
在增强MBCF0002中,I_MSEG为输入采购订单号回车后生成的显示在屏幕上的物料凭证信息,E_SGTXT为要保存进MSEG-SGTXT的数据;此增强在点击“检查”和“过账”时触发,输出一条物料凭证项目,可用于检查;可写入项目短文本
收货时写入物料凭证项目文本,使用BADI增强,在MB_MIGO_ITEM_BADI方法ITEM_MODIFY中
收货时保存物料凭证到WMS,MB_CF001,EXIT_SAPLMBMB_001;此增强在过账、COMMIT WORK之前,IN UPDATE TASK触发,输出XMKPF(内表),XMSEG(内表),不能修改只能输出,且不能DEBUG和MESSAGE;要想DEBUG,必须在UPDATE TASK之前启动DEBUG,且如果启动了DEBUG就无法ROLL BACK了
创建物料凭证保存时检查:MB_DOCUMENT_BADI的MB_DOCUMENT_BEFORE_UPDAT
VK11
保存条件价格记录时检查,使用BADI增强,在SD_COND_SAVE_A中
增强BADI名SD_COND_DETAIL ,在点击保存时触发