abap_Table_Control

上传人:飞*** 文档编号:47746195 上传时间:2018-07-04 格式:PDF 页数:6 大小:279.74KB
返回 下载 相关 举报
abap_Table_Control_第1页
第1页 / 共6页
abap_Table_Control_第2页
第2页 / 共6页
abap_Table_Control_第3页
第3页 / 共6页
abap_Table_Control_第4页
第4页 / 共6页
abap_Table_Control_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《abap_Table_Control》由会员分享,可在线阅读,更多相关《abap_Table_Control(6页珍藏版)》请在金锄头文库上搜索。

1、 abap Table Control 表格控制 (Table Control)和步循环 1. 两个标准 Demo: SAPMTZ60,SAPMTZ61 2. 简介 3. 建立 Table Control程序的基本流程 4. 使用步循环 5. 表格控制 (Table Control)和步循环注意事项 6. 在屏幕表格中循环和在内表与屏幕表格中同时循环的区别 7. 确定屏幕循环的记录条目 8. MODIFY 2. 简介 表格控制和步循环是用于屏幕表格显示的对象。表格控制只是增强了的步循 环, 它可以使用桌面应用程序中表格工具的“Look” 和“Feel”来显示数据。 表格控制还提供使表格易于查看

2、和使用的专用格式化功能 步循环的一个特点是它们的表行能够在屏幕上跨越多行。相反,表格控制 中的行总是单行,但可以很长。(表格控制的行能够滚动。) 通常表格控制所提供的许多特征由系统的 SAPGUI 前端操纵,因此,不必在 ABAP/4 事务中编制任何特征(除了竖直滚动)。 LOOP 语句的任务 LOOP 语句负责读取往返传递于屏幕和 ABAP/4 程序之间的屏幕表格值。 因此必须同时在 PBO 和 PAI 事件中为屏幕中的每一个表格编制LOOP 语句。至 少在此应有一个空LOOP.ENDLOOP 语句。 LOOP 语句还用于驱动滚动。在PBO 事件中, LOOP 使用一个参数告诉从表格的何处开

3、始循环。该参数因此导致下一 个屏幕表格显示的更新(对于表格控制, 该参数是表格控制结构中的TOP_LINE 字段;对于步循环,该参数为用于LOOP 语句的 CURSOR参数。)。 ABAP/4 程序 和系统都可以设置该参数。 注意,屏幕表格中所显示的行数可以改变。当屏幕表格可调整并且用户更改窗口 的高度时就会出现这种情况。在这种情况下,PAI 中的下一个 LOOP 就更改 PAI 中传到 ABAP/4程序的表格行数。 LOOP 语句有两种重要的格式: LOOP 如果正在使用表格控制,就必须包括附加的 WITH CONTROL 参数: LOOP WITH CONTROL . . ENDLOOP

4、. 该语句在屏幕表格行中循环( Table Control有多少行就循环多少次),同时在 每个块和程序的对应 ABAP/4 字段之间往复传送数据。可以在 ABAP/4 中将屏 幕表格字段声明为任何类型(数据库表格、结构或单个字段),内表字段除 外。 对于步循环,如果正在执行本身的滚动(例如,使用 F21F24) ,则必须使用 该语句。 LOOP AT .该语句可同时在内表和屏幕表格行中循环。常常将此屏幕表格字段声明为内表字 段,但不是非得如此。 对于该 LOOP ,步循环显示都带有滚动条。该滚动由系统自动操纵。 7. 在 controls声明的时候对应的screen 中可以对 controls

5、定义的对象 进行操作 Eg. 在屏幕表格中直接循环 在 ABAP/4 模块中,使用 SY-STEPL 以查找当前正在处理的屏幕表格行的索 引。每循环一次,系统就设置一次该变量。SY-STEPL 的值总是介于 1 与当前所 显示的行数之间。您可以在程序中声明表格偏移量(常称为 BASE ,并通常用 SY-LOOPC 初始化)并用它同SY-STEPL 一起获得与当前屏幕表格行相对应的内 表行。 (IND = BASE + SY-STEPL - 1.) 请记住, SY-STEPL 只在 LOOP.ENDLOOP 处理的范围之内才有意义。 在内表中循环 LOOP AT CURSOR WITH CONT

6、ROL FROM TO . . ENDLOOP. 表示同时在内表和屏幕表格中循环。 该形式的 LOOP语句在内表中循环,对每行都执行 。对于每个内 表行,系统将相应程序字段传送到对应的屏幕表格行,或将相应的屏幕表格行 传送回对应的程序字段。 使用步循环时,在PAI 事件中省略 CURSOR 参数。 FROM 和 TO参数只能用于 步循环。 WITH CONTROL参数只能用于表格控制。 设置 以 告诉系统从何处开始显示。对于表格控制,是 TABLEVIEW 结构中的 TOP_LINE 字段(省略的话系统会自动设 置)。对于步循环,请声明局部程序变量以用作CURSOR参数。 建立 Table C

7、ontrol程序的基本流程 . /主程序 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 cursor tab1-CURRENT_LIN

8、E. 5.当数据有改变时更新itab LOOPAT CHAIN. FIELD SP1-CARRID. ,MODULE TAB1_MODIFY ON CHAIN-REQUEST.ENDCHAIN.ENDLOOP. 使用步循环 . 步循环分为两类:静态的和动态的。静态步循环有固定的大小,运行时无法 更改。动态步循环大小可变。如果用户重置窗口的大小,系统就会自动地增加 或减小所显示的步循环块的个数。可以定义任意数量的静态步循环,但动态步循 环只能有一个。 可以在屏幕制作器中指定步循环的类型。屏幕中的每一个循环都有“循环类型” (fixed 静态, variable 动态)和“ 循环次数” 属性。如果

9、循环是固定 的,“循环次数”告诉系统用于显示的循环块的数量。该数值可以永久不变。 编制动态和静态步循环的方法完全一样。两种类型都可以使用 LOOP 和 LOOP AT 语句。 屏幕操作如图 1.放入 field 2.选择要编组的 field,将 field定义组表格控制 (Table Control)和步循环注意事项 1.在layout 设计器中放置的 I/O field可以是来自 dbtab, 也可以是来自 itab, 其实是个 screen 可以识别的 2. screen上放置的 I/O field和其它控件如 Table Control一定要和主程序 中声明的名称一致 , 如果放置之前没

10、有定义的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

11、-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

12、 = IMAKT-SPRAS. MAKT-MAKTX = IMAKT-MAKTX. CTRL1-FLAG = IMAKT-CKBOX. 5. 在屏幕表格中放入内表( 工作区 ).是屏幕表格和程序内表关联. 所要放入的 itab一定要使有表头的 (其实屏幕要的是wa) 注意选择的时候要写入内表名称, 选择后面的按钮 操作的时候直接 modify 那个内表系统就能自动识别user 的更新 . 只是循环的时 候要注意指针的运动 , 尽量使屏幕和内表一起循环. 由于屏幕表格和程序内表关联, 所以在 PAI 中 LOOP AT 的时候仍然可以使 用屏幕表格的各种参数eg. index ctrl1-cur

13、rent_line /逻辑流 (PAI) LOOP AT IMAKT.MODULE SET_LINE_COUNT_0901. ENDLOOP. /程序 module SET_LINE_COUNT_0901 input MODIFY IMAKT index ctrl1-current_line. endmodule. 再说表格控制器 .在 layout 中设置的表格控制器和 .net 中的 gridview有点类似, 其中的各个列 必须和要和与之关联的内表的字段名称一样,否则将无法访问 , 或者是置无法取 出. 2.另外, 那个/SelColumn 选项可以和 itab中的 一个 C类型的字段关

14、联以判断表格行的选中情况. ABAP- 读取 DB中前 n 行SELECT * UP TO ROWS ,在屏幕编辑器中设置必须输入的栏位确定屏幕循环的记录条目 使用 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 返回其索引的行)来处理它。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号