利用SM30表维护事件实现保存校验
表维护经常遇到需要对数据进行校验的情况,文章用以下场景为例,讲述表维护事件用法。场景:配置表存的是公司某个期间的持股比例。校验一个公司的期间不能交叉重合。数据如:效果:新建一个AAA,和原来202002-202005期间有交叉时,不能保存。实现:FORM check_period.*-检查是否有重复期间DATA:lt_in TYPE zbpctt001,ls_in LIKE LINE OF lt_
·
表维护经常遇到需要对数据进行校验的情况,文章用以下场景为例,讲述表维护事件用法。
场景:配置表存的是公司某个期间的持股比例。校验一个公司的期间不能交叉重合。
数据如:
效果:新建一个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.
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献2条内容
所有评论(0)