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中的该行将视同不存在。
原文地址:http://blogold.chinaunix.net/u2/86821/showart_2010820.html
分享到:
相关推荐
ABAP中的Table Control编程
abap tablecontrol 控件动态显示列
ABAP中的Table_Control编程
ABAP中使用TABLE CONTROL 显示数据以及操作要点小结,一个完整demo
介绍table control使用,手动方式设计table control
通过向导制作表控制对象,非向导设计Table Control控件,数据表维护程序,表格设计技巧,维护内表数据
ABAP/4(Advanced Business Application Programming)是SAP/R3目前唯一的系统发展工具, 属 4GL, 语法比较近似Visual Basic或JAVA, 和传统third-generation 语言, 如C,PASCAL 有很大不同, 在程序模块(Program ...
ABAP351高级编程-动态编程.rar ABAP351 Advanced and Generic Programming in ABAP
01_ABAP开发环境和总体介绍.pdf 02_创建HELLO WORLD程序.pdf 03_ABAP语法示例.pdf 04_数据字典和数据表的读取.pdf 05_标准列表和选择屏幕.pdf 06_实战屏幕SCREEN设计.pdf ...14_从实例学SAP ABAP编程13-19章.pdf
abap常用的表结构及其内部关系图.
SAP ABAP4编程宝典中文版(完整版)
sap abap ,快速掌握ABAP编程,63页内容,
从实例学sap abap编程,从实例学sap abap编程,从实例学sap abap编程
sap abap4 编程详解 比较详细的abap编程资料
ABAP/4用户指南的第一部分描述了ABAP/4编程语言的基本组件。它们允许用户编写并运行包括所有主要操作的ABAP/4 程序。用户可以使用这些知识编写应用程序。 在第一部分的下列章节中,您将学习: 一、 ABAP/4程序结构:...
ABAP Code Sample for ALV Grid from Dynamically Created Internal Table
abap 屏幕编程教程
SAP R/3系统中ABAP/4编程概述主要讲述了ABAP的基本语法。
SAP应用及ABAP开发最佳实践—Internal Table,
SAP_ABAP编程规范V1.2