- 浏览: 56435 次
- 性别:
- 来自: 北京
最近访客 更多访客>>
最新评论
-
harry_2013:
不能运行
Upload excel file 到 INTERNAL TABLE 的方法 -
dan001:
function dsn()
{
ddd
}
ABAP Standard Report -
linginfanta:
推荐文泉驿
推荐下载WindowsXP字体增强补丁 -
tapestry:
显示InformalParameter只要加入个Mixin就可 ...
Tapstry5.0.5升级到5.0.6中注意的问题
表格控制(Table Control)和步循环
1.
两个标准Demo: SAPMTZ60,
SAPMTZ61
2.
简介
3.
建立Table Control程序的基本流程
4.
使用步循环
5.
表格控制(Table Control)和步循环注意事项
6.
在屏幕表格中循环和在内表与屏幕表格中同时循环的区别
7.
确定屏幕循环的记录条目
8.
MODIFY
2.
简介
表格控制
和步循环是用于屏幕表格显示的对象。表格控制只是增强了的步循环,它可以使用桌面应用程序中表格工具的“Look” 和“Feel”来显示数据 。表格控制还提供使表格易于查看和使用的专用格式化功能
步循环的
一个特点是它们的表行能够在屏幕上跨越多行。 相反,表格控制中的行总是单行,但可以很长。(表格控制的行能够滚动。)
通常表格控制所提供的许多特征由系统的 SAPGUI 前端操纵, 因此,不必在ABAP/4 事务中编制 任何特征( 除了竖直滚 动)。
LOOP
语句的任务
LOOP
语句负责读取往返传递于屏幕和 ABAP/4 程序之间的屏幕表格值 。
因此必须同时在 PBO 和 PAI 事件中为屏幕中的每一个表格编制LOOP语句。至少在此应有一个空LOOP...ENDLOOP语句。
LOOP
语
句还用于驱动滚动。在PBO事件中,LOOP使用一个参数告诉从表格的何处开
始循环。该参数因此导致下一个屏幕表格显示的更新(对于表格控制,该参数是表格控制结构中的TOP_LINE
字段;对于步循环,该参数为用于LOOP语句的CURSOR参数。)。ABAP/4 程序和系统都可以设置该参数。
注意,屏幕表格中所显示的行数可以改变。当屏幕表格可调整并且用户更改窗口的高度时就会出现这种情况。在这种情况下,PAI中的下一个LOOP就更改PAI中传到ABAP/4程序的表格行数。
LOOP
语句有两种重要的格式 :
LOOP
如果正在使用表格控制,就必须包括附加的 WITH CONTROL参数:
LOOP WITH CONTROL <table-control>.
<actions>...
ENDLOOP
.
该语句在屏幕表格行中循环(
Table Control
有多少行就循环多少次)
,同时在每个块和程序的对应 ABAP/4 字段之间往复传送数据 。可以在 ABAP/4 中将屏幕表格字段声明为任何类型(数据库表 格、结构或 单个字段) ,内表字段除外。
对于步循环,如果正在执行本身的滚动(例如,使用 F21-F24) ,则必须使用该语句。
LOOP AT <internal table>.
该语句可同时在内表和屏幕表格行中循环。常常将此屏幕表格字段声明为内表字段,但不是非得如此。
对于该 LOOP,步循环显示都带有滚动条。该滚动由系统自动操纵。
7.
在
controls
声明的时候对应的
screen
中可以对
controls
定义的对象进行操作
Eg.
在屏幕表格中直接循环
在 ABAP/4 模块中,使用
SY-STEPL
以查找当前正在处理的屏幕表格行的索引。每循环一次,系统就设置一次该变量。SY-STEPL 的值总是介于 1与当前所显示的行数之间。您可以在程序中声明表格偏移量(常称为 BASE,并通常用
SY-LOOPC
初始化)并用它同SY-STEPL 一起获得与当前屏幕表格行相对应的内表行。(IND = BASE + SY-STEPL - 1.)
请记住,SY-STEPL只在LOOP...ENDLOOP处理的范围之内才有意义。
在内表中循环
LOOP AT <internal table> [CURSOR <scroll-var>]
[WITH CONTROL <table-control>]
[FROM <line1>] [TO <line2>].
...<actions>...
ENDLOOP.
表示同时在内表和屏幕表格中循环。
该形式的 LOOP语句在内表中循环,对每行都执行 <actions>。对于每个内表行,系统将相应程序 字段传送到对应的屏幕表格行,或将相应的屏幕表格行传送回对应的程序字段。
使用步循环时,在PAI事件中省略CURSOR 参数。FROM和TO参数只能用于步循环。WITH CONTROL参数只能用于表格控制。
设置
<scroll-var>
以
告诉系统从何处开始显示
。对于表格控制,<scroll-var> 是TABLEVIEW 结构中的TOP_LINE字段(省略的话系统会自动设置)。对于步循环,请声明局部程序变量以用作CURSOR参数。
建立Table Control程序的基本流程.
//
主程序
1.
声明表格控制
Eg. CONTROLS: CTRL1 TYPE TABLEVIEW USING SCREEN 0901.
2.
定义要show出来的itab
DATA SP1 LIKE SPFL1 OCCURS 0 WITH HEADER LINE.
DATA SP1 LIKE TABLE OF SPFL1 WITH HEADER LINE.(
等价)
3.
增加itab数据
//
逻辑流
4.
循环读取itab逐行写入Table Control当前行.(BPO)
LOOP WITH CONTROL <table-control> [cursor tab1-CURRENT_LINE].
5.
当数据有改变时更新itab
LOOP
AT <ITAB>
CHAIN.
FIELD SP1-CARRID.
…
MODULE TAB1_MODIFY ON CHAIN-REQUEST.
ENDCHAIN.
ENDLOOP.
使用步循环.
步循环分为两类:静态的和动态的。静态步循环有固定的大小,运行时无法更改。动态步循环大小可变 。如果用户重置窗口的大小,系统就会自动地增加或减小所显示的步循环块的个数。可以定义任意数量的静态步循环,但动态步循环只能有一个。
可
以在屏幕制作器中指定步循环的类型。屏幕中的每一个循环都有“循环类型”(fixed= 静态, variable= 动态)和“ 循环次数”
属性。如果循环是固定的,“循环次数”告诉 系统用于显
示的循环块的数量。该数值可以永久不变。编制动态和静态步循环的方法完全一样。两种类型都可以使用 LOOP 和 LOOP AT 语句。
屏幕操作如图
1.
放入field
2.
选择要编组的field,将field定义组
表格控制(Table Control)和步循环注意事项
1.
在layout设计器中放置的I/O field可以是来自dbtab,也可以是来自itab,其实是个screen可以识别的<work area>
2.
screen
上放置的I/O field和其它控件如Table Control一定要和主程序中声明的名称一致,如果放置之前没有定义的field,将会出现runtime error或者根本无法激活.
3.
无论是触发滚动条还是向下按钮,都会触发PBO/PAI逻辑流.
4.
在屏幕表格中循环和在内表与屏幕表格中同时循环的区别
只在屏幕表格中循环,会以屏幕表格为主,在显示的时候需要使所要显示的内表适应屏幕,如果屏幕表格的行数比内表的行数多的话仍然会显示一些空行
如
//
逻辑流
LOOP WITH CONTROL CTRL1.
MODULE DISPLAY_CTRL1_101 .
ENDLOOP.
//
程序
READ TABLE IMAKT INDEX CTRL1-CURRENT_LINE.
IF SY-SUBRC = 0.
MAKT-SPRAS = IMAKT-SPRAS.
MAKT-MAKTX = IMAKT-MAKTX.
CTRL1-FLAG = IMAKT-CKBOX.
ENDIF.
在内表与屏幕表格中同时循环可以使屏幕表格和内表同时循环.不必严格控制内表要读取那一行(个人效率较前者要高,因为不用再次搜索和判断),而且,不会显示多于的空白行.
//
逻辑流
LOOP AT IMAKT WITH CONTROL CTRL1 CURSOR CTRL1-TOP_LINE.
MODULE DISPLAY_CTRL1_101 .
ENDLOOP.
//
程序
MAKT-SPRAS = IMAKT-SPRAS.
MAKT-MAKTX = IMAKT-MAKTX.
CTRL1-FLAG = IMAKT-CKBOX.
5.
在屏幕表格中放入内表
(
工作区
).
是屏幕表格和程序内表关联
.
l
所要放入的itab一定要使有表头的(其实屏幕要的是wa)
l
注意选择的时候要写入内表名称,选择后面的按钮
l
操作的时候直接modify那个内表系统就能自动识别user的更新.只是循环的时候要注意指针的运动,尽量使屏幕和内表一起循环.
l
由于屏幕表格和程序内表关联,所以在PAI中LOOP AT <ITAB>的时候仍然可以使用屏幕表格的各种参数eg. index ctrl1-current_line
//
逻辑流(PAI)
LOOP AT IMAKT.
MODULE SET_LINE_COUNT_0901.
ENDLOOP.
//
程序
module SET_LINE_COUNT_0901 input
MODIFY IMAKT index ctrl1-current_line.
endmodule.
再说表格控制器
1.
在layout中设置的表格控制器和.net中的gridview有点类似
,
其中的各个列必须和要和与之关联的内表的字段名称一样,
否则将无法访问,或者是置无法取出.
2.
另外,那个
/SelColumn选项可以和itab中的一个C类型的字段关联以判断表格行的选中情况.
ABAP---
读取DB中前n行
SELECT * UP TO <N> ROWS
………
在屏幕编辑器中设置必须输入的栏位
确定屏幕循环的记录条目
使用
SY-STEPL
以查找当前正在处理的屏幕表格行的索引。每循环一次,系统就设置一次该变量。SY-STEPL 的值总是介于 1与当前所显示的行数之间。您可以在程序中声明表格偏移量(常称为 BASE,并通常用
SY-LOOPC
初始化)并用它同SY-STEPL 一起获得与当前屏幕表格行相对应的内表行。(IND = BASE + SY-STEPL - 1.)
MODIFY
MODIFY <itab> [FROM <wa>] [INDEX <idx>].
FROM
选项中指定的工作区域
<wa>
代替
<itab>
中的行。如果表格有表头行,可以忽略
FROM
选项。这样,表格工作区域就代替
行。
如果使用
INDEX
选项,则新
行代替索引为
<idx>
的现有行。如果替换成功,则将
SY-SUBRC
设置为
0
。
如果内表包含的行少于
<idx>
,则不更改任何行并且
SY-SUBRC
包含
4
。
如果使用没
有
INDEX
选项的
MODIFY
语句,则系统只能在
LOOP - ENDLOOP
块中通过更改当前行(
例如由
SY-TABIX
返回其索引的行)来处理它。
发表评论
-
SAP 中如何寻找增强
2008-08-16 19:55 1732方法一、利用TCODE寻找增强(第二代的增强) 执行一个程序( ... -
SAP-R/3出口(增强)
2008-08-15 20:53 2064首先来讲解一下什么是 ... -
两内表关联删除操作
2008-06-17 13:23 1351有两个内部表:IT_TAB1 ... -
BAPI_GOODSMVT_CREATE --mb01,mb1A
2008-06-17 13:22 1946* BAPI TO Upload Inventory ... -
System Fields for Current Date and Time
2008-06-11 10:47 974The following system fields are ... -
如何动态改变Table Control的列抬头
2008-06-05 08:00 15391、In the screen painter use Inp ... -
SAP常用的function(转)
2008-06-05 07:59 19361. 获取每个月的最后一天 CALL FUNCTI ... -
程序调用——submit的用法
2008-05-21 18:45 2418ABAP程序的启动方式有两种。一种是直接运行,即在事务代码SE ... -
如何限制自己开发的耗时报表在sap系统中运行的个数,以保证正常业务的进行
2008-05-05 13:02 1151在SAP 系统中经常有许多用户自行开发的报表,有些报表运行很 ... -
源碼下載----批量下载程序和表结构
2008-04-23 07:58 1096REPORT YGJH003 NO STANDARD PAG ... -
ABAP/4编程中用到的系统函数
2008-04-23 07:56 1298sy-index:做无条件循环是的次数值. sy-subrc ... -
sap 函数小结
2008-04-23 07:55 1562函数名 描述 SD_VBAP_READ_WITH_VBELN ... -
获取SAP系统用户出口列表
2008-04-23 07:47 951REPORT Y_FIND_USEREXIT ... -
根据事务代码找User exit
2008-04-23 07:45 960TABLES : tstc, "SAP Tr ... -
Upload excel file 到 INTERNAL TABLE 的方法
2008-04-23 07:43 1663FORM upload_data . DATA:w_tab ... -
自定义BAPI的基本资料
2008-04-23 07:28 1660BAPI的简单实现步骤 一,创建Function Modu ... -
SAP BDC技术
2008-04-23 07:18 1292在SAP系统里,重复输入数据时,(数据不同,但是操作是相同的, ... -
SAP系统常用变量
2008-04-11 07:28 2432系统内部有一个专门存放系统变量的结构SYST,其中最常用的系统 ... -
Users Dialogs: Lists
2008-03-26 13:50 807data: wa_spfli type spfli, ... -
SAP SUBROUTINES SAP子程序
2008-03-25 14:24 1012SAP子程序 是PROGRAM 内部模块单元。用 FORM 开 ...
相关推荐
使用 `AT int_table` 参数可以在内部表和 Table Control 之间建立并行循环,这使得 ABAP 代码更加简洁易读。 #### 四、Table Control 的优点 - **高度定制化**:开发者可以根据需求调整 Table Control 的样式和...
然而,与简单的步循环相比,表控件引入了更多的交互性和美化效果,它能够模仿常见的桌面应用程序表格的外观和行为,如Microsoft Excel。表控件允许用户自定义列宽、排序、筛选数据,并且支持多选、分页等特性,极大...
2. **S_TABLE_CONTROL.txt**:这可能是一个关于ABAP中的表格控制(Table Control)的示例,用于显示和编辑表格数据。表格控制允许用户在GUI上与表格交互,包括排序、过滤和选择。学习点可能包括:使用TABLE CONTROL...
2. "第七章 表控制Table Control设计.pdf":表控制用于在GUI上显示动态数据表,学习者将学习如何创建和定制这些控制,以适应不同的数据展示需求。 3. "第十章 实战Smart Forms设计.pdf":SMARTFORMS是创建复杂业务...
13. **ALV Grid Control**:用于显示和编辑表格数据的内建组件,简化了报表开发。 通过深入学习和实践这个合集中的代码示例,开发者将能够熟练掌握SAP ABAP编程,从而更好地理解和定制SAP系统。这个合集不仅对于...
4. **TABLE CONTROL**:提供高级表格控件。 5. **对象**:支持面向对象的编程风格。 6. **TEXTAREA的举例**:展示文本区域的应用场景。 7. **LISTBOX的举例**:演示列表框的使用方法。 #### 第十一单元:BATCHINPUT...
ABAP(Advanced Business Application Programming)是SAP公司开发的一种编程语言,主要用于构建企业级的应用程序,尤其是在SAP R/3和SAP S/4HANA系统中。黄佳的ABAP程序开发教程针对的是初学者,旨在帮助刚接触SAP ...
"07 表控制Table Control设计.pdf"将探讨如何在ABAP程序中展示和操作表格数据。Table Control是SAP GUI中的一个标准组件,用于显示和编辑数据库表或内存中的数据集。理解如何创建和定制Table Control对于处理大量...
6. **表控制Table Control**:"第7章 表控制Table Control设计.pdf"介绍了一种显示表格数据的控件,这对于处理大量结构化数据非常有用。你将学会如何创建和操作Table Control,以提供动态的数据浏览和编辑功能。 7....
ALV(ABAP List Viewer)是SAP GUI中的一个标准工具,用于展示表格数据。在Web Dynpro中,我们可以使用SALV_WD_TABLE组件来实现ALV的功能。首先,在组件控制(componentcontrol)中导入ALV组件,并在组件使用中将其...