SAP ABAP 表控件示例
什么是表格控件? SAP ABAP?
表格控件和步骤循环是屏幕表格显示的对象,您可以将其添加到屏幕中的屏幕 Painter.
从编程角度来看,表格控件和步骤循环几乎完全相同。表格控件只是改进的步骤循环,以与桌面应用程序中的表格相关的外观和感觉来显示数据。
ABAP 表控件的功能
使用表格控件,用户可以:
- 垂直和水平滚动表格
- 调整列宽
- 在字段内滚动(当字段内容比字段宽时)
- 选择表格行或列
- 重新排列列的顺序
- 保存当前显示设置以供将来使用
表格控件还提供特殊的格式化功能(一些是自动的,一些是可选的),使表格更易于查看和使用。表格控件提供 –
- 当用户调整窗口大小时,自动调整表格大小(垂直和水平)
- 行与列之间的分隔线(垂直和水平)
- 所有列的列标题字段
一般来说,表控件提供的许多功能都是由系统的 SAPgui 前端,因此您无需自己编程。唯一值得注意的例外是垂直滚动.
示例(事务 TZ60)
上面的事务代码 TZ60 显示了最终结果:一个带有列标题、分隔线和选择列的网格。接下来总结了与旧版步骤循环的不同之处。
表格控制与步进循环
步进循环的一个特点是,其表格行可以跨越屏幕上的多行。而表格控件的一行则必须始终位于屏幕上的一行内(尽管可以滚动)。下表比较了这两种屏幕元素。
| 标准 | 表格控件 | 步骤循环 |
|---|---|---|
| 行布局 | 一行始终是屏幕的一行 | 一行可能跨越多行屏幕线 |
| 列处理 | 用户可以调整列的大小、重新排序和隐藏列。 | 屏幕上定义了固定列布局 |
| 滚动 | 前端实现水平滚动,PAI 中实现垂直滚动 | 完全用 ABAP 代码编写 |
| 声明 | 控件…使用屏幕类型创建表格视图 | 程序中没有控制结构 |
| 显示设置 | 用户可以保存个人布局。 | 不可用 |
因为表格控件是现代元素,所以本页的其余部分都围绕它进行编程。
如何创建和编程表格控件
表格控件需要屏幕元素、程序中的控制结构以及PBO和PAI中的循环。以下各小节均按此顺序展开。
声明控制权
要在 ABAP 程序中处理表控件,您必须使用以下语句在程序的声明部分为每个表控件声明一个控件:
CONTROLS <ctrl> TYPE TABLEVIEW USING SCREEN <scr>
在哪里是 ABAP 程序中屏幕上的表控件的名称。该控件允许 ABAP 程序读取表控件的属性并影响该控件。这里,是加载表格初始值的屏幕号。
设置和读取光标位置
表格控件的光标位置可以通过以下方式设置:
在 PBO 中,您可以将光标设置在表控件的特定行的特定字段上。
SET CURSOR FIELD <f> LINE <lin> [OFFSET <off>]
使用可选附加 OFFSET,您可以按照设置光标位置中的说明在字段中输入光标的偏移量。
在 PAI 上您可以读取当前光标位置。
GET CURSOR FIELD <f> LINE <lin> ...
除了查找光标位置下提供的信息外,字段包含有关光标当前位于表控件的哪一行的信息。您还可以使用
GET CURSOR LINE <lin>.
确定表格控件的行。SY-SUBRC 允许您检查光标是否位于表格控件的某一行中。
读取相应的内部表行
为了获得相应的行 内表:
GET CURSOR line <lin>. ind = <table_control>-top_line + <lin> - 1. Read table <itab> index ind.
系统变量 stepl – 包含循环中的当前表行索引...endloop。Loopc – 包含表中可见的行数
在屏幕中创建控件 Painter
创建表控件
- 向屏幕添加表格控件元素
- 给表控件命名。在 ABAP 程序中声明一个具有相同名称的结构体(CONTROLS)。使用屏幕类型 TABLEVIEW )
- 要创建字段,请转到“字典/程序字段”功能。
- 输入您想要的字段的结构名称。(如果您希望从程序的字典中选择,请单击相关按钮)。
- 在字段列表中选择您想要的字段并选择确定。
- 单击表格控制区域
如果需要选择列,请在属性中选中相应的复选框并为其命名。在 ABAP 程序.
对 PBO 和 PAI 循环进行编码
在 PBO 中你应该有声明
LOOP at <itab> USING CONTROL <cntrl_name>. ENDLOOP.
在 PAI 中你应该有。
LOOP at <itab>. ENDLOOP.
数据传输在循环中进行,涉及屏幕和内部表。填充内部表时,请使用 DESCRIBE TABLE 语句。 LINES -lines,用于存储控件中的总行数。FIELD 语句可用于控制数据传输的时机。
⚠️警告: PBO 循环必须使用 USING CONTROL 来命名控件。否则,控件将无法知道有多少行,垂直滚动功能也将停止工作。
运行时更改列属性
要临时更改单个单元格的属性,请更改 PBO 中的 SCREEN 表。您可以更改由 CONTROLS 语句创建的结构的属性
<cntrl>-fixed_cols etc are the attributes of the control <cntrl>-cols-index etc are the attributes of the columns. <cntrl>-cols-screen-invisible etc are the screen attributes of each column.
💡提示: 循环在 PBO 中使用 -cols 来隐藏或保护给定用户角色的列,而不是构建第二个屏幕。


