ABAP SM30保存校验

ABAP SM30表维护程序 自动更新隐藏字段值 背景 在表维护程序SM30的使用过程中,经常需要自动填充和修改一些值,比较常规的做法是修改屏幕逻辑流,但是如果重新激活了SM30,那么逻辑流就要重写,相对比较麻烦,之前接触过表维护程序中的‘事件’,经过研究得出以下方法 原理 事件编号 事件功能 01 保存前修改数据 05 创建数据时修改 21 退出单元格编辑时填充隐藏字段 步骤 1、生成表维护程序,... 阅读详情
AI摘要

这篇博客介绍了如何在SAP系统中实现表维护的保存事件,通过检查是否存在相同描述的运费类型代码来确保数据的唯一性。作者使用FORM子程序进行校验,通过循环遍历、删除重复项和错误提示来防止重复记录的保存。在较旧的SAP系统版本中,由于不支持GROUP BY语法,作者采用了AT END OF来处理数据分组。

需求描述

  1. ZMMT100中项目保存时需查找是否存在与保存行中“运费类型描述”值相同的行
  2. 如果存在,继续校验当前保存行的“运输类型”+“运费类型代码”与“运费类型描述”相同行的“运输类型”+“运费类型代码”是否完全一致
  3. 如果不一致则报错“已存在相同描述的运费类型代码”

实现效果

在这里插入图片描述

实现步骤

1.1 打开表维护生成器

在这里插入图片描述

1.2 环境-事件

在这里插入图片描述

1.3 实现FORM子程序

这里有很多表维护对话事件,我这里是使用了01事件
在这里插入图片描述

1.4 子程序源码

*----------------------------------------------------------------------*
***INCLUDE LZMMT037F01.
*----------------------------------------------------------------------*

FORM check_save_zmmt037.
  DATA:BEGIN OF ls_temp,
         ztranstype LIKE zmmt037-ztranstype,
         zfrename   LIKE zmmt037-zfrename,
         zfretype   LIKE zmmt037-zfretype,
       END OF ls_temp,
       lt_temp LIKE TABLE OF ls_temp.

  DATA:lt_zmmt037 TYPE TABLE OF zmmt037,
       ls_zmmt037 TYPE          zmmt037.

  DATA:lv_count TYPE i,
       lv_flag.

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

  REFRESH:lt_temp.
  IF lt_zmmt037[] IS NOT INITIAL.
    LOOP AT lt_zmmt037 INTO ls_zmmt037.
      CLEAR ls_temp.
      ls_temp-ztranstype = ls_zmmt037-ztranstype.
      CONDENSE ls_temp-ztranstype NO-GAPS.

      ls_temp-zfretype = ls_zmmt037-zfretype.
      CONDENSE ls_temp-zfretype NO-GAPS.

      ls_temp-zfrename = ls_zmmt037-zfrename.
      CONDENSE ls_temp-zfrename NO-GAPS.
      APPEND ls_temp TO lt_temp.
    ENDLOOP.

    CLEAR:lv_flag,lv_count.

    SORT lt_temp BY ztranstype zfrename zfretype.
    DELETE ADJACENT DUPLICATES FROM lt_temp COMPARING ztranstype zfrename zfretype.

    LOOP AT lt_temp INTO ls_temp.
      ADD 1 TO lv_count.
      AT END OF zfrename.
        IF lv_count > 1.
          lv_flag = abap_true.
          EXIT.
        ELSE.
          CLEAR lv_count.
        ENDIF.
      ENDAT.
    ENDLOOP.

  ENDIF.

  IF lv_flag IS NOT INITIAL.
    MESSAGE '已存在相同描述的运费类型代码' TYPE 'S' DISPLAY LIKE 'E'.
    vim_abort_saving = abap_true."c_abrt_save.
    sy-subrc = 4.
  ENDIF.
ENDFORM.

1.5 反思总结

这里对内表做分类汇总的时候可以使用group by,但是由于我们的系统版本比较老,不支持这个语法,我就使用了at end of。在使用at end of的也遇到了一个小坑,是包括f字段的。

2. AT END OF F.
        代码段..
    ENDAT.
当f字段以及f左边字段内容即将发生变化时,执行代码段。
ABAP配置表加保存前校验 ABAP配置表加保存前校验 1、自建表先生成表格维护器。 2、在表格维护器页面点击环境 ----> 修改 -----> 事件 3、点击这个创建子例程,然后去编写代码。 保存前对工厂进行校验的示例代码: form check_werk. data: lt_zqmt015a type table of zqmt015a, ls_zqmt015a type zqmt015a. data: ls_werk type zqmt015c. loop at total. case <acti 阅读详情

相关推荐

ABAP-SM30自动获取描述的事件,如document type的描述

ABAP-SM30-EVENT-SE54

m0_74015269的博客 876

表维护视图创建自定义按钮及事件

SAP维护视图加入自定义按钮

BIRDMAN 1145

告别数据混乱!用ABAP SM30保存校验,为ZMMT100表打造‘防重复’安全锁

本文详细介绍了如何利用ABAP SM30的保存校验功能为ZMMT100表构建高效的数据防重体系。通过智能校验机制,企业可以在SM30表维护界面实现零部署成本的数据质量管控,有效防止重复数据录入,提升系统数据一致性。文章包含工业级ABAP代码实现和进阶应用场景,助力企业打造可靠的数据治理方案。

weixin_30861797的博客 540

ABAP: SM30维护事件

SM30事件使用

weixin_41886784的博客 3627

SAP ABAP开发实战:在SM30表维护里,如何优雅地实现“运费类型描述”的唯一性校验?

本文详细介绍了在SAP ABAP开发中,如何通过SM30表维护生成器实现'运费类型描述'的唯一性校验。文章从业务场景分析入手,深入讲解了保存校验的事件机制、校验逻辑实现细节、错误处理与用户反馈等关键环节,并提供了性能优化和调试技巧,帮助开发者在实际项目中优雅地处理类似的数据校验需求。

weixin_30314793的博客 720

告别无效数据!用SM30事件为ABAP自定义表加上“业务守护”逻辑

本文详细介绍了如何利用SM30事件机制为ABAP自定义表添加业务守护逻辑,确保数据质量。通过保存校验等关键事件,实现跨字段业务规则验证、动态规则引擎设计及高级校验模式,有效防止无效数据输入,提升SAP系统的数据可靠性。

weixin_30617737的博客 286

SAP ABAP SM30表维护:手把手教你实现‘运费类型’重复描述校验(附完整代码与避坑指南)

本文详细解析了在SAP ABAP环境中使用SM30表维护生成器实现‘运费类型’重复描述校验的方法。通过保存校验机制和完整代码示例,帮助开发者确保运输类型与运费描述的唯一性,避免业务混淆。文章还提供了避坑指南和性能优化建议,适用于物流管理等场景。

weixin_38168918的博客 413

别再手动检查了!教你用SM30的保存前事件,5分钟搞定配置表数据校验

本文详细介绍了如何利用SAP的SM30保存前事件实现配置表数据校验,无需开发完整程序即可在保存时自动拦截错误数据。通过会计期间配置表的实战案例,展示了从SE54配置到ABAP校验逻辑编写的完整流程,帮助企业减少70%以上的数据清洗工作,提升数据准确性。

weixin_33695450的博客 401

ABAP SM30表维护:手把手教你实现“运费类型”重复描述校验(含AT END OF避坑指南)

本文详细解析了在ABAP开发中使用SM30表维护功能实现运费类型描述重复校验的完整流程。通过实际案例演示了保存校验逻辑的实现方法,特别针对老版本系统中的`AT END OF`语句提供了避坑指南,帮助开发者高效解决业务校验难题。

weixin_30882895的博客 567

SAP SM30数据维护实战:条件筛选与动态校验的实现技巧

本文详细介绍了SAP SM30数据维护的实战技巧,重点讲解如何通过条件筛选实现精准数据查取,以及利用表维护生成器事件实现动态数据检查与校验。文章提供了从基础视图创建到高级事件编程的完整流程,包括调用函数VIEW_MAINTENANCE_CALL传递筛选条件,以及在NEW_DATA和CHANGE_SAVE事件中编写业务规则校验逻辑,帮助开发者提升SM30的管控能力与数据质量。

q9w8e7r6t5的博客 521

ABAP SM30表维护中的业务逻辑校验实战

本文详细介绍了在ABAP SM30表维护中实现业务逻辑校验的实战方法,重点讲解了保存校验的关键技术。通过运费管理系统案例,展示了如何确保字段组合唯一性,包括事件机制应用、校验逻辑代码实现及错误处理技巧,帮助开发者高效处理SAP系统中的数据一致性问题。

weixin_42526015的博客 195

SAP ABAP实战:巧用SM30与ADRC函数组构建自定义地址维护界面

本文详细介绍了如何在SAP ABAP开发中利用SM30与ADRC函数组构建自定义地址维护界面。通过解析核心函数模块如ADDR_DIALOG和ADDR_MEMORY_CLEAR,以及实战案例展示,帮助开发者高效集成地址维护功能到自定义程序中,提升用户体验并减少代码量。特别适合需要处理主数据地址维护的SAP开发人员。

weixin_33672400的博客 435

ABAP SM30维护视图:巧用事件与宏,为数据变更自动添加Log印记

本文详细解析了ABAP SM30维护视图中如何利用事件与宏自动记录数据变更日志。通过01和05事件的巧妙配置,结合动态字段分配的宏定义,实现非侵入式的操作痕迹追踪,有效解决审计追溯难题。文章包含完整代码模板和调试技巧,特别强调生产环境中的性能优化方案与字段设计规范。

weixin_30835649的博客 338

SM30与表维护生成器事件机制实战:39个事件全解析与坑位规避

在SAP ABAP开发中,数据维护是核心环节,而SM30作为自建表的标准维护入口,其底层依赖表维护生成器生成的程序。面对保存前校验、自动带出描述、删除拦截等定制需求,仅依赖默认功能往往无能为力。事件机制正是突破这一瓶颈的关键——它将一次完整的维护流程从打开界面、数据增删改查到数据库保存,拆解为39个可干预的事件节点。通过理解BEFORE与AFTER两大类别的事件触发顺序,开发者能在合适的时机插入轻量逻辑,实现业务规则校验、旧新数据比对及跨表联动。结合函数组全局变量与事件子程序挂接方法,可以有效避免改内表不刷

weixin_31714129的博客 258

SAP SM30表维护:手把手教你用FORM事件实现期间交叉校验(附完整代码)

本文详细解析了如何在SAP SM30表维护中利用FORM事件实现期间交叉校验,特别适用于持股比例表等需要复杂业务规则校验的场景。通过完整的ABAP代码示例和关键事件机制说明,帮助开发者掌握数据完整性保护的实现方法,包括数据提取、格式标准化、业务规则校验和错误处理等核心步骤。

weixin_33696106的博客 420

SAP ABAP实战:用SM30表维护事件,给配置表加一道‘期间防重’的锁(附完整代码)

本文详细介绍了如何在SAP ABAP中利用SM30表维护事件实现配置表的期间防重校验,确保数据质量。通过完整的代码示例和事件机制解析,帮助开发者构建可靠的校验屏障,防止期间重叠导致的数据异常和业务问题。

weixin_33704591的博客 341

SAP SM30表维护权限控制实战:基于授权对象与增强实现精细化管控

在企业级应用系统中,权限管理是保障数据安全与业务稳定的核心机制。其基本原理是通过定义用户角色与操作权限,实现对系统资源的访问控制。在SAP ABAP开发领域,标准权限对象如S_TABU_DIS提供了表级的访问控制,但在面对复杂的业务场景时,往往需要更精细化的权限管理方案。通过创建自定义授权对象,并结合SM30表维护视图的增强点,可以在数据保存的关键节点注入实时权限校验逻辑,实现从表级到行级、甚至字段级的精准控制。这种技术方案的价值在于,它强制性地将权限检查置于服务器端,与SAP标准权限体系无缝集成,有效防止

weixin_29325515的博客 255

Goldwasser-Micali 公钥加密系统

1、二次剩余问题 对于整数n ,定义Zn∗={a∈Zn,gcd(a,n)=1}Z^*_n=\{ a∈Z_n,gcd(a,n) =1\}Zn∗​={a∈Zn​,gcd(a,n)=1} 。当存在d∈Znd \in Z_nd∈Zn​ ,使得 d2≡a mod nd^2 \equiv a \, mod \,nd2≡amodn ,称 a 为模 n 的二次剩余;否则称 a 为模 n的二次非剩余。判断 a 是否为模 n 的二次剩余的问题称为模n 的二次剩余问题。 \rule[-10pt]{14.3cm}{0.05em}

不染心的博客 4313

SM30表维护生成器事件实战:原理、分组与三套高频套路

在ABAP开发中,配置表的维护看似简单,但要在标准SM30界面中实现默认值填充、描述自动带出、删除校验等业务逻辑,离不开Table Maintenance Generator提供的可插拔事件机制。理解这些事件本质上是PBO/PAI生命周期中的钩子,掌握其触发顺序与分组,才能在不修改标准程序的前提下安全扩展维护功能。事件机制的价值在于复用标准流程,减少自开发程序,同时保证配置维护的一致性与可审计性。无论是定义主表与子表关联维护,还是处理保存前校验、删除前拦截、保存后日志,合理挂接事件都能让SM30更加贴合实际

weixin_31188927的博客 281

保姆级教程:DBeaver社区版安装与驱动配置(附阿里云镜像解决下载超时)

本文提供DBeaver社区版的保姆级安装教程,涵盖版本选择、安装路径设置到驱动配置优化。特别针对国内用户遇到的下载超时问题,详细介绍了如何配置阿里云镜像加速驱动下载,确保高效连接MySQL等主流数据库。

weixin_30430169的博客 479

TSMaster二次开发实战:如何用Python搞定CAN/CANFD事件回调(附完整代码)

本文详细介绍了如何利用Python进行TSMaster二次开发,实现CAN/CANFD事件回调功能。通过实战代码演示,讲解了预发送与后处理回调的核心区别、注册流程、资源管理及性能优化技巧,帮助工程师高效构建自动化测试与数据监控应用。

star的博客 668
上一篇: ABAP 搜索帮助出口 实现非主键去重
下一篇: ABAP 调用外部Webservcie
Explore1995
博客等级 码龄10年 46粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值