利用SM30表维护事件实现保存校验

表维护经常遇到需要对数据进行校验的情况,文章用以下场景为例,讲述表维护事件用法。

场景:配置表存的是公司某个期间的持股比例。校验一个公司的期间不能交叉重合。

数据如:

效果:新建一个AAA,和原来202002-202005期间有交叉时,不能保存。

实现:

FORM check_period.
*-检查是否有重复期间
  DATA:lt_in TYPE zbpctt001,
       ls_in LIKE LINE OF lt_in.
  DATA:lt_return TYPE bapiret2_t,
       ls_return LIKE LINE OF lt_return.

  DATA:lt_zdata TYPE TABLE OF zbi_hzgspzb,
       ls_zdata TYPE zbi_hzgspzb.

  LOOP AT total.
    IF <action> NE 'D' AND
       <action> NE 'X' .
      APPEND <vim_total_struc> TO lt_zdata.
    ENDIF.
  ENDLOOP.

  IF lt_zdata[] IS NOT INITIAL.
    LOOP AT lt_zdata INTO ls_zdata.
      CLEAR ls_in.
      ls_in-key = ls_zdata-zhzgs.
      REPLACE  '.' IN ls_zdata-zksyf WITH ''.
      CONDENSE ls_zdata-zksyf NO-GAPS.
      ls_in-yyyymm_start = ls_zdata-zksyf.
      REPLACE  '.' IN ls_zdata-zksyf WITH ''.
      CONDENSE ls_zdata-zksyf NO-GAPS.
      ls_in-yyyymm_end = ls_zdata-zjsyf.
      APPEND ls_in TO lt_in.
    ENDLOOP.

    CALL METHOD zcl_ujo_tool=>check_dulipcate_yyyymm
      EXPORTING
        it_yyyymm  = lt_in
      IMPORTING
        et_messege = lt_return.
  ENDIF.
  DATA:lv_msg TYPE string.
  IF lt_return[] IS NOT INITIAL.
    LOOP AT lt_return INTO ls_return.
      lv_msg = lv_msg && ls_return-message  && ';'.
    ENDLOOP.
    MESSAGE lv_msg TYPE 'S' DISPLAY LIKE 'E'.
    vim_abort_saving = abap_true."c_abrt_save.

    sy-subrc = 4.

  ENDIF.
ENDFORM.

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值