表格控制(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)和步循环的更多相关文章

  1. ABAP 中 Table Control例子

    实现了Table Control的主要的一些功能,可以作为例子参考,实现的功能有是否可编辑切换,选择某一条记录点击按钮显示详细信息,新增记录,删除记录,选择所有记录,选择光标所有记录,取消选择所有,排 ...

  2. SAP ABAP编程 Table Control动态隐藏列

    在SAP DIALOG设计中,有时候须要动态的隐藏某些列,以下是方法. ***数据定义 CONTROLS: table_control TYPE TABLEVIEW USING SCREEN 0100 ...

  3. ABAP table control例子

    [转自]http://blog.csdn.net/lhx20/article/details/3039909Table control用于在screen上以表格的形式显示数据,在table contr ...

  4. ABAP Table Control

    SAP中,Table Control是在Screen中用的最广泛的控件之一了,可以实现对多行数据的编辑.  简单来说,Table Control是一组屏幕元素在Screen上的重复出现,这就是它与普通 ...

  5. ABAP中的Table Control编程

          SAP中,Table Control是在Screen中用的最广泛的控件之一了,可以实现对多行数据的编辑.       简单来说,Table Control是一组屏幕元素在Screen上的重 ...

  6. abap table control里面各种属性和事件的写法

    SAP中,Table Control是在Screen中用的最广泛的控件之一了,可以实现对多行数据的编辑. 简单来说,Table Control是一组屏幕元素在Screen上的重复出现,这就是它与普通屏 ...

  7. ABAP CDS Table Function介绍与示例

    Core data services(以下简称CDS)可以指两样东西,一个是HANA CDS,一个是ABAP CDS. 如我们所知,HANA CDS只支持HANA数据库,ABAP CDS理论上支持多种 ...

  8. TABLE CONTROL隐藏列和固定列的实现

    一.设置固定列 需求:为了方便对主要关心信息地查看,用户希望TABLE CONTROL左边的一列或者几列在屏幕上固定.针对用户这样子的需求, 我们首先会想到类似与屏幕编辑/可见等字段属性设置,但是此方 ...

  9. table control里面各种属性和事件

    [转自]http://blog.csdn.net/hackai886/article/details/7935366 SAP中,Table Control是在Screen中用的最广泛的控件之一了,可以 ...

随机推荐

  1. 跟随标准与Webkit源码探究DOM -- 获取元素之getElementsByName

    按照name属性获取多元素 -- getElementsByName 标准 DOM 1 定义在HTMLDocument Interface 中,原型NodeList getElementsByName ...

  2. mysql查看和修改最大数量

    通常,mysql的最大连接数默认是100, 最大可以达到16384.1.查看最大连接数:show variables like '%max_connections%';2.修改最大连接数方法一:修改配 ...

  3. ps图像渐变

    整理自:http://zhidao.baidu.com/question/16374167.html 1.用ps打开图片 2.在切换至英文输入法状态下(下面的操作均如此)按q 快捷键q的作用是切换标准 ...

  4. ruby -- 问题解决(二)rails4.0create引起的ActiveModel::ForbiddenAttributesError错误

    之前将rails升级到4.0版本,发生了ActiveModel::ForbiddenAttributesError错误 于是上网溜达了一会,找到解决方案, ActiveModel::Forbidden ...

  5. 前端模块化:RequireJS

    前言 前端模块化能解决什么问题? 模块的版本管理 提高可维护性 -- 通过模块化,可以让每个文件职责单一,非常有利于代码的维护 按需加载 -- 提高显示效率 更好的依赖处理 -- 传统的开发模式,如果 ...

  6. UML系列01之 UML和绘图工具Visio介绍

    概要 UML,全称是Unified Modeling Language,中文是"统一建模语言".通俗点说,UML是一种创建模型的语言.UML是在开发阶段,说明,可视化,构建和书写一 ...

  7. IEE分月表改造

    IEE版本:5.1.40 需求:由于目前的IEE版本并不支持分区表,且删除历史数据效率很低,删除部分数据后空间释放方面也不理想. 现采用按月分表存放数据.这样卸载历史数据时,直接删除历史表即可. 改造 ...

  8. 一种感觉不太好的设置radioButton的方法

    从后台传到前台,让前台的Radiobutton被选中. jquery代码: if(b_type == '') { return false; } else if($('input[name = &qu ...

  9. xss-跨站脚本攻击-后台传给前端的html标签安全显示

    作用 后台拼接的html字符串传到前端,默认是不安全的,需要告诉前端这个字符串是安全的,可以正常显示html标签. 知识点 1.定义 2 3 <script>      获取session ...

  10. 《构建之法》阅读有疑 与 个人Week1作业

    <构建之法>阅读有疑 在用将近五节课的时间将邹欣老师的书<构建之法——现代软件工程>第二版大致看完.虽然全书是以轻松的口吻与”移山公司”员工的一些趣味谈话来传输一些理念和思想的 ...