ABAP中的Table Control编程.doc_第1页
ABAP中的Table Control编程.doc_第2页
ABAP中的Table Control编程.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ABAP中的Table Control编程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 scre

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论