SAP ABAP SM30 自定义检查
SM30自定义表数据维护
SAP的自定义表可以生成表维护视图后,通过SM30进行维护。生成标准的表维护有时候不满足用户需求;我们可以手动调整生成的屏幕。 常见的调整有根据字段获取描述,,更改屏幕属性,增加记录修改字段,增加内容检查。
因业务需求,处理了一个自定义增加批准状态字段的设定,批准状态标记后,SM30维护这边不能进行修改和删除,同时因为有日期字段,为限定日期字段的重叠,增加了自定义检查;通过调用函数来跳转到SM30维护画面,所以进行了选择条件传值。
主要是在PAI和PBO中手动增加MODULE.
如果只是需要显示时获取字段描述,例如物料描述,可在屏幕上增加全局变量GV_MAKTX,然后在PAO中LISTE_SHOW_LISTE后面增加MODELE get_maktx.
如果需获取其他表的值且该值需保存在自定义表中或者类似存储当前用户,日期时间的更改记录时,则需在PAI的MODULE LISTE_UPDATE_LISTE.前增加自己的取值MODULE,否则获取值会不能存入自定义表,同时程序激活时需要整个函数组激活,否则也会出现默认值设定无效现象。
表维护视图建好后,如果需要维护事务码可以通过SE93新建事务码封装SM30,也可以建程序调用函数VIEW_MAINTENANCE_CALL
表维护视图MODULE
PBO
LOOP AT EXTRACT WITH CONTROL
TCTRL_ZXXXX CURSOR NEXTLINE.
MODULE LISTE_SHOW_LISTE.
MODULE GET_MAKTX."获取物料描述
MODULE CHANG_EDIT."动态修改屏幕属性
ENDLOOP.
MODULE CLEAR_HEAD.
-
调用VIEW_MAINTENANCE_CALL时如果设定SEL,新建数据时也会保留限定
-
所以有时需要清空选择标记字段
&---------------------------------------------------------------------
*& Module CLEAR_HEAD OUTPUT
&---------------------------------------------------------------------
MODULE CLEAR_HEAD OUTPUT.
CLEAR X_HEADER-SELECTION.
ENDMODULE. " CLEAR_HEAD OUTPUT -
获取物料描述
SELECT SINGLE MAKTX
FROM MAKT
INTO GV_MAKTX
WHERE MATNR = ZXXX-MATNR
AND SPRAS = SY-LANGU.
动态更改行的输入属性,不允许输入
IF ZXXXX-PZZT IS NOT INITIAL .
LOOP AT SCREEN.
IF SCREEN-NAME = ‘ZXXXX-PRICE’
OR SCREEN-NAME = ‘ZXXXX-WAERS’
.
SCREEN-INPUT = ‘0’.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
PAI
PROCESS AFTER INPUT.
MODULE LISTE_EXIT_COMMAND AT EXIT-COMMAND.
MODULE LISTE_BEFORE_LOOP.
LOOP AT EXTRACT.
MODULE LISTE_INIT_WORKAREA.
CHAIN.
FIELD ZXXXX-WERKS .
FIELD ZXXXX-LGORT .
FIELD ZXXXX-UMLGO .
FIELD ZXXXX-LIFNR .
FIELD ZXXXX-MATNR .
FIELD ZXXXX-KSCHL .
FIELD ZXXXX-DATAB .
FIELD ZXXXX-DATBI .
FIELD ZXXXX-YMATNR .
FIELD ZXXXX-YMAKTX .
FIELD ZXXXX-PRICE .
FIELD ZXXXX-PZZT .
FIELD ZXXXX-BZ1 .
MODULE SET_UPDATE_FLAG ON CHAIN-REQUEST.
ENDCHAIN.
FIELD VIM_MARKED MODULE LISTE_MARK_CHECKBOX.
CHAIN. "自定义检查
FIELD ZXXXX-WERKS .
FIELD ZXXXX-LGORT .
FIELD ZXXXX-UMLGO .
FIELD ZXXXX-LIFNR .
FIELD ZXXXX-MATNR .
FIELD ZXXXX-KSCHL .
FIELD ZXXXX-DATAB .
MODULE CHECK_DATBI."自定义检查及值获取
ENDCHAIN.
CHAIN.
FIELD ZXXXX-WERKS .
FIELD ZXXXX-LGORT .
FIELD ZXXXX-UMLGO .
FIELD ZXXXX-LIFNR .
FIELD ZXXXX-MATNR .
FIELD ZXXXX-KSCHL .
FIELD ZXXXX-DATAB .
MODULE LISTE_UPDATE_LISTE.
ENDCHAIN.
ENDLOOP.
- MODULE LISTE_AFTER_LOOP.
MODULE LISTE_AFTER_LOOP_ADD."增加按钮删除时检查
&---------------------------------------------------------------------
*& Module CHECK_DATBI INPUT
&---------------------------------------------------------------------
MODULE CHECK_DATBI INPUT.
IF ZXXXX-DATBI < ZXXXX-DATAB.
MESSAGE E