关闭

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

132人阅读 评论(0) 收藏 举报
分类:

SAP中,Table Control是在Screen中用的最广泛的控件之一了,可以实现对多行数据的编辑。
简单来说,Table Control是一组屏幕元素在Screen上的重复出现,这就是它与普通屏幕元素的区别。
如果我们对一个Table Control定义其内表为itab,工作区域为wa。那么在PBO中,系统将逐一取itab的某行到wa,然后将wa的内容转换成屏幕元素,即Table Control的一行,如此反复。
换句话说,Table Control的每一行是跟wa交互的,与itab没有直接的关联。
反过来在PAI中,系统将根据Table Control的录入情况,逐行取数据到wa(前提是该行的内容不为空),然后我们即可根据wa的内容往itab修改或添加一行记录。

1. 如何设置TC的行数
如果我们定义了TC的名称为tc_0100,则TC向导将生成如下一行代码:
    CONTROLS: tc_0100 TYPE TABLEVIEW USING SCREEN 0100.
调试可知,tc_0100是个Deep Structure,拥有很多属性,它实现了对表格控件的所有属性的封装。
这里我们先介绍属性:lines。lines代表该表控件一共有多少行可供用户查看或输入。
如果是查看状态,则一般可为其赋值LINES( itab )。如果是编辑状态,为了允许用户添加条目,则必须大于itab的行数。
而如果TC的该属性小于内表行数呢?则只有内表中的前面几行可以显示,后面的内容将不会出现在SCREEN中,当然实际中我们不会这么操作。

2. 如何设置TC中某单元格编辑与否
对于普通的屏幕元素,我们都很清楚,用LOOP AT SCREEN可以实现。对于TC,当然也是一样的。
TC向导会生成如下的Screen Flow Logic:
  LOOP AT itab INTO wa WITH CONTROL tc_0100 CURSOR tc_0100-current_line.
    MODULE tc_0100_change_field_attr.
  ENDLOOP.
这是什么意思呢?事实上,如果我们设置了tc_0100-lines = 50,那么该Module将被执行50次。
所以,只要在tc_0100_change_field_attr中添加LOOP AT SCREEN即可,如下:

MODULE tc_0100_change_field_attr OUTPUT.
  LOOP AT SCREEN.
    CASE screen-name.
      WHEN ‘ITAB-KEYFELD’.
        IF tc_0100-current_line > db_num.
          screen-input = ‘1′.
        ELSE.
          screen-input = ‘0′.
        ENDIF.
      WHEN OTHERS.
    ENDCASE.
    MODIFY SCREEN.
  ENDLOOP.
ENDMODULE.

3. 如何更新我们内表的数据
上面已经说过,在PAI处理过程中,系统将根据逐行读取TC的数据,填充到wa中,而我们的itab与屏幕元素其实没有直接的关联,所以简单而言,可以如下编写代码:
  MODULE tc_0100_modify INPUT.
    IF tc_0100-current_line <= LINES( itab ).
      MODIFY itab FROM wa INDEX tc_0100-current_line.
    ELSE.
      APPEND wa TO itab.
    ENDIF.
  ENDMODULE.

前面说过,如果tc_0100-lines = 50,那么Module tc_0100_change_field_attr将被执行50次。
那么这里的Module tc_0100_modify 是不是也是50次呢?答案是<=50次,这是因为,如果TC中某行完全为空的话,系统是不可能调用tc_0100_modify的,换句话说,此时TC中的该行将视同不存在。

4,滚动到某行某列
如果我们希望,屏幕显示后展示在用户面前的最上端或者左端是表内容中的某行某列,则应该修改变量top_line和left_col的值。一般可在PBO的tc_0100_change_tc_attr里设置:
tc_0100-top_line = 3.
tc_0100-left_col = 3.
后面left_col语句起作用的前提是,内表的字段较多,导致表控件宽度不够,确有左右滚动的必要。

5,获取鼠标所在位置
这里要用GET CURSOR语句,比如
DATA: l_line TYPE i,
      l_field TYPE screen-name.
GET CURSOR FIELD l_field LINE l_line.

这样就取得了鼠标在内表的所在行以及字段名。不过要注意的是,如果希望映射到itab,那可别忘了top_line。正确读取鼠标所在条目对应于内表哪行数据的语句是:
GET CURSOR LINE l_line.
l_line = l_line + tc_0100-top_line - 1.
READ TABLE itab INTO wa INDEX l_line.
与此类似,希望鼠标定位于内表中某单元格的语句是SET CURSOR FIELD l_field LINE l_line.

6,设置固定列,设置行选择
有时我们希望Table Control的左边几列(一般是关键字段),它们在屏幕上是固定的,可以方便用户的阅读。要怎么设置呢?首先我们肯定会想到字段的属性中去找,可惜没找到。
其实这是Table Control本身的一个属性,我们只能定义最左边的某些列不可滚动。在Screen Layout中,双击Table Control的右上角,弹出“表控制”属性,即可设置:

这里也可以看到我们对表控件的行选择进行了设置,允许多重选择,同时选中与否的信息将更新到wa的mark字段,mark一般定义成c(1)。

7,如何隐藏某列
隐藏屏幕字段,我们首先想到的肯定是LOOP AT SCREEN,设置ACTIVE或INVISIBLE的字段值。可惜测试后,发现行不通。正确的做法是,通过编程修改tabctrl-cols下的某字段可见长度。

DATA: l_hide TYPE c,
      ls_col LIKE LINE OF tc_0100-cols.
LOOP AT tc_0100-cols INTO ls_col WHERE screen-name = ‘WA-FIELD2′.
  IF l_hide IS INITIAL.
    ls_col-vislength = 6.
  ELSE.
    ls_col-vislength = 0.
  ENDIF.
  MODIFY tc_0100-cols FROM ls_col.
ENDLOOP.

0
0
查看评论

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

SAP中,Table Control是在Screen中用的最广泛的控件之一了,可以实现对多行数据的编辑。 简单来说,Table Control是一组屏幕元素在Screen上的重复出现,这就是它与普通屏幕元素的区别。 如果我们对一个Table Control定义其内表为itab,工作区域为wa。那...
  • yandong_song
  • yandong_song
  • 2013-09-03 10:15
  • 827

ABAP 中 Table Control例子

实现了Table Control的主要的一些功能,可以作为例子参考,实现的功能有是否可编辑切换,选择某一条记录点击按钮显示详细信息,新增记录,删除记录,选择所有记录,选择光标所有记录,取消选择所有,排序,行选择栏位,列不可编辑,固定列,Table Control标题,分页功能,根据输入A字段的值显示...
  • champaignwolf
  • champaignwolf
  • 2013-09-06 07:15
  • 4204

Table&nbsp;Control&nbsp;响应双击事件…

原文地址:Control 响应双击事件 控制单元格编辑 列显隐">Table Control 响应双击事件 控制单元格编辑 列显隐作者:SAP村夫Table Control 响应双击事件 一、Table Cont...
  • senlinmu110
  • senlinmu110
  • 2015-10-20 10:36
  • 888

给table control 添加新列

给一个已经用table control with wizard建立好的表想在重新添加新列的方法(针对用SE11创建的表,程序表于此类似): 1、 2、重新维护表维护生成器 3、 4、 5、然后直接扔到table control上面,之后表的属性神马的自己设置去,然...
  • liupengpeng1109
  • liupengpeng1109
  • 2015-12-24 18:05
  • 578

SAP TableControl 控制单个单元格输入

*屏幕中 PROCESS BEFORE OUTPUT. *&SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'TBL'   MOD...
  • zhongguomao
  • zhongguomao
  • 2015-02-04 09:14
  • 2591

ABAP 屏幕开发 - TableControl 颜色设置

TABLECONTROL不能通过颜色代码来设置,只能通过INTENSIFIED属性设置表格行高亮显示。 用loop at screen.只能控制高亮显示,可输入部分是红色,不可输入部分是蓝色,高亮,一般为蓝色。loop at scren . screen-INTENSIFIED = 1. ...
  • wanglei880526
  • wanglei880526
  • 2013-07-09 16:03
  • 2560

abap 在table control(表控件) 实现查找功能

      我们都知道ALV控件已经集成了查找功能,这对于在海量数据中查找某条数据是非常方便的,而 table control(表控件)没有提供这样的功能,那只能通过手工的方式在屏幕添加一个这样的功能,方便对数据的操作与查阅,要实现这个功能,需要注意...
  • F122300349
  • F122300349
  • 2010-04-22 16:19
  • 1796

ABAP 使用向导创建TABLE CONTROL (TC 表控件)

使用向导创建TC,主要有以下步骤, 1.定义你要在TC上显示的列为一个数据结构,并用该结构定义内表和工作区。在创建TC前一定要激活程序,这样TC才能获得定义的内表和工作区。 2.创建屏幕,转到格式布局,添加“表控件(含向导)”,之后按弹出的向导完成TC的创建。 3.在生成的屏幕里->逻辑流,P...
  • yang362046076
  • yang362046076
  • 2016-01-11 10:42
  • 1368

ABAP表控制Table Control设计

表控制(Table Control)是SAP应用中最重要的对象之一,业务单据的输入、基础数据的表格输入等都是使用Table Control控件,本章主要介绍: (1)在屏幕设计中通过向导来制作表控件对象,由系统生成程序; (2)非向导设计Table Control控件; (3)通过系统生成数据表维护...
  • Jay_1989
  • Jay_1989
  • 2016-06-20 08:54
  • 8105

table control 问题一 填数据丢失

自己用table control向导画了一个表格,用向导画好,在里面填写数据,拉滚动栏的时候数据丢失了! 这是为什么呢? 自动产生的代码: MODULE EMPLOYEEINFO_MODIFY INPUT.   MODIFY ZEMPLOYE...
  • yandong_song
  • yandong_song
  • 2013-09-05 16:10
  • 984
    个人资料
    • 访问:4632718次
    • 积分:65187
    • 等级:
    • 排名:第42名
    • 原创:1753篇
    • 转载:2551篇
    • 译文:101篇
    • 评论:343条
    博客专栏
    最新评论
    微信公众号
      为你推荐最新的博文~更有惊喜等着你