ABAP 中 Table Control例子
实现了Table Control的主要的一些功能,可以作为例子参考,实现的功能有是否可编辑切换,选择某一条记录点击按钮显示详细信息,新增记录,删除记录,选择所有记录,选择光标所有记录,取消选择所有,排序,行选择栏位,列不可编辑,固定列,Table Control标题,分页功能,根据输入A字段的值显示B字段的值,某字段的值如果等于XXX就不可编辑等功能。相信这些功能已经可以满足大部份的开发了。
主程序代码:
 
 DATA: ok_code TYPE sy-ucomm,
 
       save_ok TYPE sy-ucomm.
 
 DATA: l_field TYPE char50,
 
       l_line  TYPE i.
TYPES: BEGIN OF ty_spfli,
 
          carrid TYPE spfli-carrid,
 
          connid TYPE spfli-connid,
 
          countryfr TYPE spfli-countryfr,
 
          cityfrom TYPE spfli-cityfrom,
 
          airpfrom TYPE spfli-airpfrom,
 
          mask(1),
 
 END OF ty_spfli.
DATA g_lines TYPE i.
 
 DATA sp2 TYPE TABLE OF ty_spfli WITH HEADER LINE.
DATA sp1 TYPE ty_spfli.
SELECT * INTO CORRESPONDING FIELDS OF TABLE sp2 FROM spfli.
CONTROLS content TYPE TABLEVIEW USING SCREEN 100.
 
 content-top_line = 1.
 
 content-lines = LINES( sp2 ).
CALL SCREEN 100.
LOOP AT sp2.
 
   WRITE: / sp2-carrid,sp2-connid,sp2-countryfr,sp2-cityfrom.
 
 ENDLOOP.
*----------------------------------------------------------------------*
 
 *  MODULE status_0100 OUTPUT
 
 *----------------------------------------------------------------------*
 
 *
 
 *----------------------------------------------------------------------*
 
 MODULE status_0100 OUTPUT.
 
   SET PF-STATUS 'STA'.
 
 ENDMODULE.                    "status_0100 OUTPUT
*----------------------------------------------------------------------*
 
 *  MODULE user_command_0100 INPUT
 
 *----------------------------------------------------------------------*
 
 *
 
 *----------------------------------------------------------------------*
 
 MODULE user_command_0100 INPUT.
 
   save_ok = ok_code.
 
   CLEAR ok_code.
 
   CASE save_ok.
 
     WHEN 'EXIT'.
 
       LEAVE TO SCREEN 0.
 
     WHEN 'SWITH'.
 
       PERFORM f_switch.
 
     WHEN 'SORT_UP'.
 
       PERFORM f_sort USING 'UP'.
 
     WHEN 'SORT_DOWN'.
 
       PERFORM f_sort USING 'DOWN'.
 
     WHEN 'DETAIL'.
 
       PERFORM f_detail.
 
     WHEN 'P--'.
 
       PERFORM f_page USING save_ok.
 
     WHEN 'P-'.
 
       PERFORM f_page USING save_ok.
 
     WHEN 'P+'.
 
       PERFORM f_page USING save_ok.
 
     WHEN 'P++'.
 
       PERFORM f_page USING save_ok.
 
     WHEN 'SELECT'.
 
       PERFORM f_select USING 'SELECT'.
 
     WHEN 'BLOCK'.
 
       PERFORM f_select USING 'BLOCK'.
 
     WHEN 'DESELECT'.
 
       PERFORM f_select USING 'DESELECT'.
 
     WHEN 'INSERT'.
 
       PERFORM f_row USING 'INSERT'.
 
     WHEN 'DELETE'.
 
       PERFORM f_row USING 'DELETE'.
 
   ENDCASE.
 
 ENDMODULE.                    "user_command_0100 INPUT
*----------------------------------------------------------------------*
 
 *  MODULE filltab OUTPUT
 
 *----------------------------------------------------------------------*
 
 *
 
 *----------------------------------------------------------------------*
 
 MODULE filltab OUTPUT.
 
   READ TABLE sp2 INTO sp1 INDEX content-current_line.
 
 ENDMODULE.                    "filltab OUTPUT
*----------------------------------------------------------------------*
 
 *  MODULE readtab INPUT
 
 *----------------------------------------------------------------------*
 
 *
 
 *----------------------------------------------------------------------*
 
 MODULE readtab INPUT.
 
   g_lines = sy-loopc.
 
   MODIFY sp2 FROM sp1 INDEX content-current_line.
 
 ENDMODULE.                    "readtab INPUT
*----------------------------------------------------------------------*
 
 *  MODULE chang_val INPUT
 
 *----------------------------------------------------------------------*
 
 *
 
 *----------------------------------------------------------------------*
 
 MODULE chang_val INPUT.
 
   DATA lwa_cols LIKE LINE OF content-cols.
LOOP AT content-cols INTO lwa_cols.
 
     IF lwa_cols-screen-name = 'SP1-COUNTRYFR'
 
       AND sp1-countryfr = 'AA'.
 
       sp1-cityfrom = 'SDSDSD'.
 
       MODIFY sp2 FROM sp1 INDEX content-current_line.
 
     ENDIF.
 
   ENDLOOP.
 
 ENDMODULE.                    "chang_val INPUT
*----------------------------------------------------------------------*
 
 *  MODULE get_cursor INPUT
 
 *----------------------------------------------------------------------*
 
 *
 
 *----------------------------------------------------------------------*
 
 MODULE get_cursor INPUT.
 
   GET CURSOR FIELD l_field LINE l_line.
 
 ENDMODULE.                    "get_cursor INPUT
*----------------------------------------------------------------------*
 
 *  MODULE set_cursor OUTPUT
 
 *----------------------------------------------------------------------*
 
 *
 
 *----------------------------------------------------------------------*
 
 MODULE set_cursor OUTPUT.
 
   SET CURSOR FIELD l_field LINE l_line.
 
 ENDMODULE.                    "set_cursor OUTPUT
*----------------------------------------------------------------------*
 
 *  MODULE SET_EDITABLE
 
 *----------------------------------------------------------------------*
 
 *
 
 *----------------------------------------------------------------------*
 
 MODULE set_editable OUTPUT.
 
   LOOP AT SCREEN.
 
     IF screen-name = 'SP1-CITYFROM'.
 
       IF sp1-cityfrom = 'SDSDSD'.
 
         screen-input = 0.
 
         MODIFY SCREEN.
 
       ENDIF.
 
     ENDIF.
 
   ENDLOOP.
 
 ENDMODULE.                    "SET_EDITABLE
*&---------------------------------------------------------------------*
 
 *&      Form  f_page
 
 *&---------------------------------------------------------------------*
 
 *       text
 
 *----------------------------------------------------------------------*
 
 *      -->CODE       text
 
 *----------------------------------------------------------------------*
 
 FORM f_page USING code TYPE sy-ucomm.
 
   DATA: i TYPE i,
 
         j TYPE i.
 
   CASE code.
 
     WHEN 'P--'.
 
       content-top_line = 1.
 
     WHEN 'P-'.
 
       content-top_line = content-top_line - g_lines.
 
       IF content-top_line <= 0.
 
         content-top_line = 1.
 
       ENDIF.
 
     WHEN 'P+'.
 
       i = content-top_line + g_lines.
 
       j = content-lines - g_lines + 1.
 
       IF j <= 0.
 
         j = 1.
 
       ENDIF.
 
       IF i <= j.
 
         content-top_line = i.
 
       ELSE.
 
         content-top_line = j.
 
       ENDIF.
 
     WHEN 'P++'.
 
       content-top_line = content-lines - g_lines + 1.
 
       IF content-top_line <= 0.
 
         content-top_line = 1.
 
       ENDIF.
 
   ENDCASE.
 
 ENDFORM.                    "f_page
*&---------------------------------------------------------------------*
 
 *&      Form  f_switch
 
 *&---------------------------------------------------------------------*
 
 *       text
 
 *----------------------------------------------------------------------*
 
 FORM f_switch.
 
   DATA lwa_cols LIKE LINE OF content-cols.
LOOP AT content-cols INTO lwa_cols WHERE index > 2.
 
     IF lwa_cols-screen-input = 0.
 
       lwa_cols-screen-input = 1.
 
     ELSE.
 
       lwa_cols-screen-input = 0.
 
     ENDIF.
 
     MODIFY content-cols FROM lwa_cols INDEX sy-tabix.
 
   ENDLOOP.
 
 ENDFORM.                    "f_switch
*&---------------------------------------------------------------------*
 
 *&      Form  F_SORT
 
 *&---------------------------------------------------------------------*
 
 *       text
 
 *----------------------------------------------------------------------*
 
 *      -->CODE       text
 
 *----------------------------------------------------------------------*
 
 FORM f_sort USING code.
 
   DATA: str1 TYPE string,
 
         str2 TYPE string,
 
         lwa_cols LIKE LINE OF content-cols.
READ TABLE content-cols INTO lwa_cols WITH KEY selected = 'X'.
IF sy-subrc = 0.
 
     SPLIT lwa_cols-screen-name AT '-' INTO str1 str2.
 
     IF code = 'UP'.
 
       SORT sp2 STABLE BY (str2) ASCENDING.
 
     ELSEIF code = 'DOWN'.
 
       SORT sp2 STABLE BY (str2) DESCENDING.
 
     ENDIF.
 
     lwa_cols-selected = ''.
 
     MODIFY content-cols FROM lwa_cols TRANSPORTING selected WHERE selected = 'X'.
 
   ENDIF.
 
 ENDFORM.                    "F_SORT
*&---------------------------------------------------------------------*
 
 *&      Form  f_detail
 
 *&---------------------------------------------------------------------*
 
 *       text
 
 *----------------------------------------------------------------------*
 
 FORM f_detail.
 
   READ TABLE sp2 INTO sp1 WITH KEY mask = 'X'.
IF sy-subrc = 0 AND sp1-mask = 'X'.
 
     CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'
 
       EXPORTING
 
         textline1 = sp1-carrid
 
         textline2 = sp1-connid.
 
   ENDIF.
 
 ENDFORM.                    "f_detail
*&---------------------------------------------------------------------*
 
 *&      Form  f_select
 
 *&---------------------------------------------------------------------*
 
 *       text
 
 *----------------------------------------------------------------------*
 
 *      -->CODE       text
 
 *----------------------------------------------------------------------*
 
 FORM f_select USING code.
 
   CASE code.
 
     WHEN 'SELECT'.
 
       sp1-mask = 'X'.
 
       MODIFY sp2 FROM sp1 TRANSPORTING mask WHERE mask IS INITIAL.
 
     WHEN 'BLOCK'.
 
       sp1-mask = 'X'.
 
       MODIFY sp2 FROM sp1 INDEX l_line TRANSPORTING mask.
 
     WHEN 'DESELECT'.
 
       sp1-mask = ''.
 
       MODIFY sp2 FROM sp1 TRANSPORTING mask WHERE mask = 'X'.
 
   ENDCASE.
 
 ENDFORM.                    "f_select
*&---------------------------------------------------------------------*
 
 *&      Form  F_ROW
 
 *&---------------------------------------------------------------------*
 
 *       text
 
 *----------------------------------------------------------------------*
 
 *      -->CODE       text
 
 *----------------------------------------------------------------------*
 
 FORM f_row USING code.
 
   DATA lwa_cols LIKE LINE OF content-cols.
 
   DATA: l_int TYPE i,
 
         lt_cols LIKE TABLE OF l_int.
 
   CASE code.
 
     WHEN 'INSERT'.
 
       INSERT INITIAL LINE INTO sp2 INDEX l_line.
 
     WHEN 'DELETE'.
 
       DELETE sp2 WHERE mask = 'X'.
 
   ENDCASE.
 
 ENDFORM.                    "F_ROW
屏幕100的代码:
 
 PROCESS BEFORE OUTPUT.
 
   MODULE status_0100.
 
   LOOP WITH CONTROL content.
 
     MODULE filltab.
 
     MODULE set_editable.
 
   ENDLOOP.
 
   MODULE set_cursor.
PROCESS AFTER INPUT.
 
   LOOP WITH CONTROL content.
 
     MODULE readtab.
 
     MODULE chang_val.
 
   ENDLOOP.
 
   MODULE get_cursor.
 
   MODULE user_command_0100.
 
 
 
ABAP 中 Table Control例子的更多相关文章
- ABAP table control例子
		[转自]http://blog.csdn.net/lhx20/article/details/3039909Table control用于在screen上以表格的形式显示数据,在table contr ... 
- ABAP 表格控制(Table Control)和步循环
		表格控制(Table Control)和步循环 1.两个标准Demo: SAPMTZ60,SAPMTZ61 2.简介 3.建立Table Control程序的基本流程 4.使用步循环 5.表格 ... 
- SAP ABAP编程 Table Control动态隐藏列
		在SAP DIALOG设计中,有时候须要动态的隐藏某些列,以下是方法. ***数据定义 CONTROLS: table_control TYPE TABLEVIEW USING SCREEN 0100 ... 
- ABAP中的Table Control编程
		SAP中,Table Control是在Screen中用的最广泛的控件之一了,可以实现对多行数据的编辑. 简单来说,Table Control是一组屏幕元素在Screen上的重 ... 
- ABAP Table Control
		SAP中,Table Control是在Screen中用的最广泛的控件之一了,可以实现对多行数据的编辑. 简单来说,Table Control是一组屏幕元素在Screen上的重复出现,这就是它与普通 ... 
- 我教女朋友学编程html系列(5) html中table的用法和例子
		女朋友不是学计算机的,但是现在从事计算机行业,做技术支持,她想学习编程,因此我打算每天教她一点点,日积月累,带她学习编程,如果其他初学者感兴趣,可以跟着学. 为了将table介绍的简单.生动,具有实战 ... 
- abap table control里面各种属性和事件的写法
		SAP中,Table Control是在Screen中用的最广泛的控件之一了,可以实现对多行数据的编辑. 简单来说,Table Control是一组屏幕元素在Screen上的重复出现,这就是它与普通屏 ... 
- 【ABAP系列】SAP ABAP中ALV使用HTML的例子
		公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP中ALV使用HT ... 
- ABAP中使用浏览器打开网页
		在SAP ABAP中可以在Screen中嵌入Html control打开网页,也可以通过调用本地的IE浏览器打开. 1.在Screen中嵌入Html control的例子,在系统中有,se38:SAP ... 
随机推荐
- C语言中给数组赋随机值
			srand和rand两个函数配合可以产生伪随机数序列.rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,rand根据这个种子的值产生一系列随机数.如果系统提供的种子没有变化,每次调用r ... 
- 转:携程App的网络性能优化实践
			http://kb.cnblogs.com/page/519824/ 携程App的网络性能优化实践 受益匪浅的一篇文章,让我知道网络交互并不是简单的传输和接受数据.真正的难点在于后面的性能优化 下面对 ... 
- ARM相关知识
			ARM7采用冯·诺依曼(Von-Neumann)结构,数据存储器和程序存储器重合在一起. 同时,此结构也被大多数计算机所采用. ARM7为三级流水线结构(取指,译码,执行),平均功耗为0.6mW ... 
- 深入理解mysql之BDB系列(1)---BDB相关基础知识
			深入理解mysql之BDB系列(1) ---BDB相关基础知识 作者:杨万富 一:BDB体系结构 1.1.BDB体系结构 BDB总体的体系结构如图1.1所看到的,包括五个子系统(见图1.1 ... 
- C#的事件处理机制
			链接地址:http://blog.csdn.net/niuox/article/details/7527876 在以往的关于事件处理的程序中,我们更多的是采用一种循环等待的方式,即为了检测某个事件是否 ... 
- 谷歌浏览器訪问不了啦,oh shit!
			从这个礼拜開始,一直訪问不了谷歌.该死的,百度找的资料全然是牛头不正确马嘴 我也问了其它人.有的人也是打不开,蛋疼的 可是如今找到几种方法了,还真管用 第一种方法:加上ncr http://www.g ... 
- Oracle误删除表数据后的恢复具体解释
			Oracle误删除表数据后的恢复具体解释 測试环境: SYSTEM:IBM AIX 5L Oracle Version:10gR2 1. undo_re ... 
- Appium TestNg  Maven Android  Eclipse java简单启动实例
			环境准备 Eclipse + maven + appium + TestNg 确保已经在Eclipse 上面安装maven TestNg的插件 打开Eclipse,新建一个java项目,把项目转换成m ... 
- HTTP实现长连接(TTP1.1和HTTP1.0相比较而言,最大的区别就是增加了持久连接支持Connection: keep-alive)
			HTTP实现长连接 HTTP是无状态的 也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接.如果客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web ... 
- SetWindowLong
			SetWindowLong函数介绍 收藏 SetWindowLong函数介绍 SetWindowLong Unicode 函数原型 LONG SetWindowLong(hwnd,nIndex,lNe ... 
