SAP使用SM30功能对表中某部分数据进行查取,维护,检查

本文详细描述了如何使用SAP的SM30功能,通过指定ISHAND为X的记录条件,进行数据的查询和维护操作,包括创建查询程序和在表维护界面设置特定事件以实现只获取和维护这类数据。
摘要由CSDN通过智能技术生成

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.

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

被挤的奶牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值