SAP使用SM30功能对表中某部分数据进行查取,维护,检查
功能实现:
1、只获取表ISHAND为X记录的数据
2、对表进行维护数据,只维护ISHAND为X记录的数据。
需要对表前提部分设置:
数据表需要修改为可维护数据视图
表设置为:菜单:实用程序=>表维护生成器 (如下我已经设置好了)
其中函数组先在SE37的菜单:转到=>函数组=>创建组,先创建好。
1、只获取表ISHAND为X记录的数据
在SE38中创建程序:查询字段ISHAND= ‘X’的记录
源码如下:
REPORT zpro_xy_lwcl.
DATA:gt_vimsellist LIKE TABLE OF vimsellist WITH HEADER LINE.
DATA:gv_ishand TYPE zfpmx-ishand.
gv_ishand = 'Y'."只显示表里类型为'Y'的数据
gt_vimsellist-viewfield = 'ISHAND'.
gt_vimsellist-operator = 'EQ'.
gt_vimsellist-value = gv_ishand.
APPEND gt_vimsellist.
CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
EXPORTING
action = 'U'
view_name = 'ZFPMX' "要显示的表
complex_selconds_used = 'X'
TABLES
dba_sellist = gt_vimsellist.
2、对表进行维护数据,只维护ISHAND为X记录的数据
在SE11表维护界面的菜单:实用程序=>表维护生成器。再在菜单:环境=>修改=>事件。中增加01、05事件
并维护NEW_DATA、CHANGE_SAVE分别对就05 01事件,双击编辑器进入事件编辑(会先提示是否创建某个include文件,确认就行),然后在里面增加以上两个方法。源码如下:
*----------------------------------------------------------------------*
***INCLUDE LZGRP_ZFPMXF01.
*----------------------------------------------------------------------*
FORM new_data.
zfpmx-ishand = 'Y'.
zfpmx-create_date = sy-datum.
zfpmx-create_time = sy-uzeit.
zfpmx-create_user = sy-uname.
DATA:meg TYPE char30.
IF zfpmx-bukrs IS INITIAL.
meg = '公司不能为空'.
MESSAGE meg TYPE 'E' DISPLAY LIKE 'E' .
RETURN.
ENDIF.
IF zfpmx-gjahr IS INITIAL.
meg = '年度不能为空'.
MESSAGE meg TYPE 'E' DISPLAY LIKE 'E' .
RETURN.
ENDIF.
IF zfpmx-monat IS INITIAL.
meg = '期间不能为空'.
MESSAGE meg TYPE 'E' DISPLAY LIKE 'E' .
RETURN.
ENDIF.
IF zfpmx-fpnum IS INITIAL.
meg = '发票号不能为空'.
MESSAGE meg TYPE 'E' DISPLAY LIKE 'E' .
RETURN.
ENDIF.
IF zfpmx-fpzei IS INITIAL.
meg = '发票行不能为空'.
MESSAGE meg TYPE 'E' DISPLAY LIKE 'E' .
RETURN.
ENDIF.
IF zfpmx-ywlx IS INITIAL.
meg = '业务类型不能为空'.
MESSAGE meg TYPE 'E' DISPLAY LIKE 'E' .
RETURN.
ENDIF.
IF zfpmx-belnr <> ''.
SELECT SINGLE belnr INTO @DATA(wa_belnr) FROM bkpf WHERE bukrs = @zfpmx-bukrs AND gjahr = @zfpmx-gjahr AND belnr = @zfpmx-belnr.
IF sy-subrc <> 0.
meg = '凭证:' && zfpmx-belnr && '不存在'.
MESSAGE meg TYPE 'E' DISPLAY LIKE 'E' .
RETURN.
ENDIF.
ENDIF.
IF zfpmx-projnum <> ''.
SELECT SINGLE aufnr INTO @DATA(wa_projnum) FROM aufk WHERE aufnr = @zfpmx-projnum AND auart = '0011'.
IF sy-subrc <> 0.
meg = '项目编号:' && zfpmx-projnum && '不存在(订单类型0011)'.
MESSAGE meg TYPE 'E' DISPLAY LIKE 'E' .
RETURN.
ENDIF.
ENDIF.
ENDFORM.
FORM change_save.
DATA:meg TYPE char30.
DATA:lo_data TYPE REF TO data,
lv_tabix TYPE sy-tabix.
FIELD-SYMBOLS:
<ls_maintview> TYPE any,
<lv_field> TYPE any.
IF x_header-maintview IS NOT INITIAL.
CREATE DATA lo_data TYPE (x_header-maintview).
IF lo_data IS BOUND.
ASSIGN lo_data->* TO <ls_maintview>.
ENDIF.
IF <ls_maintview> IS ASSIGNED.
LOOP AT total.
READ TABLE extract WITH KEY <vim_xtotal_key>.
IF sy-subrc = 0.
lv_tabix = sy-tabix.
* IF <action> = 'U'.
CLEAR <ls_maintview>.
MOVE-CORRESPONDING <vim_total_struc> TO <ls_maintview>.
CLEAR zfpmx.
MOVE-CORRESPONDING <vim_total_struc> TO zfpmx.
CLEAR meg.
IF zfpmx-bukrs IS INITIAL.
meg = '公司不能为空'.
MESSAGE meg TYPE 'S' DISPLAY LIKE 'E' .
vim_abort_saving = abap_true.
RETURN.
ENDIF.
IF zfpmx-gjahr IS INITIAL.
meg = '年度不能为空'.
MESSAGE meg TYPE 'S' DISPLAY LIKE 'E' .
vim_abort_saving = abap_true.
RETURN.
ENDIF.
IF zfpmx-monat IS INITIAL.
meg = '期间不能为空'.
MESSAGE meg TYPE 'S' DISPLAY LIKE 'E' .
vim_abort_saving = abap_true.
RETURN.
ENDIF.
IF zfpmx-fpnum IS INITIAL.
meg = '发票号不能为空'.
MESSAGE meg TYPE 'S' DISPLAY LIKE 'E' .
vim_abort_saving = abap_true.
RETURN.
ENDIF.
IF zfpmx-fpzei IS INITIAL.
meg = '发票行不能为空'.
MESSAGE meg TYPE 'S' DISPLAY LIKE 'E' .
vim_abort_saving = abap_true.
RETURN.
ENDIF.
IF zfpmx-ywlx IS INITIAL.
meg = '业务类型不能为空'.
MESSAGE meg TYPE 'S' DISPLAY LIKE 'E' .
vim_abort_saving = abap_true.
RETURN.
ENDIF.
IF zfpmx-belnr IS INITIAL.
meg = '发票' && zfpmx-fpnum && '凭证号不能为空'.
MESSAGE meg TYPE 'S' DISPLAY LIKE 'E' .
vim_abort_saving = abap_true.
RETURN.
ENDIF.
IF zfpmx-ywlx = 'FPKJ'.
IF zfpmx-srje IS INITIAL.
meg = '发票' && zfpmx-fpnum && '收入金额不能为空'.
MESSAGE meg TYPE 'S' DISPLAY LIKE 'E' .
vim_abort_saving = abap_true.
RETURN.
ENDIF.
IF zfpmx-htfzje <> ''.
meg = '发票' && zfpmx-fpnum && '合同负债金额不能填写'.
MESSAGE meg TYPE 'S' DISPLAY LIKE 'E' .
vim_abort_saving = abap_true.
RETURN.
ENDIF.
IF zfpmx-htfzzjje <> ''.
meg = '发票' && zfpmx-fpnum && '合同和债结转金额不能填写'.
MESSAGE meg TYPE 'S' DISPLAY LIKE 'E' .
vim_abort_saving = abap_true.
RETURN.
ENDIF.
ENDIF.
IF zfpmx-ywlx = 'FZJZ'.
IF zfpmx-htfzje IS INITIAL.
meg = '发票' && zfpmx-fpnum && '合同负债金额不能为空'.
MESSAGE meg TYPE 'S' DISPLAY LIKE 'E' .
vim_abort_saving = abap_true.
RETURN.
ENDIF.
IF zfpmx-htfzzjje IS INITIAL.
meg = '发票' && zfpmx-fpnum && '合同和债结转金额不能为空'.
MESSAGE meg TYPE 'S' DISPLAY LIKE 'E' .
vim_abort_saving = abap_true.
RETURN.
ENDIF.
IF zfpmx-srje <> ''.
meg = '发票' && zfpmx-fpnum && '收入金额不能填写'.
MESSAGE meg TYPE 'S' DISPLAY LIKE 'E' .
vim_abort_saving = abap_true.
RETURN.
ENDIF.
ENDIF.
IF zfpmx-projnum IS INITIAL.
meg = '发票' && zfpmx-fpnum && '项目编号不能为空'.
MESSAGE meg TYPE 'S' DISPLAY LIKE 'E' .
vim_abort_saving = abap_true.
RETURN.
ENDIF.
IF zfpmx-belnr <> ''.
SELECT SINGLE belnr INTO @DATA(wa_belnr) FROM bkpf WHERE bukrs = @zfpmx-bukrs AND gjahr = @zfpmx-gjahr AND belnr = @zfpmx-belnr.
IF sy-subrc <> 0.
meg = '发票' && zfpmx-fpnum && '凭证' && zfpmx-belnr && '不存在'.
MESSAGE meg TYPE 'S' DISPLAY LIKE 'E' .
vim_abort_saving = abap_true.
RETURN.
ENDIF.
ENDIF.
IF zfpmx-projnum <> ''.
SELECT SINGLE aufnr INTO @DATA(wa_projnum) FROM aufk WHERE aufnr = @zfpmx-projnum.
IF sy-subrc <> 0.
meg = '发票' && zfpmx-fpnum && '项目编号' && zfpmx-projnum && '不存在'.
MESSAGE meg TYPE 'S' DISPLAY LIKE 'E' .
vim_abort_saving = abap_true.
RETURN.
ENDIF.
ENDIF.
MOVE-CORRESPONDING <ls_maintview> TO <vim_total_struc>.
MODIFY total.
extract = total.
MODIFY extract INDEX lv_tabix.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDFORM.