//--线条 //3-----点击文字特效---

转载https://blog.csdn.net/f346348157/category_11410181.html

随意查询一个表的内容,此处用的表是:ZLION_TEST(已建27条数据)

在这里插入图片描述

1、手工创建-不推荐

1.1 初始屏幕

REPORT  zcsdn_lion_custom09.

DATA: ok_code LIKE sy-ucomm,
             my_code LIKE sy-ucomm.


START-OF-SELECTION.

END-OF-SELECTION.
  CALL SCREEN '2000'.

*-------  工具栏、标题加载到屏幕中 --------*
MODULE status_2000 OUTPUT.
  SET PF-STATUS 'TOOLS'.
  SET TITLEBAR 'TITLE'.

ENDMODULE.                 " STATUS_2000  OUTPUT

*------ 捕获功能码   ----*
MODULE user_command_2000 INPUT.
  my_code = ok_code.
  CLEAR ok_code.

  CASE my_code.
    WHEN '&EXIT' OR '&BACK'.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE. 

1.2 声明变量

变量是查询对象,单表参照表,多表抽取每个表字段组合为结构

 1 DATA g_it_tab LIKE STANDARD TABLE OF zlion_test.
 2 DATA g_wa LIKE zlion_test.
 3 
 4 START-OF-SELECTION.
 5   PERFORM sub_getdata."查询语句
 6   
 7 *------ 查询语句----------*
 8 FORM sub_getdata .
 9   SELECT * INTO CORRESPONDING FIELDS OF TABLE g_it_tab FROM zlion_test.
10 ENDFORM.     

1.3 屏幕中绘制表格控件

 

 

 


主程序需要定义table控件相同的变量,并指定table控件在哪个屏幕展示

CONTROLS: tab_main TYPE TABLEVIEW USING SCREEN '2000'.

 

 

 

 

 

 

栏位前后顺序有误的,选中不放拖到对应的位置即可

 

 

 

 

 

 

添加首列标题栏,标题栏id可跟上面的文本栏id一样

 

 

 

 

标题栏不够宽度的,调整文本栏“可视距离”,是文本框的可视距离,不是标题栏的

 

 

 

 

 

 

 


如上面保存,会报如下错误

 

 

 

 

1.4 在PBO、PAI配置代码

*1.4 在PBO添加如下代码:把读取的数据放到工作区g_wa中在页面展示
  LOOP AT g_it_tab INTO g_wa WITH CONTROL tab_main
    CURSOR tab_main-current_line.

  ENDLOOP.
 1 *1.4 在PAI添加如下代码:循环内表,哪行数据有变化的就更新对应的那行.
 2   LOOP AT g_it_tab.
 3     "检查字段是否有变更.
 4     CHAIN.
 5       FIELD g_wa-name."当g_wa中的字段有改变的调用下面的module.
 6       FIELD g_wa-sex."监控多个字段是否变更的,继续field 字段名 即可
 7       
 8       "以上字段有变化时,执行此更新module
 9       MODULE table_modify ON CHAIN-REQUEST."
10     ENDCHAIN.
11   ENDLOOP.

在主程序中,实现module:table_modify

*------ 工作区中,有数据变更的都更新到内表中-------------*
MODULE table_modify INPUT.
  MODIFY g_it_tab FROM g_wa INDEX tab_main-current_line.
ENDMODULE.     

1.5 测试table_modify更新功能

1.51 此时代码如下

主程序代码

 1 REPORT  zcsdn_lion_custom09.
 2 
 3 DATA: ok_code LIKE sy-ucomm,
 4              my_code LIKE sy-ucomm.
 5 DATA g_it_tab LIKE STANDARD TABLE OF zlion_test.
 6 DATA g_wa LIKE zlion_test.
 7 CONTROLS: tab_main TYPE TABLEVIEW USING SCREEN '2000'.      "控件在屏幕2000上
 8 
 9 START-OF-SELECTION.
10   PERFORM sub_getdata."查询语句
11 
12 END-OF-SELECTION.
13   CALL SCREEN '2000'.
14 
15 *-------  工具栏、标题加载到屏幕中 --------*
16 MODULE status_2000 OUTPUT.
17   SET PF-STATUS 'TOOLS'.
18   SET TITLEBAR 'TITLE'.
19 
20 ENDMODULE.                 " STATUS_2000  OUTPUT
21 
22 *------ 捕获功能码   ----*
23 MODULE user_command_2000 INPUT.
24   my_code = ok_code.
25   CLEAR ok_code.
26 
27   CASE my_code.
28     WHEN '&EXIT' OR '&BACK'.
29       LEAVE TO SCREEN 0.
30   ENDCASE.
31 ENDMODULE.                 " USER_COMMAND_2000  INPUT
32 
33 *------ 查询语句----------*
34 FORM sub_getdata .
35   SELECT * INTO CORRESPONDING FIELDS OF TABLE g_it_tab FROM zlion_test.
36 ENDFORM.                    " SUB_GETDATA
37 
38 
39 *------ 工作区中,有数据变更的都更新到内表中-------------*
40 MODULE table_modify INPUT.
41   MODIFY g_it_tab FROM g_wa INDEX tab_main-current_line.
42 ENDMODULE.  

屏幕2000代码

 1 PROCESS BEFORE OUTPUT.
 2 *在PBO添加如下代码:把读取的数据放到工作区g_wa中在页面展示
 3   LOOP AT g_it_tab INTO g_wa WITH CONTROL tab_main
 4     CURSOR tab_main-current_line.
 5 
 6   ENDLOOP.
 7 
 8   MODULE status_2000.
 9 
10 PROCESS AFTER INPUT.
11 *在PAI添加如下代码:循环内表,哪行数据有变化的就更新对应的那行.
12   LOOP AT g_it_tab.
13     "检查字段是否有变更.
14     CHAIN.
15       FIELD g_wa-name."当g_wa中的字段有改变的调用下面的module.
16       FIELD g_wa-sex."监控多个字段是否变更的,继续field 字段名 即可
17 
18       "以上字段有变化时,执行此更新module
19       MODULE table_modify ON CHAIN-REQUEST."
20     ENDCHAIN.
21   ENDLOOP.
22 
23   MODULE user_command_2000.

1.52 设置断点

 

 

 

 

 

 


1.53 运行

 

 

 

 

 

 

 

 

按F8继续执行,此时g_it_tab第一行name改变为=003

 

 

 

 

 

 

 

 

 

 

 

此时内表第一行name=003,数据已改

1.6 针对1.5说明

 

 

 

1.7 翻页


1.71 翻页前要知道总行数

在PBO添加代码

PROCESS BEFORE OUTPUT.
*1.71 添加代码:在屏幕输出前获取总行数
MODULE tab_main_arr.

*1.4 在PBO添加如下代码:把读取的数据放到工作区g_wa中在页面展示
  LOOP AT g_it_tab INTO g_wa WITH CONTROL tab_main
    CURSOR tab_main-current_line.

  ENDLOOP.

*加载工具栏、标题
  MODULE status_2000.

1.72 自定义按钮:下一页

 

 


1.73 下一页按钮代码
在屏幕PBO添加代码

*1.4 在PBO添加如下代码:把读取的数据放到工作区g_wa中在页面展示
  LOOP AT g_it_tab INTO g_wa WITH CONTROL tab_main
    CURSOR tab_main-current_line.

*1.73 设置每页显示多少行
    MODULE set_pagelines.
      
  ENDLOOP.

在主程序添加代码

 1 DATA page_lines LIKE sy-loopc."每页显示的行数,1.73添加
 2 
 3 *------ 1.73添加:设置一页能显示多少行 -----*
 4 *------ 并非是那种翻页,应该理解为:滚动一次会跳几行数据 -----*
 5 MODULE set_pagelines OUTPUT.
 6   page_lines = sy-loopc."sy-loopc=自动获取每页最大能显示几行
 7 *  page_lines = 5."如需指定翻页是几行,直接指定
 8 ENDMODULE.      
 9 
10 
11 *------ 捕获功能码   ----*
12 MODULE user_command_2000 INPUT.
13   my_code = ok_code.
14   CLEAR ok_code.
15 
16   CASE my_code.
17     WHEN '&EXIT' OR '&BACK'.
18       LEAVE TO SCREEN 0.
19 
20     "1.73添加:需要判断到了最后一页,不能继续执行下一页的,此处省略判断
21     WHEN 'P++'.
22       tab_main-top_line = tab_main-top_line + page_lines.
23 
24   ENDCASE.
25 ENDMODULE.    

运行效果

 

 

1.8 总结

1.81 表格控件实现

 

 

1.9 完整代码

1.91 主程序全部代码

 1 REPORT  zcsdn_lion_custom09.
 2 
 3 DATA: ok_code LIKE sy-ucomm,
 4              my_code LIKE sy-ucomm.
 5 DATA g_it_tab LIKE STANDARD TABLE OF zlion_test.
 6 DATA g_wa LIKE zlion_test.
 7 DATA page_lines LIKE sy-loopc."每页显示的行数,1.73添加
 8 CONTROLS: tab_main TYPE TABLEVIEW USING SCREEN '2000'.      "控件在屏幕2000上
 9 
10 START-OF-SELECTION.
11   PERFORM sub_getdata."查询语句
12 
13 END-OF-SELECTION.
14   CALL SCREEN '2000'.
15 
16 
17 
18 
19 
20 
21 *-------  工具栏、标题加载到屏幕中 --------*
22 MODULE status_2000 OUTPUT.
23   SET PF-STATUS 'TOOLS'.
24   SET TITLEBAR 'TITLE'.
25 
26 ENDMODULE.                 " STATUS_2000  OUTPUT
27 
28 *------ 捕获功能码   ----*
29 MODULE user_command_2000 INPUT.
30   my_code = ok_code.
31   CLEAR ok_code.
32 
33   CASE my_code.
34     WHEN '&EXIT' OR '&BACK'.
35       LEAVE TO SCREEN 0.
36 
37     "1.73添加:需要判断到了最后一页,不能继续执行下一页的,此处省略判断
38     WHEN 'P++'.
39       tab_main-top_line = tab_main-top_line + page_lines.
40 
41   ENDCASE.
42 ENDMODULE.                 " USER_COMMAND_2000  INPUT
43 
44 *------ 查询语句----------*
45 FORM sub_getdata .
46   SELECT * INTO CORRESPONDING FIELDS OF TABLE g_it_tab FROM zlion_test ORDER BY xh.
47 ENDFORM.                    " SUB_GETDATA
48 
49 
50 *------ 1.4 工作区中,有数据变更的都更新到内表中-------------*
51 MODULE table_modify INPUT.
52   MODIFY g_it_tab FROM g_wa INDEX tab_main-current_line.
53 ENDMODULE.                 " TABLE_MODIFY  INPUT
54 
55 
56 *-- 1.71 添加代码:在屏幕输出前获取总行数  --*
57 MODULE tab_main_arr OUTPUT.
58 *  获取数据总行数,有以下两种方式
59 *  第一种,比较简洁,新语法
60   tab_main-lines = LINES( g_it_tab ).
61 
62 *  第二种,比较古老,向导方式创建表格控件也是用此方法
63 *  DESCRIBE TABLE g_it_tab LINES tab_main-lines.
64 ENDMODULE.                 " TAB_MAIN_ARR  OUTPUT
65 
66 *------ 1.73添加:设置一页能显示多少行 -----*
67 *------ 并非是那种翻页,应该理解为:滚动一次会跳几行数据 -----*
68 MODULE set_pagelines OUTPUT.
69   page_lines = 20."sy-loopc=自动获取每页最大能显示几行
70 *  page_lines = 5."如需指定翻页是几行,直接指定
71 ENDMODULE.  

1.92 2000屏幕全部代码

 1 PROCESS BEFORE OUTPUT.
 2 *1.71 添加代码:在屏幕输出前获取总行数
 3   MODULE tab_main_arr.
 4 
 5 *1.4 在PBO添加如下代码:把读取的数据放到工作区g_wa中在页面展示
 6   LOOP AT g_it_tab INTO g_wa WITH CONTROL tab_main
 7     CURSOR tab_main-current_line.
 8 
 9 *1.73 设置每页显示多少行
10     MODULE set_pagelines.
11 
12   ENDLOOP.
13 
14 *加载工具栏、标题
15   MODULE status_2000.
16 
17 
18 
19 
20 PROCESS AFTER INPUT.
21 *1.4 在PAI添加如下代码:循环内表,哪行数据有变化的就更新对应的那行.
22   LOOP AT g_it_tab.
23     "检查字段是否有变更.
24     CHAIN.
25       FIELD g_wa-name."当g_wa中的字段有改变的调用下面的module.
26       FIELD g_wa-sex."监控多个字段是否变更的,继续field 字段名 即可
27 
28       "以上字段有变化时,执行此更新module
29       MODULE table_modify ON CHAIN-REQUEST."
30     ENDCHAIN.
31   ENDLOOP.
32 
33   MODULE user_command_2000.

 

posted on 2022-07-28 16:48  雨水果冻  阅读(261)  评论(0编辑  收藏  举报