ABAP程序示例:交互式ALV演示程序

news2025/2/24 20:40:07

  这个程序是一个用于显示和刷新事务代码(TCode)列表的报表程序。它使用ALV(ABAP List Viewer)来显示数据,并提供了一个刷新功能,以便用户可以查看新的事务代码。以下是程序的主要部分及其功能:

  1. 数据类型和内部表声明:定义了用于ALV显示的数据类型和内部表。

  2. 数据获取子程序:从数据库的tstc表中获取数据,并根据条件筛选出屏幕编号不为'0000'的事务代码。

  3. ALV输出子程序:构建ALV显示所需的字段目录、布局,并调用REUSE_ALV_GRID_DISPLAY函数来显示数据。

  4. 事件退出子程序:设置ALV的事件退出处理,以便在用户执行特定操作(如刷新或点击事务代码)时执行相应的处理。

  5. 字段目录构建子程序:定义了ALV显示中每个字段的属性,如字段名、表名和选择文本。

  6. 布局构建子程序:设置了ALV显示的布局属性,如是否启用斑马线效果和列宽优化。

  7. ALV显示子程序:调用ALV显示函数,设置回调程序、字段目录、布局和事件退出处理,并指定输出表。

  8. 用户命令处理子程序:处理用户在ALV中执行的命令,如点击事务代码或刷新列表。

  9. 设置PF状态子程序:设置ALV的PF(Program Function)状态,这里设置为标准全屏模式。

请注意,这个程序是一个完整的报表程序,它包含了初始化、数据获取、ALV显示以及用户交互处理的所有必要部分。在实际使用中,可根据具体需求调整这些子程序的逻辑。


REPORT zalv_tcoderefresh. " 报告名称

*type pools for alv declarations
TYPE-POOLS: slis. " 引入ALV类型池

*structure declaration for tstc table
TYPES: BEGIN OF ty_tstc, " 定义TSTC表的结构
        tcode TYPE tcode, " 事务代码
        pgmna TYPE program_id, " 程序名称
        dypno TYPE dynpronr, " 屏幕编号
        END OF ty_tstc. " 结束结构定义

* Internal table and workarea declarations for tstc
DATA: it_tstc TYPE STANDARD TABLE OF ty_tstc, " 内部表声明
      wa_tstc TYPE ty_tstc. " 工作区声明

*data declarations for ALV
DATA: it_layout TYPE slis_layout_alv, " ALV布局数据类型
      wa_fieldcat TYPE slis_fieldcat_alv, " 字段目录数据类型
      it_fieldcat TYPE slis_t_fieldcat_alv, " 字段目录表类型
      it_eventexit TYPE slis_t_event_exit, " 事件退出数据类型
      wa_eventexit TYPE slis_event_exit. " 事件退出工作区类型

*initialisation event
INITIALIZATION. " 初始化事件
*start of selection event
START-OF-SELECTION. " 开始选择事件

*subroutine to fetch data from the db table
PERFORM fetch_data. " 执行数据获取子程序

*subroutine for output display
PERFORM alv_output. " 执行ALV输出子程序

*&---------------------------------------------------------------------*
*&      Form  fetch_data
*&---------------------------------------------------------------------*
*       *subroutine to fetch data from the db table
*----------------------------------------------------------------------*
FORM fetch_data.
*Internal table and work area declaratin for TSTC (local tables)
DATA : lt_tstc TYPE STANDARD TABLE OF ty_tstc, " 内部表声明
         ls_tstc TYPE ty_tstc. " 工作区声明

*Static field definition
*Reads the last tcode and stores it in l_tstc that on refresh further data
*beyond this value is fetched
STATICS l_tstc TYPE tcode. " 静态字段声明

* Selection from the tstc table
*we select till 25 rows and on further refresh next 25 are selected
*we select transactions having screen numbers only
SELECT tcode
       pgmna
       dypno
       FROM tstc
       INTO CORRESPONDING FIELDS OF TABLE lt_tstc
       UP TO 25 ROWS
       WHERE tcode GT l_tstc " 选择大于l_tstc的tcode
       AND tcode  LIKE 'M%' " 选择以'M'开头的tcode
       AND dypno NE '0000'. " 排除屏幕编号为'0000'的记录

* Code for transferring the values of local table to output table
* for 25 rows as sy-tfill is 25.
*In case there are no records a message pops up.
IF sy-subrc EQ 0. " 如果没有错误
    DESCRIBE TABLE it_tstc. " 获取内部表的描述
    READ TABLE lt_tstc INTO ls_tstc INDEX sy-tfill. " 读取最后一行数据
    l_tstc = ls_tstc-tcode. " 更新l_tstc为最后一行的tcode
    it_tstc[] = lt_tstc[]. " 将数据赋值给输出表
ELSE. " 如果有错误
    MESSAGE 'No Records found ' TYPE 'i'. " 显示错误消息
ENDIF.
ENDFORM. " 读取数据子程序结束

*&---------------------------------------------------------------------*
*&      Form  alv_output
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM alv_output.
*subroutine to refresh alv
PERFORM event_exits. " 执行事件退出子程序
*field catalogue
PERFORM build_fieldcat. " 执行字段目录子程序
*Layout for alv
PERFORM build_layout. " 执行布局子程序
*output display
PERFORM alv_display. " 执行ALV显示子程序
ENDFORM. " ALV输出子程序结束

*&---------------------------------------------------------------------*
*&      Form  event_exits
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*subroutine to refresh alv
FORM event_exits.
CLEAR wa_eventexit. " 清除事件退出工作区
wa_eventexit-ucomm = '&REFRESH'. " 设置刷新命令
wa_eventexit-after = 'X'. " 设置事件退出条件
APPEND wa_eventexit TO it_eventexit. " 将事件退出添加到列表
ENDFORM. " 事件退出子程序结束

*&---------------------------------------------------------------------*
*&      Form  build_fieldcat
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*Field catalogue
FORM build_fieldcat.
CLEAR wa_fieldcat. " 清除字段目录工作区
wa_fieldcat-row_pos = '1'. " 设置行位置
wa_fieldcat-col_pos = '1'. " 设置列位置
wa_fieldcat-fieldname = 'TCODE'. " 设置字段名
wa_fieldcat-tabname = 'it_tstc'. " 设置表名
wa_fieldcat-seltext_m = 'TRANSACTION'. " 设置选择文本
APPEND wa_fieldcat TO it_fieldcat. " 将字段目录添加到列表

CLEAR wa_fieldcat. " 清除字段目录工作区
wa_fieldcat-row_pos = '1'. " 设置行位置
wa_fieldcat-col_pos = '2'. " 设置列位置
wa_fieldcat-fieldname = 'PGMNA'. " 设置字段名
wa_fieldcat-tabname = 'it_tstc'. " 设置表名
wa_fieldcat-seltext_m = 'PROGRAM'. " 设置选择文本
APPEND wa_fieldcat TO it_fieldcat. " 将字段目录添加到列表

CLEAR wa_fieldcat. " 清除字段目录工作区
wa_fieldcat-row_pos = '1'. " 设置行位置
wa_fieldcat-col_pos = '3'. " 设置列位置
wa_fieldcat-fieldname = 'DYPNO'. " 设置字段名
wa_fieldcat-tabname = 'it_tstc'. " 设置表名
wa_fieldcat-seltext_m = 'SCREEN'. " 设置选择文本
APPEND wa_fieldcat TO it_fieldcat. " 将字段目录添加到列表
ENDFORM. " 构建字段目录子程序结束

*&---------------------------------------------------------------------*
*&      Form  build_layout
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*Layout
FORM build_layout.
it_layout-zebra = 'X'. " 设置斑马线效果
it_layout-colwidth_optimize = 'X'. " 设置列宽优化
ENDFORM. " 构建布局子程序结束

*&---------------------------------------------------------------------*
*&      Form  alv_display
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*ALV output
FORM alv_display.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
    i_callback_program = sy-repid " 当前程序ID
    i_callback_user_command = 'USER_COMMAND' " 用户命令回调
    i_callback_pf_status_set = 'PFSTATUS' " 状态设置回调
    it_fieldcat = it_fieldcat " 字段目录
    is_layout = it_layout " 布局
    it_event_exit = it_eventexit " 事件退出
    i_screen_start_column = 10 " 屏幕开始列
    i_screen_start_line = 20 " 屏幕开始行
    i_screen_end_column = 70 " 屏幕结束列
    i_screen_end_line = 45 " 屏幕结束行
    i_grid_title = 'Call Tcode Refresh ALV' " 网格标题
  TABLES
    t_outtab = it_tstc. " 输出表
ENDFORM. " ALV显示子程序结束

*&---------------------------------------------------------------------*
*&      Form  user_command
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*User actions on ALV
FORM user_command USING r_ucomm TYPE sy-ucomm " 用户命令
                        rs_selfield TYPE slis_selfield.
  CASE r_ucomm. " 根据用户命令进行操作
*User clicks a transaction code and that tcode is called from ALV
    WHEN '&IC1'.
      READ TABLE it_tstc INDEX rs_selfield-tabindex INTO wa_tstc. " 读取用户点击的行数据
      IF sy-subrc = 0. " 如果读取成功
        CALL TRANSACTION wa_tstc-tcode. " 调用事务代码
      ENDIF.
*user clicks the refresh button and the next 25 records are displayed
    WHEN '&REFRESH'.
      PERFORM fetch_data. " 执行数据获取子程序
      rs_selfield-refresh = 'X'. " 设置刷新标志
      rs_selfield-col_stable = 'X'. " 设置列稳定标志
      rs_selfield-row_stable = 'X' ." 设置行稳定标志

 ENDCASE.
ENDFORM. " 用户命令处理子程序结束

*&---------------------------------------------------------------------*
*&      Form  pfstatus
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*Form for settings the pf status to the alv
FORM pfstatus USING ut_extab TYPE slis_t_extab.
 SET PF-STATUS 'STANDARD_FULLSCREEN' OF PROGRAM 'SAPLKKBL'. " 设置PF状态为标准全屏
ENDFORM. " 设置PF状态子程序结束

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1842142.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

拉普拉斯矩阵对称归一化理解,通过一个简单的例子进行说明

拉普拉斯矩阵(Laplacian Matrix)是一个与图相关的矩阵,通常用于图分析、机器学习和信号处理等领域。它是由图的邻接矩阵或关联矩阵计算得出的。 对于一个无向图 G ( V , E ) G(V,E) G(V,E),它的拉普拉斯矩阵 L L L 可以表示为…

springBoot高校宿舍交电费系统-计算机毕业设计源码031552

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中,应用软件的工作…

大数据-数据分析师利用excel绘图

你会用excel,统计数据吗?我是大数据工程师,但是我不会excel。那咋办? 用sql,统计,导出到excel,在用excel统计。本文主要讨论的是导出到excel后,画图。 图是什么? x和y…

视频画面大小裁剪怎么弄?这3种剪辑方法轻松解决

视频画面大小裁剪怎么弄?视频画面大小裁剪,是视频编辑中常见且实用的操作之一。它不仅能帮助我们精准地去除视频中的多余内容,还能根据实际需求调整画面大小,使之适应不同的播放平台和场景需求。通过裁剪,我们可以让视…

WordPress主题 酱茄免费主题

酱茄free主题由酱茄开发的一款免费开源的WordPress主题,主题专为WordPress博客、资讯、自媒体网站而设计,遵循GPL V2.0开源协议发布。 运行环境 酱茄Free主题当前版本:2020.11.25 V1.0.0 支持WordPress版本:5.4 兼容Chrome、Fire…

git知识域

知识体系 FAQ git clone与git pull区别 git clone:从无到有,包含分支信息,日志信息。 git pull:在已有项目基础上操作,针对特定分支。

React实现H5手势密码

监测应用进入前后台 在JavaScript中,监听H5页面是否在前台或后台运行,主要依赖于Page Visibility API。这个API在大多数现代浏览器中都是支持的,包括苹果的Safari和谷歌的Chrome(也就基本覆盖了Android和iOS平台)。下面是一个简单的示例代码,展示如何使用这个API来判断页…

PFA托盘400*300*42mm耐酸碱透明聚四氟乙烯方盘方槽耐高温厂家供

PFA方盘又称托盘:耐高温、耐腐蚀。 进口透明可溶性聚四氟乙烯方盘。可应用于成膜实验,样品液体脱漏等。能放在电热板上直接加热使用,也可以用于烘箱烘干,实验室腐蚀性样品的转移和搬运,防止腐蚀性液体洒落。 产品特性…

【LLM之RAG】Self-RAG论文阅读笔记

研究背景 尽管大型语言模型(LLM)展示出了显著的能力,但它们在生成回答时经常包含事实错误,因为它们仅依赖于封装在模型中的参数知识。增强型检索生成(Retrieval-Augmented Generation, RAG)是一种方法&…

队列(数据结构篇)

数据结构之队列 队列(queue) 概念: 队列也是一种线性表,使用队列时插入在一端进行而删除则在另一端进行,队列的基本操作是入队,它是在表的末端(也叫做队尾)插入一个元素,出队,它是删除在**表的开头(**队…

SOLIDWORKS 如何通过motion绘制凸轮结构

SOLIDWORKS motion是SOLIDWORKS中一个高性能的插件,一个能够帮助完成虚拟样机的仿真分析工具,motion既可以对众多的机械结构进行运动学和动力学仿真,同时也可以反馈机械设备的速度、加速度、作用力等,今天我们就通过motion来合成凸…

IPython大师课:提升数据科学工作效率的终极工具

IPython是一个增强的Python交互式shell,它提供了丰富的功能和易用性改进,特别适合进行数据分析、科学计算和一般的Python开发。本文将全面介绍IPython的基本概念、使用方法、主要作用以及注意事项。 一、IPython简介 1. IPython的起源 IPython最初由Fe…

idea创建Mavenweb项目-提供Servlet 2024idea无法创建解决方式

idea社区版需要自己配置服务器需要去下载插件Tomcat Server 对服务器设置 idea无法创建servlet的问题是2023与2024版本idea做出了改动需要自己手动配置servlet文件 在设置中搜索template也就是模板,然后选择文件和代码板块,点击左上角的添加新的模板 名…

Linux服务器挖矿病毒处理

文章目录 Linux服务器挖矿病毒处理1.中毒表现2.解决办法2.1 断网并修改root密码2.2 找出隐藏的挖矿进程2.3 关闭病毒启动服务2.4 杀掉挖矿进程 3. 防止黑客再次入侵3.1 查找异常IP3.2 封禁异常IP3.3 查看是否有陌生公钥 补充知识参考 Linux服务器挖矿病毒处理 情况说明&#x…

力扣231. 2 的幂(位运算)

Problem: 231. 2 的幂 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.若为0和负数则直接返回false; 2.利用一个标志数mask令其为一,不断的算术左移同时和n做与(&)运算,统计n中二进制位为1的个数&a…

程序员·职场效能必修宝典㊾:拖延症与懒癌晚期患者如何自救

> 【易编橙终身成长社群,相遇已是上上签!】- 点击跳转~ < 作者:哈哥撩编程 (视频号同名) 图书作者:程序员职场效能宝典 博客专家:全国博客之星第四名 超级个体:COC上海社区主理人 特约讲师:谷歌亚马逊分享嘉宾 科技博主:极星会首批签约作者 文

大数据数据挖掘系统可视化设计艺术

1.系统背景 在我们实际进行数据挖掘研发过程中&#xff0c;为了验证某些算法在业务中的性能每次都需要去从头写代码&#xff0c;如果我们将我们研发的算法以模块化的思想封装起来&#xff0c;下次再使用的时候直接在系统中进行拖拉一下生成一个工作流&#xff0c;就能完成数据挖…

华为数通——ACL

ACL基本介绍 ACL:访问控制列表&#xff0c;通过端口对数据流进行过滤&#xff0c;ACL判别依据是五元组&#xff1a;源IP地址&#xff0c;源端口&#xff0c;目的IP地址&#xff0c;目的端口、协议。&#xff08;ACL工作于OSI模型第三层&#xff0c;是路由器和三层交换机接口的…

【轨迹规划论文整理(1)】UAV轨迹规划的开山之作Minimum Snap Trajectory

【轨迹规划论文整理(1)】UAV轨迹规划的开山之作Minimum Snap Trajectory Generation and Control for Quadrotors 本系列主要是对精读的一些关于无人机、无人车的轨迹搜索论文的整理&#xff0c;包括了论文所拓展的其他一些算法的改进思路。 这是本系列的第一篇文章&#xff0…

在windows和linux服务器之间互传文件

最近需要在windows上和linux服务器上实现相互传送文件&#xff0c;作为一个linux小白&#xff0c;研究了一个上午&#xff0c;终于成功了&#xff0c;记录一下。 使用的是SFTP方式。 Linux服务器系统是 Ubuntu 18.04 64位&#xff0c;windows 是 win10专业版。 首先在Linux服…