------------------------------2007-07-11~2007-07-12---------------------------

------------------------------2007-07-11~2007-07-12---------------------------

ABAP/4 中声明表格控制(获取或设置屏幕控件的状态)

用指定偏移量赋值

表格控制和步循环

 

 

 

 

ABAP/4 中声明表格控制(获取或设置屏幕控件的状态)

在屏幕中使用表格控制时,必须在ABAP/4程序中同时声明表格控制结构和表格控制字段。例如,事务TZ60有:

TABLES:   SFLIGHT.

CONTROLS: FLIGHTS TYPE TABLEVIEW USING SCREEN 200.

CONTROLS 语句定义TABLEVIEW类型的控制结构。系统从给定屏幕的屏幕制作器属性中获得结构的初始值

Eg. CONTROLS: TAB1 TYPE TABSTRIP.       tab控件的状态控制.(声明)

//使用

    IF SY-UCOMM(4) = 'TAB1'.

  TAB1-ACTIVETAB = SY-UCOMM.

 

 

用指定偏移量赋值

 

可以在每条 ABAP/4 语句中为基 本数据类型 指定偏移量 和长度(参 见指定数据对象的偏移量)。在这 种情况下, MOVE 语句语法如 下:

语法:MOVE <f1>[+<o1>][(<l1>)] TO <f2>[+<o2>][(<l2>)].

赋值运算符语法如下:

语法:<f2>[+<o2>][(<l2>)] = <f1>[+<o1>][(<l1>)]

将字段 <f1> <o1>+1 位置开始且 长度为 <l1> 的段内容赋 给字段 <f2> ,覆盖从 <o2>+1 位置开始且 长度为 <l2> 的段。

 

 

Tabstrip Controls 的制作.

1.    Layout中放上Tabstrip控件.

2.    设置text属性,并在中间放入Subscreen area控件.

3.    设置每个tab的属性,注意一定要吧Ret. Field指向所放置的Subscreen area控件的名称.

4.    在主程序中定义tab控件

CONTROLS <所添加的tab控件名称> TYPE TABSTRIP.

设置初始标签MYTABSTRIP-ACTIVETAB = <标签名称>.(可选)

5.    处理逻辑流(一定要配套使用)

SY-REPID---------获得当前主程序名称

PROCESS BEFORE OUTPUT.
  MODULE STATUS_0100.
  CALL SUBSCREEN: SUB1 INCLUDING <screen
所在主程序名> <屏幕编号>(可用变量),
                  SUB2 INCLUDING SY-REPID '0120',
                  SUB3 INCLUDING SY-REPID '0130'.

PROCESS AFTER INPUT.
  MODULE CANCEL AT EXIT-COMMAND.
  CALL SUBSCREEN: SUB1,
                  SUB2,
                  SUB3.
  MODULE USER_COMMAND.

6.    处理单击响应.

module USER_COMMAND_0900 input.

 IF SY-UCOMM(4) = 'TAB9'.

  TAB9-ACTIVETAB = SY-UCOMM.

  SUB3_DYN = SY-UCOMM+5(3).

 ENDIF.

endmodule.                 " USER_COMMAND_0900  INPUT

 

 

 

表格控制(Table Control)和步循环

表格控制和步循环是用于屏幕表格显示的对象。表格控制只是增强了的步循环,它可以使用桌面应用程序中表格工具的“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 中将屏幕表格字段声明为任何类型(数据库表 格、结构或 单个字段) ,内表字段除外。

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

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 参数。FROMTO参数只能用于步循环。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 语句。

 

 

表格控制(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逻辑流.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值