表格控制和步循环.doc

上传人:自*** 文档编号:126284563 上传时间:2020-03-23 格式:DOC 页数:10 大小:145.50KB
返回 下载 相关 举报
表格控制和步循环.doc_第1页
第1页 / 共10页
表格控制和步循环.doc_第2页
第2页 / 共10页
表格控制和步循环.doc_第3页
第3页 / 共10页
表格控制和步循环.doc_第4页
第4页 / 共10页
表格控制和步循环.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《表格控制和步循环.doc》由会员分享,可在线阅读,更多相关《表格控制和步循环.doc(10页珍藏版)》请在金锄头文库上搜索。

1、ABAP 表格控制(Table Control)和 步循环(STEP-LOOP)表格控制(Table Control)和步循环 1. 两个标准Demo: SAPMTZ60, SAPMTZ612. 简介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 定义的对象进行操作Eg. 在屏

5、幕表格中直接循环在 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 CONTROL FROM TO . . ENDLOOP.表示同时在内表

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

7、1 TYPE TABLEVIEW USING SCREEN 0901.2. 定义要show出来的itabDATA 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_LINE.5. 当数据有改变时更新itabLOOP AT CHAIN.FIELD SP1-CARRID. MODULE

8、TAB1_MODIFY ON CHAIN-REQUEST. ENDCHAIN. ENDLOOP.使用步循环.步循环分为两类:静态的和动态的。静态步循环有固定的大小,运行时无法更改。动态步循环大小可变 。如果用户重置窗口的大小,系统就会自动地增加或减小所显示的步循环块的个数。可以定义任意数量的静态步循环,但动态步循环只能有一个。可 以在屏幕制作器中指定步循环的类型。屏幕中的每一个循环都有“循环类型”(fixed 静态, variable 动态)和“ 循环次数” 属性。如果循环是固定的,“循环次数”告诉 系统用于显 示的循环块的数量。该数值可以永久不变。编制动态和静态步循环的方法完全一样。两种类型

9、都可以使用 LOOP 和 LOOP AT 语句。屏幕操作如图1. 放入field2. 选择要编组的field,将field定义组 表格控制(Table Control)和步循环注意事项1. 在layout设计器中放置的I/O field可以是来自dbtab,也可以是来自itab,其实是个screen可以识别的2. screen 上放置的I/O field和其它控件如Table Control一定要和主程序中声明的名称一致,如果放置之前没有定义的field,将会出现runtime error或者根本无法激活.3. 无论是触发滚动条还是向下按钮,都会触发PBO/PAI逻辑流. 4. 在屏幕表格中循

10、环和在内表与屏幕表格中同时循环的区别 只在屏幕表格中循环,会以屏幕表格为主,在显示的时候需要使所要显示的内表适应屏幕,如果屏幕表格的行数比内表的行数多的话仍然会显示一些空行 如/ 逻辑流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.

11、 在内表与屏幕表格中同时循环可以使屏幕表格和内表同时循环.不必严格控制内表要读取那一行(个人效率较前者要高,因为不用再次搜索和判断),而且,不会显示多于的空白行./ 逻辑流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 所要放入

12、的itab一定要使有表头的(其实屏幕要的是wa)l 注意选择的时候要写入内表名称,选择后面的按钮l 操作的时候直接modify那个内表系统就能自动识别user的更新.只是循环的时候要注意指针的运动,尽量使屏幕和内表一起循环.l 由于屏幕表格和程序内表关联,所以在PAI中LOOP AT 的时候仍然可以使用屏幕表格的各种参数eg. index ctrl1-current_line/ 逻辑流(PAI)LOOP AT IMAKT. MODULE SET_LINE_COUNT_0901.ENDLOOP./ 程序module SET_LINE_COUNT_0901 inputMODIFY IMAKT in

13、dex ctrl1-current_line.endmodule. 再说表格控制器1. 在layout中设置的表格控制器和.net中的gridview有点类似 , 其中的各个列必须和要和与之关联的内表的字段名称一样, 否则将无法访问,或者是置无法取出.2. 另外,那个 /SelColumn选项可以和itab中的一个C类型的字段关联以判断表格行的选中情况. ABAP- 读取DB中前n行 SELECT * UP TO ROWS 在屏幕编辑器中设置必须输入的栏位 确定屏幕循环的记录条目使用 SY-STEPL 以查找当前正在处理的屏幕表格行的索引。每循环一次,系统就设置一次该变量。SY-STEPL 的

14、值总是介于 1与当前所显示的行数之间。您可以在程序中声明表格偏移量(常称为 BASE,并通常用 SY-LOOPC 初始化)并用它同SY-STEPL 一起获得与当前屏幕表格行相对应的内表行。(IND = BASE + SY-STEPL - 1.)MODIFYMODIFY FROM INDEX .FROM 选项中指定的工作区域 代替 中的行。如果表格有表头行,可以忽略 FROM 选项。这样,表格工作区域就代替行。如果使用 INDEX 选项,则新 行代替索引为 的现有行。如果替换成功,则将 SY-SUBRC 设置为 0 。 如果内表包含的行少于 ,则不更改任何行并且 SY-SUBRC 包含 4 。如果使用没 有 INDEX 选项的 MODIFY 语句,则系统只能在 LOOP - ENDLOOP 块中通过更改当前行( 例如由

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

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