SAP ABAP 表控件示例

⚡ 智能摘要

SAP ABAP 表控件将内部表显示为屏幕内置屏幕上的可滚动网格。 Painter本页解释了其功能、CONTROLS 声明、游标处理、PBO 和 PAI 循环以及列属性。

  • 🖥️ 核心定义: 表格控件是一种改进的步进循环,它以桌面应用程序网格的外观和感觉显示表格数据。
  • 🧰 内置功能: 滚动、列宽调整、列重排序、行选择和保存的显示设置均由以下组件处理: SAP图形用户界面前端。
  • 📜 单线规则: 步骤循环行可以跨越多行屏幕,而表格控件行必须始终保持在一行内。
  • ⌨️ 宣言: 控制使用屏幕类型 TABLEVIEW将屏幕元素与 ABAP 程序连接起来。
  • 🎯 光标处理: SET CURSOR 将光标定位到 PBO,GET CURSOR 读取 PAI 的字段和行。
  • 🔁 数据传输: LOOP AT … USING CONTROL 在 PBO 中运行,而普通的 LOOP AT 在 PAI 中运行,数据在这些循环中在屏幕和内部表之间移动。
  • ???? 动态属性: SCREEN 表和-cols 结构在运行时更改列的可见性和格式。

SAP ABAP 表控制

什么是表格控件? SAP ABAP?

表格控件和步骤循环是屏幕表格显示的对象,您可以将其添加到屏幕中的屏幕 Painter.

从编程角度来看,表格控件和步骤循环几乎完全相同。表格控件只是改进的步骤循环,以与桌面应用程序中的表格相关的外观和感觉来显示数据。

ABAP 表控件的功能

使用表格控件,用户可以:

  • 垂直和水平滚动表格
  • 调整列宽
  • 在字段内滚动(当字段内容比字段宽时)
  • 选择表格行或列
  • 重新排列列的顺序
  • 保存当前显示设置以供将来使用

表格控件还提供特殊的格式化功能(一些是自动的,一些是可选的),使表格更易于查看和使用。表格控件提供 –

  • 当用户调整窗口大小时,自动调整表格大小(垂直和水平)
  • 行与列之间的分隔线(垂直和水平)
  • 所有列的列标题字段

一般来说,表控件提供的许多功能都是由系统的 SAPgui 前端,因此您无需自己编程。唯一值得注意的例外是垂直滚动.

示例(事务 TZ60)

SAP ABAP 表控制

上面的事务代码 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

创建表控件

  1. 向屏幕添加表格控件元素
  2. 给表控件命名。在 ABAP 程序中声明一个具有相同名称的结构体(CONTROLS)。使用屏幕类型 TABLEVIEW )
  3. 要创建字段,请转到“字典/程序字段”功能。
    • 输入您想要的字段的结构名称。(如果您希望从程序的字典中选择,请单击相关按钮)。
    • 在字段列表中选择您想要的字段并选择确定。
    • 单击表格控制区域

如果需要选择列,请在属性中选中相应的复选框并为其命名。在 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 来隐藏或保护给定用户角色的列,而不是构建第二个屏幕。

常见问题

前端处理水平滚动,但垂直滚动由 PAI 编码。请评估 SY-UCOMM 中的滚动功能代码,并在下次 PBO 运行之前移动控制结构的 top_line 字段。

An ALV 网格 它无需额外代码即可提供排序、筛选、汇总和导出功能,因此非常适合用于显示列表。当屏幕需要自定义输入逻辑并需要对每个单元格进行完全控制时,表格控件是更佳选择。

SY-STEPL 保存屏幕循环中当前处理的行的索引,SY-LOOPC 保存屏幕上可见的行数。这两个变量仅在控件的 LOOP … ENDLOOP 函数内部填充。

是的。ABAP 开发工具中的 AI 助手会根据内部表的描述,自动生成 CONTROLS 声明、屏幕循环以及滚动逻辑。生成的流程逻辑仍需在屏幕上进行测试。 Painter.

AI 分析工具读取屏幕流程逻辑,列出字段和功能代码,并提出等效的基于 Fiori 或 ALV 的设计方案。该方案可缩短现代化项目的分析阶段。

总结一下这篇文章: