SAP ABAP 增强点查询程序DEMO

此博客展示了一段ABAP代码,主要实现根据输入的事务代码或程序名进行查询。通过多表查询获取相关信息,处理事务代码对应的程序开发类,查找增强和业务加载项信息,还能对结果进行排序和输出,同时支持行选择调用相应事务。

*&---------------------------------------------------------------------*
*& Report  ZTEST_001
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ztest_001 .

TABLES: tstc,
        tadir,
        modsapt,
        modact,
        trdir,
        tfdir,
        enlfdir,
        sxs_attrt ,
        tstct.

DATA: jtab LIKE tadir OCCURS 0 WITH HEADER LINE.
DATA: field1(30).
DATA: v_devclass LIKE tadir-devclass.

PARAMETERS: p_tcode LIKE tstc-tcode,
            p_pgmna LIKE tstc-pgmna.

DATA: wa_tadir TYPE tadir.




START-OF-SELECTION.

  IF NOT p_tcode IS INITIAL.
    SELECT SINGLE * FROM tstc WHERE tcode EQ p_tcode.
  ELSEIF NOT p_pgmna IS INITIAL.
    tstc-pgmna = p_pgmna.
  ENDIF.


  IF sy-subrc EQ 0.
    SELECT SINGLE * FROM tadir
    WHERE pgmid = 'R3TR'
    AND object = 'PROG'
    AND obj_name = tstc-pgmna.

    MOVE : tadir-devclass TO v_devclass.

    IF sy-subrc NE 0.
      SELECT SINGLE * FROM trdir
      WHERE name = tstc-pgmna.

      IF trdir-subc EQ 'F'.
        SELECT SINGLE * FROM tfdir
        WHERE pname = tstc-pgmna.

        SELECT SINGLE * FROM enlfdir
        WHERE funcname = tfdir-funcname.

        SELECT SINGLE * FROM tadir
        WHERE pgmid = 'R3TR'
        AND object = 'FUGR'
        AND obj_name EQ enlfdir-area.

        MOVE : tadir-devclass TO v_devclass.
      ENDIF.
    ENDIF.

    SELECT * FROM tadir INTO TABLE jtab
    WHERE pgmid = 'R3TR'
    AND object IN ('SMOD', 'SXSD')
    AND devclass = v_devclass.

    SELECT SINGLE * FROM tstct
    WHERE sprsl EQ sy-langu
    AND tcode EQ p_tcode.

    FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
    WRITE:/(19) 'Transaction Code - ',
    20(20) p_tcode,
    45(50) tstct-ttext.
    SKIP.
    IF NOT jtab[] IS INITIAL.
      WRITE:/(105) sy-uline.
      FORMAT COLOR COL_HEADING INTENSIFIED ON.

* Sorting the internal Table
      SORT jtab BY object.
      DATA : wf_txt(60)     TYPE c,
             wf_smod        TYPE i,
             wf_badi        TYPE i,
             wf_object2(30) TYPE c.
      CLEAR : wf_smod, wf_badi , wf_object2.
* Get the total SMOD.

      LOOP AT jtab INTO wa_tadir.
        AT FIRST.
          FORMAT COLOR COL_HEADING INTENSIFIED ON.

          WRITE:/1 sy-vline,
          2 'Enhancement/ Business Add-in',
          41 sy-vline ,
          42 'Description',
          105 sy-vline.
          WRITE:/(105) sy-uline.
        ENDAT.
        CLEAR wf_txt.
        AT NEW object.
          IF wa_tadir-object = 'SMOD'.
            wf_object2 = 'Enhancement' .
          ELSEIF wa_tadir-object = 'SXSD'.
            wf_object2 = ' Business Add-in'.

          ENDIF.
          FORMAT COLOR COL_GROUP INTENSIFIED ON.

          WRITE:/1 sy-vline,

          2 wf_object2,
          105 sy-vline.
        ENDAT.

        CASE wa_tadir-object.
          WHEN 'SMOD'.
            wf_smod = wf_smod + 1.
            SELECT SINGLE modtext INTO wf_txt
            FROM modsapt
            WHERE sprsl = sy-langu
            AND name = wa_tadir-obj_name.
            FORMAT COLOR COL_NORMAL INTENSIFIED OFF.

          WHEN 'SXSD'.
* For BADis
            wf_badi = wf_badi + 1 .
            SELECT SINGLE text INTO wf_txt
            FROM sxs_attrt
            WHERE sprsl = sy-langu
            AND exit_name = wa_tadir-obj_name.
            FORMAT COLOR COL_NORMAL INTENSIFIED ON.

        ENDCASE.

        WRITE:/1 sy-vline,
        2 wa_tadir-obj_name HOTSPOT ON,
        41 sy-vline ,
        42 wf_txt,
        105 sy-vline.
        AT END OF object.
          WRITE : /(105) sy-uline.
        ENDAT.

      ENDLOOP.

      WRITE:/(105) sy-uline.

      SKIP.
      FORMAT COLOR COL_TOTAL INTENSIFIED ON.
      WRITE:/ 'No.of Exits:' , wf_smod.
      WRITE:/ 'No.of BADis:' , wf_badi.

    ELSE.
      FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
      WRITE:/(105) 'No userexits or BADis exist'.
    ENDIF.
  ELSE.
    FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
    WRITE:/(105) 'Transaction does not exist'.
  ENDIF.

AT LINE-SELECTION.

  DATA : wf_object TYPE tadir-object.
  CLEAR wf_object.

  GET CURSOR FIELD field1.
  CHECK field1(8) EQ 'WA_TADIR'.
  READ TABLE jtab WITH KEY obj_name = sy-lisel+1(20).
  MOVE jtab-object TO wf_object.

  CASE wf_object.
    WHEN 'SMOD'.
      SET PARAMETER ID 'MON' FIELD sy-lisel+1(10).

      CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.
    WHEN 'SXSD'.
      SET PARAMETER ID 'EXN' FIELD sy-lisel+1(20).
      CALL TRANSACTION 'SE18' AND SKIP FIRST SCREEN.
  ENDCASE.

内容概要:文章以“智能网页数据标注工具”为例,深入探讨了谷歌浏览器扩展在毕业设计中的实战应用。通过开发具备实体识别、情感分类等功能的浏览器扩展,学生能够融合前端开发、自然语言处理(NLP)、本地存储与模型推理等技术,实现高效的网页数据标注系统。文中详细解析了扩展的技术架构,涵盖Manifest V3配置、内容脚本与Service Worker协作、TensorFlow.js模型在浏览器端的轻量化部署与推理流程,并提供了核心代码实现,包括文本选择、标注工具栏动态生成、高亮显示及模型预测功能。同时展望了多模态标注、主动学习与边缘计算协同等未来发展方向。; 适合人群:具备前端开发基础、熟悉JavaScript和浏览器机制,有一定AI模型应用经验的计算机相关专业本科生或研究生,尤其适合将浏览器扩展与人工智能结合进行毕业设计的学生。; 使用场景及目标:①掌握浏览器扩展开发全流程,理解内容脚本、Service Worker与弹出页的通信机制;②实现在浏览器端运行轻量级AI模型(如NER、情感分析)的技术方案;③构建可用于真实场景的数据标注工具,提升标注效率并探索主动学习、协同标注等智能化功能。; 阅读建议:建议结合代码实例搭建开发环境,逐步实现标注功能并集成本地模型推理。重关注模型轻量化、内存管理与DOM操作的稳定性,在实践中理解浏览器扩展的安全机制与性能优化策略。
基于Gin+GORM+Casbin+Vue.js的权限管理系统是一个采用前后端分离架构的企业级权限管理解决方案,专为软件工程和计算机科学专业的毕业设计项目开发。该系统基于Go语言构建后端服务,结合Vue.js前端框架,实现了完整的权限控制和管理功能,适用于各类需要精细化权限管理的应用场景。 系统后端采用Gin作为Web框架,提供高性能的HTTP服务;使用GORM作为ORM框架,简化数据库操作;集成Casbin实现灵活的权限控制模型。前端基于vue-element-admin模板开发,提供现代化的用户界面和交互体验。系统采用分层架构和模块化设计,确保代码的可维护性和可扩展性。 主要功能包括用户管理、角色管理、权限管理、菜单管理、操作日志等核心模块。用户管理模块支持用户信息的增删改查和状态管理;角色管理模块允许定义不同角色并分配相应权限;权限管理模块基于Casbin实现细粒度的访问控制;菜单管理模块动态生成前端导航菜单;操作日志模块记录系统关键操作,便于审计和追踪。 技术栈方面,后端使用Go语言开发,结合Gin、GORM、Casbin等成熟框架;前端使用Vue.js、Element UI等现代前端技术;数据库支持MySQL、PostgreSQL等主流关系型数据库;采用RESTful API设计规范,确保前后端通信的标准化。系统还应用了单例模式、工厂模式、依赖注入等设计模式,提升代码质量和可测试性。 该权限管理系统适用于企业管理系统、内部办公平台、多租户SaaS应用等需要复杂权限控制的场景。作为毕业设计项目,它提供了完整的源码和论文文档,帮助学生深入理解前后端分离架构、权限控制原理、现代Web开发技术等关键知识。系统设计规范,代码结构清晰,注释完整,非常适合作为计算机相关专业的毕业设计参考或实际项目开发的基础框架。 资源包含完整的系统源码、数据库设计文档、部署说明和毕
<think>好的,我现在要解决用户提到的SAP ABAP代码问题,具体是关于SELECT INTO TABLE、RANGE、MESSAGE、PERFORM FORM以及数据处理逻辑错误。首先,我需要回顾用户提供的引用内容,看看是否有相关的信息可以参考。 用户引用了三篇关于SAP ABAP的文章,其中提到了通用批导函数、开发规范以及Excel导入内表的实现。特别是引用[2]中提到了SELECTION-SCREEN的控件注释和ALV Fieldcatalog的注释,这可能与代码结构或数据处理有关。引用[3]则涉及Excel数据导入内表,可能与数据处理逻辑错误相关。 接下来,我需要分析用户提到的代码问题。常见的问题可能包括: 1. **SELECT INTO TABLE语句使用不当**:比如没有正确限定条件,导致数据选择不全或过多。可能需要检查WHERE子句是否正确,尤其是使用RANGE表时是否用IN或EQ等操作符正确。 2. **RANGE表定义或填充错误**:RANGE表需要正确声明为RANGE OF结构,并且在填充时SIGN、OPTION、LOW、HIGH字段是否正确赋值。例如,OPTION是否用了'BT'(BETWEEN)时是否同时提供了LOW和HIGH值。 3. **MESSAGE处理问题**:是否在适当的地方使用了MESSAGE语句,比如错误处理时是否中断了程序执行,或者消息类型(E, W, I)是否正确,导致程序流程不符合预期。 4. **PERFORM FORM参数传递错误**:子程序中的形式参数与实际参数是否匹配,尤其是引用传递(CHANGING)和值传递(USING)是否正确使用。此外,是否在调用PERFORM前正确初始化了变量。 5. **数据处理逻辑错误**:比如内表操作(APPEND, MODIFY, DELETE)是否正确,循环处理时是否有遗漏或错误的条件判断,字段符号或数据引用是否正确解引用。 接下来,我需要针对每个问题给出可能的解决方案和示例代码。例如,对于SELECT INTO TABLE的问题,可以检查是否使用了正确的WHERE条件,并确保RANGE表正确填充。对于RANGE表,可能需要检查定义是否为RANGE OF结构,并正确设置SIGN和OPTION。对于MESSAGE,需要确保在错误发生后使用MESSAGE E类型来终止程序,避免继续执行错误的数据处理。PERFORM FORM的问题可能需要检查参数的类型和传递方式是否正确,以及子程序内部是否有正确的逻辑处理。数据处理逻辑错误可能需要使用调试工具或添加日志来跟踪数据变化。 另外,用户提到的引用[3]中的Excel导入函数可能与数据来源有关,如果数据来自Excel,可能需要检查数据导入是否正确,字段映射是否准确,避免数据处理前的数据本身就有问题。 最后,需要提醒用户使用ABAP调试工具,如设置断、查看变量内容,以及使用WRITE或MESSAGE语句输出中间结果,帮助定位问题所在。</think>以下是针对SAP ABAP代码中$SELECT\ INTO\ TABLE$、$RANGE$、$MESSAGE$、$PERFORM\ FORM$及数据处理逻辑错误的常见问题解析与解决方案: --- ### 一、SELECT INTO TABLE 问题 1. **语法与条件缺失** ```abap SELECT * FROM vbak INTO TABLE lt_vbak WHERE vbeln IN s_vbeln. "正确用法需使用IN ``` - 错误示例:若误用`=`而非`IN`处理范围表,会导致仅取第一个值 - 检查:确保RANGE表变量名称正确且与SELECT语句中条件字段匹配[^2] 2. **性能问题** - 避免全表扫描:通过`UP TO n ROWS`限制数据量或添加索引提示`%_HINTS` - 使用`FOR ALL ENTRIES`时需先排除内表为空的情况 --- ### 二、RANGE表使用错误 1. **定义不规范** ```abap RANGES: lr_erdat FOR vbak-erdat. "正确声明方式 ``` - 错误示例:直接使用`DATA`定义而非`RANGES`或`TYPE RANGE OF` - 填充逻辑:需设置`SIGN`(I/E)、`OPTION`(EQ/BT等)、`LOW/HIGH` ```abap lr_erdat-sign = 'I'. lr_erdat-option = 'BT'. lr_erdat-low = '20230101'. lr_erdat-high = '20231231'. APPEND lr_erdat. ``` --- ### 三、MESSAGE处理不当 1. **未中断程序流** ```abap IF lt_data IS INITIAL. MESSAGE e001(zmsg) DISPLAY LIKE 'E'. "E类型消息终止程序 RETURN. ENDIF. ``` - 错误示例:仅用`MESSAGE 'No data' TYPE 'I'`会导致程序继续执行错误逻辑 2. **消息类配置** - 检查事务代码`SE91`中消息ID(如`zmsg`)是否存在并激活 --- ### 四、PERFORM FORM逻辑错误 1. **参数传递问题** ```abap PERFORM process_data USING lt_data CHANGING lv_result. "需匹配FORM参数类型 FORM process_data USING it_data TYPE ty_tab CHANGING cv_result TYPE string. ``` - 错误示例:`USING`传递内表未用`VALUE()`修饰可能导致原表被修改 2. **子程序内未清空变量** ```abap FORM validate_input CHANGING ct_table TYPE ty_tab. REFRESH ct_table. "显式清空输入输出表 ENDFORM. ``` --- ### 五、数据处理逻辑错误 1. **内表操作遗漏** ```abap LOOP AT lt_data ASSIGNING FIELD-SYMBOL(<fs>). IF <fs>-value > 100. <fs>-status = 'Approved'. ELSE. DELETE lt_data. "错误!应用DELETE lt_data INDEX sy-tabix ENDIF. ENDLOOP. ``` 2. **字段符号未解引用** - 使用动态分配时需确保字段符号已分配: ```abap ASSIGN COMPONENT 'VBELN' OF STRUCTURE <fs> TO FIELD-SYMBOL(<vbel>). IF <vbel> IS ASSIGNED. WRITE <vbel>. ENDIF. ``` --- ### 调试建议 1. 使用`/h`进入调试模式,检查关键变量值 2. 在关键节插入`WRITE`或`MESSAGE`输出中间结果 3. 使用`CL_DEMO_OUTPUT=>DISPLAY`快速查看内表内容 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值