ABAP 表格控制Table Control和 步循环STEPLOOP.docx

上传人:b****8 文档编号:30417205 上传时间:2023-08-14 格式:DOCX 页数:9 大小:133.14KB
下载 相关 举报
ABAP 表格控制Table Control和 步循环STEPLOOP.docx_第1页
第1页 / 共9页
ABAP 表格控制Table Control和 步循环STEPLOOP.docx_第2页
第2页 / 共9页
ABAP 表格控制Table Control和 步循环STEPLOOP.docx_第3页
第3页 / 共9页
ABAP 表格控制Table Control和 步循环STEPLOOP.docx_第4页
第4页 / 共9页
ABAP 表格控制Table Control和 步循环STEPLOOP.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

ABAP 表格控制Table Control和 步循环STEPLOOP.docx

《ABAP 表格控制Table Control和 步循环STEPLOOP.docx》由会员分享,可在线阅读,更多相关《ABAP 表格控制Table Control和 步循环STEPLOOP.docx(9页珍藏版)》请在冰豆网上搜索。

ABAP 表格控制Table Control和 步循环STEPLOOP.docx

ABAP表格控制TableControl和步循环STEPLOOP

ABAP表格控制(TableControl)和步循环(STEP-LOOP)

表格控制(TableControl)和步循环

1.两个标准Demo:

SAPMTZ60,SAPMTZ61

2.简介

3.建立TableControl程序的基本流程

4.使用步循环

5.表格控制(TableControl)和步循环注意事项

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

如果正在使用表格控制,就必须包括附加的WITHCONTROL参数:

LOOPWITHCONTROL.

...

ENDLOOP.

该语句在屏幕表格行中循环(TableControl有多少行就循环多少次),同时在每个块和程序的对应ABAP/4字段之间往复传送数据。

可以在ABAP/4中将屏幕表格字段声明为任何类型(数据库表格、结构或单个字段),内表字段除外。

对于步循环,如果正在执行本身的滚动(例如,使用F21-F24),则必须使用该语句。

LOOPAT.

该语句可同时在内表和屏幕表格行中循环。

常常将此屏幕表格字段声明为内表字段,但不是非得如此。

对于该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处理的范围之内才有意义。

在内表中循环

LOOPAT[CURSOR]

[WITHCONTROL]

[FROM][TO].

......

ENDLOOP.

表示同时在内表和屏幕表格中循环。

该形式的LOOP语句在内表中循环,对每行都执行

对于每个内表行,系统将相应程序字段传送到对应的屏幕表格行,或将相应的屏幕表格行传送回对应的程序字段。

使用步循环时,在PAI事件中省略CURSOR参数。

FROM和TO参数只能用于步循环。

WITHCONTROL参数只能用于表格控制。

设置以告诉系统从何处开始显示。

对于表格控制,是TABLEVIEW结构中的TOP_LINE字段(省略的话系统会自动设置)。

对于步循环,请声明局部程序变量以用作CURSOR参数。

建立TableControl程序的基本流程.

//主程序

1.声明表格控制

Eg.CONTROLS:

CTRL1TYPETABLEVIEWUSINGSCREEN0901.

2.定义要show出来的itab

DATASP1LIKESPFL1OCCURS0WITHHEADERLINE.

DATASP1LIKETABLEOFSPFL1WITHHEADERLINE.(等价)

3.增加itab数据

//逻辑流

4.循环读取itab逐行写入TableControl当前行.(BPO)

LOOPWITHCONTROL[cursortab1-CURRENT_LINE].

5.当数据有改变时更新itab

LOOPAT

CHAIN.

FIELDSP1-CARRID.

MODULETAB1_MODIFYONCHAIN-REQUEST.

ENDCHAIN.

ENDLOOP.

使用步循环.

步循环分为两类:

静态的和动态的。

静态步循环有固定的大小,运行时无法更改。

动态步循环大小可变。

如果用户重置窗口的大小,系统就会自动地增加或减小所显示的步循环块的个数。

可以定义任意数量的静态步循环,但动态步循环只能有一个。

可以在屏幕制作器中指定步循环的类型。

屏幕中的每一个循环都有“循环类型”(fixed=静态,variable=动态)和“循环次数”属性。

如果循环是固定的,“循环次数”告诉系统用于显示的循环块的数量。

该数值可以永久不变。

编制动态和静态步循环的方法完全一样。

两种类型都可以使用LOOP和LOOPAT语句。

屏幕操作如图

1.放入field

2.选择要编组的field,将field定义组

表格控制(TableControl)和步循环注意事项

1.在layout设计器中放置的I/Ofield可以是来自dbtab,也可以是来自itab,其实是个screen可以识别的

2.screen上放置的I/Ofield和其它控件如TableControl一定要和主程序中声明的名称一致,如果放置之前没有定义的field,将会出现runtimeerror或者根本无法激活.

3.无论是触发滚动条还是向下按钮,都会触发PBO/PAI逻辑流.

4.在屏幕表格中循环和在内表与屏幕表格中同时循环的区别

只在屏幕表格中循环,会以屏幕表格为主,在显示的时候需要使所要显示的内表适应屏幕,如果屏幕表格的行数比内表的行数多的话仍然会显示一些空行如

//逻辑流

LOOPWITHCONTROLCTRL1.

MODULEDISPLAY_CTRL1_101.

ENDLOOP.

//程序

READTABLEIMAKTINDEXCTRL1-CURRENT_LINE.

IFSY-SUBRC=0.

MAKT-SPRAS=IMAKT-SPRAS.

MAKT-MAKTX=IMAKT-MAKTX.

CTRL1-FLAG=IMAKT-CKBOX.

ENDIF.

在内表与屏幕表格中同时循环可以使屏幕表格和内表同时循环.不必严格控制内表要读取那一行(个人效率较前者要高,因为不用再次搜索和判断),而且,不会显示多于的空白行.

//逻辑流

LOOPATIMAKTWITHCONTROLCTRL1CURSORCTRL1-TOP_LINE.

MODULEDISPLAY_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中LOOPAT的时候仍然可以使用屏幕表格的各种参数eg.indexctrl1-current_line

//逻辑流(PAI)

LOOPATIMAKT.

MODULESET_LINE_COUNT_0901.

ENDLOOP.

//程序

moduleSET_LINE_COUNT_0901input

MODIFYIMAKTindexctrl1-current_line.

endmodule.

再说表格控制器

1.在layout中设置的表格控制器和.net中的gridview有点类似,其中的各个列必须和要和与之关联的内表的字段名称一样,否则将无法访问,或者是置无法取出.

2.另外,那个

/SelColumn选项可以和itab中的一个C类型的字段关联以判断表格行的选中情况.

ABAP---读取DB中前n行

SELECT*UPTOROWS………

在屏幕编辑器中设置必须输入的栏位

确定屏幕循环的记录条目

使用SY-STEPL以查找当前正在处理的屏幕表格行的索引。

每循环一次,系统就设置一次该变量。

SY-STEPL的值总是介于1与当前所显示的行数之间。

您可以在程序中声明表格偏移量(常称为BASE,并通常用SY-LOOPC初始化)并用它同SY-STEPL一起获得与当前屏幕表格行相对应的内表行。

(IND=BASE+SY-STEPL-1.)

MODIFY

MODIFY[FROM][INDEX].

FROM选项中指定的工作区域代替中的行。

如果表格有表头行,可以忽略FROM选项。

这样,表格工作区域就代替行。

如果使用INDEX选项,则新行代替索引为的现有行。

如果替换成功,则将SY-SUBRC设置为0。

如果内表包含的行少于,则不更改任何行并且SY-SUBRC包含4。

如果使用没有INDEX选项的MODIFY语句,则系统只能在LOOP-ENDLOOP块中通过更改当前行(例如由SY-TABIX返回其索引的行)来处理它。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1