表格控制(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. 另外,那个

w/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 返回其索引的行)来处理它。
- ABAP 中 Table Control例子
实现了Table Control的主要的一些功能,可以作为例子参考,实现的功能有是否可编辑切换,选择某一条记录点击按钮显示详细信息,新增记录,删除记录,选择所有记录,选择光标所有记录,取消选择所有,排 ...
- SAP ABAP编程 Table Control动态隐藏列
在SAP DIALOG设计中,有时候须要动态的隐藏某些列,以下是方法. ***数据定义 CONTROLS: table_control TYPE TABLEVIEW USING SCREEN 0100 ...
- ABAP table control例子
[转自]http://blog.csdn.net/lhx20/article/details/3039909Table control用于在screen上以表格的形式显示数据,在table contr ...
- ABAP Table Control
SAP中,Table Control是在Screen中用的最广泛的控件之一了,可以实现对多行数据的编辑. 简单来说,Table Control是一组屏幕元素在Screen上的重复出现,这就是它与普通 ...
- ABAP中的Table Control编程
SAP中,Table Control是在Screen中用的最广泛的控件之一了,可以实现对多行数据的编辑. 简单来说,Table Control是一组屏幕元素在Screen上的重 ...
- abap table control里面各种属性和事件的写法
SAP中,Table Control是在Screen中用的最广泛的控件之一了,可以实现对多行数据的编辑. 简单来说,Table Control是一组屏幕元素在Screen上的重复出现,这就是它与普通屏 ...
- ABAP CDS Table Function介绍与示例
Core data services(以下简称CDS)可以指两样东西,一个是HANA CDS,一个是ABAP CDS. 如我们所知,HANA CDS只支持HANA数据库,ABAP CDS理论上支持多种 ...
- TABLE CONTROL隐藏列和固定列的实现
一.设置固定列 需求:为了方便对主要关心信息地查看,用户希望TABLE CONTROL左边的一列或者几列在屏幕上固定.针对用户这样子的需求, 我们首先会想到类似与屏幕编辑/可见等字段属性设置,但是此方 ...
- table control里面各种属性和事件
[转自]http://blog.csdn.net/hackai886/article/details/7935366 SAP中,Table Control是在Screen中用的最广泛的控件之一了,可以 ...
随机推荐
- 跟随标准与Webkit源码探究DOM -- 获取元素之getElementsByName
按照name属性获取多元素 -- getElementsByName 标准 DOM 1 定义在HTMLDocument Interface 中,原型NodeList getElementsByName ...
- mysql查看和修改最大数量
通常,mysql的最大连接数默认是100, 最大可以达到16384.1.查看最大连接数:show variables like '%max_connections%';2.修改最大连接数方法一:修改配 ...
- ps图像渐变
整理自:http://zhidao.baidu.com/question/16374167.html 1.用ps打开图片 2.在切换至英文输入法状态下(下面的操作均如此)按q 快捷键q的作用是切换标准 ...
- ruby -- 问题解决(二)rails4.0create引起的ActiveModel::ForbiddenAttributesError错误
之前将rails升级到4.0版本,发生了ActiveModel::ForbiddenAttributesError错误 于是上网溜达了一会,找到解决方案, ActiveModel::Forbidden ...
- 前端模块化:RequireJS
前言 前端模块化能解决什么问题? 模块的版本管理 提高可维护性 -- 通过模块化,可以让每个文件职责单一,非常有利于代码的维护 按需加载 -- 提高显示效率 更好的依赖处理 -- 传统的开发模式,如果 ...
- UML系列01之 UML和绘图工具Visio介绍
概要 UML,全称是Unified Modeling Language,中文是"统一建模语言".通俗点说,UML是一种创建模型的语言.UML是在开发阶段,说明,可视化,构建和书写一 ...
- IEE分月表改造
IEE版本:5.1.40 需求:由于目前的IEE版本并不支持分区表,且删除历史数据效率很低,删除部分数据后空间释放方面也不理想. 现采用按月分表存放数据.这样卸载历史数据时,直接删除历史表即可. 改造 ...
- 一种感觉不太好的设置radioButton的方法
从后台传到前台,让前台的Radiobutton被选中. jquery代码: if(b_type == '') { return false; } else if($('input[name = &qu ...
- xss-跨站脚本攻击-后台传给前端的html标签安全显示
作用 后台拼接的html字符串传到前端,默认是不安全的,需要告诉前端这个字符串是安全的,可以正常显示html标签. 知识点 1.定义 2 3 <script> 获取session ...
- 《构建之法》阅读有疑 与 个人Week1作业
<构建之法>阅读有疑 在用将近五节课的时间将邹欣老师的书<构建之法——现代软件工程>第二版大致看完.虽然全书是以轻松的口吻与”移山公司”员工的一些趣味谈话来传输一些理念和思想的 ...