你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Web开发
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.
  推荐精品文章

·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 
·2023年7月目录
·2023年6月目录 
·2023年5月目录
·2023年4月目录 
·2023年3月目录 
·2023年2月目录 
·2023年1月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089