标准的表维护生成器,SM30的详细说明:

一、SE11中编辑表的前提条件:

1、注意表的主键,如果没有主键,SM30中无法出现正常的界面。

2、表如果不用数据元素,表的字段文本不会显示,只会显示“+”。

3、表的编辑属性应该选X。

 注意:se11开启编辑模式,才能对“表维护生成器”做编辑。

二、SE11中生成“表维护生成器”视图:

SE11中输入自建表,选择菜单“实用程序”中的表维护生成器,

1、权限对象设置为:&NC&,表示最大权限。

2、函数组填一个,界面自动会创建。

3、开发包选一个。

4、用一步法,点“查找屏幕号”界面自动填充一个屏幕。

5、“记录历程”一定要选“不,或用户,记录历程”

三、SM30中编辑自建表数据:

在SM30中输入自建表名

 就可以用标准的编辑界面维护自己表的数据了

四、把表维护编辑器转为事务代码:

有时候,这个功能,我们还需要下放给用户,我们不能把SM30直接交给,因为SM30权限比较大,有了SM30,用户可以修改全部的自定义表,所以不能把SM30给用户。那有什么好的办法把这么好的功能给用户呢?

新建一个程序中调用下面函数,就可以调用“表的维护界面”了,再把程序和事务赋权给用户,这样用户就可以使用SM30里的标准表维护界面了:

CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
    EXPORTING
      action                       = 'U'
*     CORR_NUMBER                  = '          '
*     GENERATE_MAINT_TOOL_IF_MISSING       = ' '
*     SHOW_SELECTION_POPUP         = ' '
      view_name                    = l_tablename.

 

五、对维护界面字段进行控制:

1、比如有个需求A,新建行数据要自动带出UID和用户名、日期、时间:

在SM30中增加一个事件

有很多事件可以选,这里选05:

2、比如有个需求B,用户修改了多行,我们要对多行数据保存到数据库前检查:

这里需要先得到一张界面的全局内表:

 表数据在EXTRACT变量中,但是是全部字段合并为一行存储,需要转换一下:

FORM FRM_EVENT01 .

  DATA:lt_table TYPE TABLE OF ZTSD0026C.

  LOOP AT EXTRACT.

    APPEND <VIM_EXTRACT_STRUC> TO lt_table.

  ENDLOOP.

ENDFORM.

OK,上面的代码,我们得到了界面的表,放到 lt_table里面。

剩下的就是按自己的规则检查了,最后来一个比较复杂的规则例子,ZTSD0026C表:

*----------------------------------------------------------------------*
***INCLUDE LZTSD0026CF01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_EVENT01
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_EVENT01 .

  DATA:lt_table TYPE TABLE OF ZTSD0026C.
  DATA:gt_excel_check TYPE TABLE OF ZTSD0026C.
  DATA:gt_excel_coll TYPE TABLE OF ZTSD0026C.

  LOOP AT EXTRACT.

    APPEND <VIM_EXTRACT_STRUC> TO lt_table.

  ENDLOOP.

CLEAR  gt_excel_check.
gt_excel_check = lt_table.

"---验证1:根据导入的物料+基本车型+原选装+目标选装不允许重复,重复则报错:“在车型和原选装下目标选装重复”-----
LOOP AT gt_excel_check ASSIGNING FIELD-SYMBOL(<fs>).

  <fs>-ZQUOTA = 0.

ENDLOOP.

SORT gt_excel_check by werks matnr zoptpack_o zoptpack_n.

DELETE ADJACENT DUPLICATES FROM gt_excel_check.

    IF sy-subrc = 0.
       MESSAGE '在车型和原选装下目标选装重复' TYPE 'E' DISPLAY LIKE 'E'.

    ENDIF.


"---验证2:当次导入的物料+基本车型+原选装汇总的配额=100,不为100则报错:“总配额不足100或大于100”不允许保存-----

CLEAR  gt_excel_check.
gt_excel_check = lt_table.

LOOP AT gt_excel_check ASSIGNING FIELD-SYMBOL(<fs1>).

  <fs1>-zoptpack_n = ''.

ENDLOOP.

LOOP AT gt_excel_check ASSIGNING FIELD-SYMBOL(<fs3>).

  COLLECT <fs3> INTO  gt_excel_coll.

ENDLOOP.

LOOP AT gt_excel_coll ASSIGNING FIELD-SYMBOL(<fs2>).

  IF <fs2>-ZQUOTA <> 100.

        MESSAGE <fs2>-werks && ',' && <fs2>-matnr &&  ',' && <fs2>-zoptpack_o && ' 总配额不足100或大于100,请成对处理' TYPE 'E' DISPLAY LIKE 'E'.

       " MESSAGE '666' TYPE 'S' DISPLAY LIKE 'E'.


  ENDIF.

ENDLOOP.

sy-SUBRC = 0.


ENDFORM.

ZTSD0026D表:

*&---------------------------------------------------------------------*
*& 包含               LZTSD0026DF01
*&---------------------------------------------------------------------*
form frm_add_date.
  ZTSD0026D-erdat = sy-datum.
  ZTSD0026D-ERTIM = sy-uzeit.
ENDFORM.

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐