【TABLE CONTROL】
- 格式:docx
- 大小:1.76 MB
- 文档页数:27
TableControl使用方法TalbeControl使用方法总结一.自己手动制作TableControl(我最喜欢用的方法)1) 定义内表DATA wa type mseg.DATA itab like table of wa.2) 定义表控制对象CONTROL: TC1 type TABLEVIEW USING SCREEN 0100.3) PBO*将内表中的值传至TableControl中显示出来.*内表=>屏幕LOOP AT itab into waWITH CONTROL TC1CURSOR TC1-current_line.…*将内表或变量中的值传给TableControl中相应的字段.MODULE TC1_change_field_attr.ENDLOOP.4) PAI*将TableControl中的值传至内表*屏幕=>内表LOOP AT itabCHAIN.FIELD itab-co1.FIELD itab-co2.…*将TableControl中相应字段的值传给内表或变量MODULE TC1_modify ON CHAIN-REQUEST.…ENDCHAIN.ENDLOOP.5) Modulemodule TC1_modify input.modify itab from wa index TC1-current_line.endmodule.二、通过向导建立TableControl1)进入Screen Painter;2)将Table Control拖入屏幕,进入向导界面;3)输入Table Control名称,继续;4)输入内表名称( 注意,应该先在程序中建立好内表);5)选择表字段,继续;6)设置Input/output attributes、Columns、Line selectability属性;7)设置是否有Scroll;8)输入生成程序的名称,可以用默认;9)单击“完成”;10)观察程序,TableContrl和相应代码都已自动生成,建立成功。
TABLE CONTROL操作要点小结1.屏幕号:1002.在屏幕100中应用table control*声明control T1应用于屏幕100CONTROLS T1 TYPE TABLEVIEW USING SCREEN 100.“T1代表自定义的table control的名字3.要想给table control中自动赋值,则需把table control 中的字段名定义为:WA_SPFLI-CARRID格式。
主程序代码:*&---------------------------------------------------------------------**& Report ZTABLECONTROL02_*&---------------------------------------------------------------------**&CREATOR:*&---------------------------------------------------------------------*REPORT ZTABLECONTROL02_LIUMING.*引入表spfliTABLES:SPFLI.*定义结构体TYPES:BEGIN OF TY_DATA,CARRID LIKE SPFLI-CARRID,CONNID LIKE SPFLI-CONNID,COUNTRYFR LIKE SPFLI-COUNTRYFR,CITYFROM LIKE SPFLI-CITYFROM,AIRPFROM LIKE SPFLI-AIRPFROM,FLAG TYPE C,END OF TY_DATA.*定义内表和工作区DATA:IT_SPFLI TYPE TABLE OF TY_DATA,WA_SPFLI LIKE LINE OF IT_SPFLI.*获取数据SELECT * FROM SPFLI INTO CORRESPONDING FIELDS OF TABL E IT_SPFLI.*定义分页所需参数DATA: PAGESIZE TYPE I VALUE23, "每页条数NUM TYPE I, "判断是否刚好是整页COUNT TYPE I, "总条数AFTER TYPE I, "下一页的第一条PAGECOUNT TYPE I, "总共有几页PAGENUM TYPE I VALUE1. "第几页DESCRIBE TABLE IT_SPFLI LINES COUNT.NUM = COUNT MOD PAGESIZE.IF NUM <> 0 .PAGECOUNT = COUNT DIV PAGESIZE + 1.ELSE.PAGECOUNT = COUNT DIV PAGESIZE.ENDIF.*声明变量DATA:OK_CODE TYPE SY-UCOMM,SAVE_OK TYPE SY-UCOMM.*声明control T1应用于屏幕100CONTROLS T1 TYPE TABLEVIEW USING SCREEN100.*调用屏幕100CALL SCREEN100.*打印数据IF NOT IT_SPFLI IS INITIAL.LOOP AT IT_SPFLI INTO WA_SPFLI .WRITE:/2 WA_SPFLI-CARRID,10 WA_SPFLI-CONNID,18 WA_SPFLI-COUNTRYFR,26 WA_SPFLI-CITYFROM,34 WA_SPFLI-AIRPFROM .ENDLOOP.ENDIF.*&---------------------------------------------------------------------**& Module STATUS_0100 OUTPUT*&---------------------------------------------------* 退出图标*----------------------------------------------------------------------*MODULE STATUS_0100 OUTPUT.SET PF-STATUS 'STATUS01'.* SET TITLEBAR 'xxx'.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'ISWRITE'. "读写转换PERFORM ISWRITE.WHEN'ASC'. "升序处理SORT IT_SPFLI BY CARRID CONNID ASCENDING.WHEN'DES'. "降序处理SORT IT_SPFLI BY CARRID DESCENDING CONNID DESCENDING.WHEN'SHOW'. "用弹出框显示选中行信息PERFORM SHOW.WHEN'FIRSTPAGE'. "显示首页PERFORM FIRSTPAGE.WHEN'PREVIOUS'. "上一页PERFORM PREVIOUS.WHEN'NEXT'. "下一页PERFORM NEXT.WHEN'LAST'. "最后一页PERFORM LAST.WHEN'SELECTALL'. "选中全部PERFORM SELECTALL.WHEN'SELBLOCK'. "选中光标所在行PERFORM SELBLOCK.WHEN'DESELALL'. " 取消全选PERFORM DESELALL.WHEN'INSERTROW'. "插入一行(内表)PERFORM INSERTROW.WHEN'DELETEROW'. "删除选中行(未成功)PERFORM DELETEROW.WHEN'LEAVE'. "回到初始屏幕SELECT * FROM SPFLI INTO CORRESPONDING FIELDS OF TABL E IT_SPFLI.LEAVE TO SCREEN0.ENDCASE.ENDMODULE. " USER_COMMAND_0100 INPUT *&---------------------------------------------------------------------**& Form ISWRITE*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> "读写转换*----------------------------------------------------------------------*FORM ISWRITE .DATA COL LIKE LINE OF T1-COLS.LOOP AT T1-COLS INTO COL.IF SY-TABIX = 1OR SY-TABIX = 2.COL-SCREEN-INPUT = 1.ELSE.IF COL-SCREEN-INPUT = 0.COL-SCREEN-INPUT = 1.ELSE.COL-SCREEN-INPUT = 0.ENDIF.ENDIF.MODIFY T1-COLS FROM COL.ENDLOOP.ENDFORM. " ISWRITE*&---------------------------------------------------------------------**& Form SHOW*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> "用弹出框显示选中行信息*----------------------------------------------------------------------*FORM SHOW .DATA:C_LINE TYPE I, "定义点击的行idC_INDEX TYPE I. "定义对应的内表中的idGET CURSOR LINE C_LINE. "鼠标所在的行C_INDEX = T1-TOP_LINE + C_LINE - 1."TOP_LINE对应第一条数据READ TABLE IT_SPFLI INTO WA_SPFLI INDEX C_INDEX.CALL FUNCTION'POPUP_TO_DISPLAY_TEXT'EXPORTINGTITEL = 'HAHA 'TEXTLINE1 = WA_SPFLI-CARRIDTEXTLINE2 = WA_SPFLI-CONNIDSTART_COLUMN = 25START_ROW = 6.ENDFORM. " SHOW*&---------------------------------------------------------------------**& Form FIRSTPAGE*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> "显示首页*----------------------------------------------------------------------*FORM FIRSTPAGE .SELECT * FROM SPFLI INTO CORRESPONDING FIELDS OF TABLE IT_SPFLI.IF PAGENUM <> 1.PAGENUM = 1.ELSE.PAGENUM = 1.MESSAGE S000(Z001) WITH'该页为首页'.ENDIF.ENDFORM. " FIRSTPAGE*&---------------------------------------------------------------------**& Form PREVIOUS*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> "上一页*----------------------------------------------------------------------*FORM PREVIOUS .SELECT * FROM SPFLI INTO CORRESPONDING FIELDS OF TAB LE IT_SPFLI.IF PAGENUM > 2.AFTER = ( PAGENUM - 2 ) * PAGESIZE. "上两页的最后一条DELETE IT_SPFLI FROM1TO AFTER.PAGENUM = PAGENUM - 1.ELSEIF PAGENUM = 2.PAGENUM = PAGENUM - 1.ELSEIF PAGENUM = 1.PAGENUM = 1.MESSAGE S000(Z001) WITH'该页是第一页'.ENDIF.ENDFORM. " PREVIOUS*&---------------------------------------------------------------------**& Form NEXT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> "下一页*----------------------------------------------------------------------*FORM NEXT .SELECT * FROM SPFLI INTO CORRESPONDING FIELDS OF TABL E IT_SPFLI.AFTER = PAGENUM * PAGESIZE. "该页的最后一条DATA AFTER1 TYPE I.AFTER1 = ( PAGENUM - 1 ) * PAGESIZE.IF PAGENUM = 1.DELETE IT_SPFLI FROM1TO PAGESIZE.ELSEIF PAGENUM = PAGECOUNT.PAGENUM = PAGENUM.DELETE IT_SPFLI FROM1TO AFTER1.MESSAGE S000(Z001) WITH'该页为最后一页'.ELSE.PAGENUM = PAGENUM + 1.DELETE IT_SPFLI FROM1TO AFTER.IF PAGENUM = PAGECOUNT.PAGENUM = PAGENUM.ELSE.PAGENUM = PAGENUM + 1.ENDIF.ENDIF.ENDFORM. " NEXT*&---------------------------------------------------------------------**& Form LAST*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> "最后一页*----------------------------------------------------------------------*FORM LAST .SELECT * FROM SPFLI INTO CORRESPONDING FIE LDS OF TABLE IT_SPFLI.DATA P TYPE I.P = PAGECOUNT - 1.AFTER = P * PAGESIZE.IF PAGENUM = PAGECOUNT.DATA AFTER1 TYPE I.AFTER1 = ( PAGENUM - 1 ) * PAGESIZE.DELETE IT_SPFLI FROM1TO AFTER1.PAGENUM = PAGENUM.MESSAGE S000(Z001) WITH'该页为最后一页'.ELSE.DELETE IT_SPFLI FROM1TO AFTER.PAGENUM = PAGECOUNT.ENDIF.ENDFORM. " LAST*&---------------------------------------------------------------------**& Form SELECTALL*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> "选中全部*----------------------------------------------------------------------*FORM SELECTALL .LOOP AT IT_SPFLI INTO WA_SPFLI.IF WA_SPFLI-FLAG = ''.WA_SPFLI-FLAG = 'X'.MODIFY IT_SPFLI FROM WA_SPFLI.ENDIF.ENDLOOP.ENDFORM. " SELECTALL*&---------------------------------------------------------------------**& Form SELBLOCK*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> "选中光标所在行*----------------------------------------------------------------------*FORM SELBLOCK .DATA:S_LINE TYPE I, "定义点击的行idS_INDEX TYPE I. "定义对应的内表中的idGET CURSOR LINE S_LINE. "鼠标所在的行S_INDEX = T1-TOP_LINE + S_LINE - 1."TOP_LINE对应第一条数据READ TABLE IT_SPFLI INTO WA_SPFLI INDEX S_INDEX. WA_SPFLI-FLAG = 'X'.MODIFY IT_SPFLI FROM WA_SPFLI INDEX S_INDEX. ENDFORM. " SELBLOCK*&---------------------------------------------------------------------**& Form DESELALL*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> " 取消全选*----------------------------------------------------------------------*FORM DESELALL .LOOP AT IT_SPFLI INTO WA_SPFLI.IF WA_SPFLI-FLAG = 'X'.WA_SPFLI-FLAG = ''.MODIFY IT_SPFLI FROM WA_SPFLI.ENDIF.ENDLOOP.ENDFORM. " DESELALL*&---------------------------------------------------------------------**& Form INSERTROW*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> "插入一行(内表)*----------------------------------------------------------------------*FORM INSERTROW .CLEAR WA_SPFLI.DATA: I_LINE TYPE I,I_INDEX TYPE I.GET CURSOR LINE I_LINE.INSERT WA_SPFLI INTO IT_SPFLI INDEX I_LINE. ENDFORM. " INSERTROW*&---------------------------------------------------------------------**& Form DELETEROW*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> "删除选中行*----------------------------------------------------------------------*FORM DELETEROW .LOOP AT IT_SPFLI INTO WA_SPFLI.IF WA_SPFLI-FLAG = 'X'.DELETE IT_SPFLI INDEX SY-TABIX.ENDIF.ENDLOOP.ENDFORM. " DELETEROW*&---------------------------------------------------------------------**& Module MODI INPUT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*MODULE MODI INPUT.MODIFY IT_SPFLI FROM WA_SPFLI INDEX T1-CURRENT_LINE. ENDMODULE. " MODI INPUT屏幕100中的代码:PROCESS BEFORE OUTPUT.MODULE STATUS_0100.LOOP AT IT_SPFLI INTO WA_SPFLI WITH CONTROL T1.ENDLOOP.PROCESS AFTER INPUT.*MODULE CANCEL AT EXIT-COMMAND. LOOP AT IT_SPFLI.MODULE MODI.ENDLOOP.MODULE USER_COMMAND_0100.。
Table Control中我们可以根据每行记录的字段条件限制相关的单元格的编辑状态,如本例中根据'性别'来判断单元格编辑状态。
1、se38新建程序1.TYPES : BEGIN OF ty_emp_details,2. pernr TYPE pa0001-pernr ,3. gender TYPE gesch,4. input TYPE char10,5. sel TYPE char1,"table control左侧多选按钮6. END OF ty_emp_details.7.DATA : it_emp_details TYPE TABLE OF ty_emp_details,8. wa_emp_details TYPE ty_emp_details.9.START-OF-SELECTION.10. CALL SCREEN 2000.复制代码2、创建2000标准屏幕,定义ok_code3、绘制table control,点击“格式”用向导创建table control输入table control名称因为是自定义结构,不是直接参考数据字段,所以选择下面那种情况选择需要显示的字段,sel是table control左侧选择按钮对应的字段输入结构中,用于在table control左侧选择按钮对应的字段翻页、插入/删除行、全选/全不选用向导生成的代码放置在哪个include下,我们这里就都放在主程序下,实战中一个程序都包含多个include,用来分类不同类型的代码,便于阅读维护'性别'字段的属性4、逻辑流用向导生成代码,这里会自动生成相应的代码,我们需要PBO事件下,修改相应的module1.MODULE tc_2000_change_tc_attr OUTPUT.2. IF it_emp_details IS INITIAL.3. APPEND wa_emp_details TO it_emp_details.4. ENDIF.5. DESCRIBE TABLE it_emp_details LINES tc_2000-lines.6.ENDMODULE. "TC_2000_CHANGE_TC_ATTR OUTPUT复制代码1.MODULE tc_2000_get_lines OUTPUT.2. g_tc_2000_lines = sy-loopc.3.4. LOOP AT SCREEN.5. IF screen-name = 'WA_EMP_DETAILS-INPUT'.6. IF wa_emp_details-gender NE '1'.7. screen-input = '1'.8. ELSE.9. screen-input = '0'.10. ENDIF.11. MODIFY SCREEN.12. ENDIF.13. ENDLOOP.14.ENDMODULE. "TC_2000_GET_LINES OUTPUT 复制代码5、程序执行效果:6、程序完整代码:1.TYPES : BEGIN OF ty_emp_details,2. pernr TYPE pa0001-pernr ,3. gender TYPE gesch,4. input TYPE char10,5. sel TYPE char1,"table control左侧多选按钮6. END OF ty_emp_details.7.DATA : it_emp_details TYPE TABLE OF ty_emp_details,8. wa_emp_details TYPE ty_emp_details.9.10.*&SPWIZARD: DECLARATION OF TABLECONTROL 'TC_2000' ITSELF11.CONTROLS: tc_2000 TYPE TABLEVIEW USING SCREEN 2000.12.13.*&SPWIZARD: LINES OF TABLECONTROL 'TC_2000'14.DATA: g_tc_2000_lines LIKE sy-loopc.15.16.DATA: ok_code LIKE sy-ucomm.17.18.START-OF-SELECTION.19. CALL SCREEN 2000.20.21.*&SPWIZARD: OUTPUT MODULE FOR TC 'TC_2000'. DO NOT CHANGE THIS LINE!22.*&SPWIZARD: UPDATE LINES FOR EQUIV ALE NT SCROLLBAR23.MODULE tc_2000_change_tc_attr OUTPUT.24. IF it_emp_details IS INITIAL.25. APPEND wa_emp_details TO it_emp_details.26. ENDIF.27. DESCRIBE TABLE it_emp_details LINES tc_2000-lines.28.ENDMODULE. "TC_2000_CHANGE_TC_ATTR OUTPUT29.30.*&SPWIZARD: OUTPUT MODULE FOR TC 'TC_2000'. DO NOT CHANGE THIS LINE!31.*&SPWIZARD: GET LINES OF TABLECONTROL32.MODULE tc_2000_get_lines OUTPUT.33. g_tc_2000_lines = sy-loopc.34.35. LOOP AT SCREEN.36. IF screen-name = 'WA_EMP_DETAILS-INPUT'.37. IF wa_emp_details-gender NE '1'.38. screen-input = '1'.39. ELSE.40. screen-input = '0'.41. ENDIF.42. MODIFY SCREEN.43. ENDIF.44. ENDLOOP.45.ENDMODULE. "TC_2000_GET_LINES OUTPUT46.47.*&SPWIZARD: INPUT MODULE FOR TC 'TC_2000'. DO NOT CHANGE THIS LINE!48.*&SPWIZARD: MODIFY TABLE49.MODULE tc_2000_modify INPUT.50. MODIFY it_emp_details51. FROM wa_emp_details52. INDEX tc_2000-current_line.53.ENDMODULE. "TC_2000_MODIFY INPUT54.55.*&SPWIZARD: INPUT MODUL FOR TC 'TC_2000'. DO NOT CHANGE THIS LINE!56.*&SPWIZARD: MARK TABLE57.MODULE tc_2000_mark INPUT.58. DATA: g_tc_2000_wa2 LIKE LINE OF it_emp_details.59. IF tc_2000-line_sel_mode = 160. AND wa_emp_details-sel = 'X'.61. LOOP AT it_emp_details INTO g_tc_2000_wa262. WHERE sel = 'X'.63. g_tc_2000_wa2-sel = ''.64. MODIFY it_emp_details65. FROM g_tc_2000_wa266. TRANSPORTING sel.67. ENDLOOP.68. ENDIF.69. MODIFY it_emp_details70. FROM wa_emp_details71. INDEX tc_2000-current_line72. TRANSPORTING sel.73.ENDMODULE. "TC_2000_MARK INPUT74.75.*&SPWIZARD: INPUT MODULE FOR TC 'TC_2000'. DO NOT CHANGE THIS LINE!76.*&SPWIZARD: PROCESS USER COMMAND77.MODULE tc_2000_user_command INPUT.78. ok_code = sy-ucomm.79. PERFORM user_ok_tc USING 'TC_2000'80. 'IT_EMP_DETAILS'81. 'SEL'82. CHANGING ok_code.83. sy-ucomm = ok_code.84.ENDMODULE. "TC_2000_USER_COMMAND INPUT85.86.*----------------------------------------------------------------------*87.* INCLUDE TABLECONTROL_Forms *88.*----------------------------------------------------------------------*89.90.*&---------------------------------------------------------------------*91.*& Form USER_OK_TC *92.*&---------------------------------------------------------------------*93.FORM user_ok_tc USING p_tc_name TYPE dynfnam94. p_table_name95. p_mark_name96. CHANGING p_ok LIKE sy-ucomm.97.98.*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*99. DATA: l_ok TYPE sy-ucomm,100. l_offset TYPE i.101.*&SPWIZARD: END OF LOCAL DATA------------------------------------------* 102.103.*&SPWIZARD: Table control specific operations * 104.*&SPWIZARD: evaluate TC name and operations * 105. SEARCH p_ok FOR p_tc_name.106. IF sy-subrc <> 0.107. EXIT.108. ENDIF.109. l_offset = STRLEN( p_tc_name ) + 1.110. l_ok = p_ok+l_offset.111.*&SPWIZARD: execute general and TC specific operations * 112. CASE l_ok.113. WHEN 'INSR'. "insert row114. PERFORM fcode_insert_row USING p_tc_name115. p_table_name.116. CLEAR p_ok.117.118. WHEN 'DELE'. "delete row119. PERFORM fcode_delete_row USING p_tc_name120. p_table_name121. p_mark_name.122. CLEAR p_ok.123.124. WHEN 'P--' OR "top of list125. 'P-' OR "previous page126. 'P+' OR "next page127. 'P++'. "bottom of list128. PERFORM compute_scrolling_in_tc USING p_tc_name129. l_ok.130. CLEAR p_ok.131.* WHEN 'L--'. "total left132.* PERFORM FCODE_TOTAL_LEFT USING P_TC_NAME.133.*134.* WHEN 'L-'. "column left135.* PERFORM FCODE_COLUMN_LEFT USING P_TC_NAME.136.*137.* WHEN 'R+'. "column right138.* PERFORM FCODE_COLUMN_RIGHT USING P_TC_NAME.139.*140.* WHEN 'R++'. "total right141.* PERFORM FCODE_TOTAL_RIGHT USING P_TC_NAME.142.*143. WHEN 'MARK'. "mark all filled lines 144. PERFORM fcode_tc_mark_lines USING p_tc_name145. p_table_name146. p_mark_name .147. CLEAR p_ok.148.149. WHEN 'DMRK'. "demark all filled lines 150. PERFORM fcode_tc_demark_lines USING p_tc_name151. p_table_name152. p_mark_name .153. CLEAR p_ok.154.155.* WHEN 'SASCEND' OR156.* 'SDESCEND'. "sort column157.* PERFORM FCODE_SORT_TC USING P_TC_NAME158.* l_ok.159.160. ENDCASE.161.162.E NDFORM. " USER_OK_TC163.164.*&---------------------------------------------------------------------* 165.*& Form FCODE_INSERT_ROW * 166.*&---------------------------------------------------------------------* 167.F ORM fcode_insert_row168. USING p_tc_name TYPE dynfnam169. p_table_name .170.171.*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------* 172. DATA l_lines_name LIKE feld-name.173. DATA l_selline LIKE sy-stepl.174. DATA l_lastline TYPE i.175. DATA l_line TYPE i.176. DATA l_table_name LIKE feld-name.177. FIELD-SYMBOLS <tc> TYPE cxtab_control.178. FIELD-SYMBOLS <table> TYPE STANDARD TABLE.179. FIELD-SYMBOLS <lines> TYPE i.180.*&SPWIZARD: END OF LOCAL DATA------------------------------------------* 181.182. ASSIGN (p_tc_name) TO <tc>.183.184.*&SPWIZARD: get the table, which belongs to the tc * 185. CONCATENATE p_table_name '[]' INTO l_table_name. "table body186. ASSIGN (l_table_name) TO <table>. "not headerline187.188.*&SPWIZARD: get looplines of TableControl * 189. CONCATENATE 'G_' p_tc_name '_LINES' INTO l_lines_name.190. ASSIGN (l_lines_name) TO <lines>.191.192.*&SPWIZARD: get current line * 193. GET CURSOR LINE l_selline.194. IF sy-subrc <> 0. " append line to table195. l_selline = <tc>-lines + 1.196.*&SPWIZARD: set top line * 197. IF l_selline > <lines>.198. <tc>-top_line = l_selline - <lines> + 1 .199. ELSE.200. <tc>-top_line = 1.201. ENDIF.202. ELSE. " insert line into table203. l_selline = <tc>-top_line + l_selline - 1.204. l_lastline = <tc>-top_line + <lines> - 1.205. ENDIF.206.*&SPWIZARD: set new cursor line * 207. l_line = l_selline - <tc>-top_line + 1.208.209.*&SPWIZARD: insert initial line * 210. INSERT INITIAL LINE INTO <table> INDEX l_selline.211. <tc>-lines = <tc>-lines + 1.212.*&SPWIZARD: set cursor * 213. SET CURSOR LINE l_line.214.215.E NDFORM. " FCODE_INSERT_ROW216.217.*&---------------------------------------------------------------------* 218.*& Form FCODE_DELETE_ROW * 219.*&---------------------------------------------------------------------* 220.F ORM fcode_delete_row221. USING p_tc_name TYPE dynfnam222. p_table_name223. p_mark_name .224.225.*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------* 226. DATA l_table_name LIKE feld-name.227.228. FIELD-SYMBOLS <tc> TYPE cxtab_control.229. FIELD-SYMBOLS <table> TYPE STANDARD TABLE.230. FIELD-SYMBOLS <wa>.231. FIELD-SYMBOLS <mark_field>.232.*&SPWIZARD: END OF LOCAL DATA------------------------------------------* 233.234. ASSIGN (p_tc_name) TO <tc>.235.236.*&SPWIZARD: get the table, which belongs to the tc * 237. CONCATENATE p_table_name '[]' INTO l_table_name. "table body238. ASSIGN (l_table_name) TO <table>. "not headerline239.240.*&SPWIZARD: delete marked lines * 241. DESCRIBE TABLE <table> LINES <tc>-lines.242.243. LOOP AT <table> ASSIGNING <wa>.244.245.*&SPWIZARD: access to the component 'FLAG' of the table header * 246. ASSIGN COMPONENT p_mark_name OF STRUCTURE <wa> TO <mark_field>. 247.248. IF <mark_field> = 'X'.249. DELETE <table> INDEX syst-tabix.250. IF sy-subrc = 0.251. <tc>-lines = <tc>-lines - 1.252. ENDIF.253. ENDIF.254. ENDLOOP.255.256.E NDFORM. " FCODE_DELETE_ROW257.258.*&---------------------------------------------------------------------* 259.*& Form COMPUTE_SCROLLING_IN_TC260.*&---------------------------------------------------------------------* 261.* text262.*----------------------------------------------------------------------* 263.* -->P_TC_NAME name of tablecontrol264.* -->P_OK ok code265.*----------------------------------------------------------------------* 266.F ORM compute_scrolling_in_tc USING p_tc_name267. p_ok.268.*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------* 269. DATA l_tc_new_top_line TYPE i.270. DATA l_tc_name LIKE feld-name.271. DATA l_tc_lines_name LIKE feld-name.272. DATA l_tc_field_name LIKE feld-name.273.274. FIELD-SYMBOLS <tc> TYPE cxtab_control.275. FIELD-SYMBOLS <lines> TYPE i.276.*&SPWIZARD: END OF LOCAL DATA------------------------------------------* 277.278. ASSIGN (p_tc_name) TO <tc>.279.*&SPWIZARD: get looplines of TableControl * 280. CONCATENATE 'G_' p_tc_name '_LINES' INTO l_tc_lines_name.281. ASSIGN (l_tc_lines_name) TO <lines>.282.283.284.*&SPWIZARD: is no line filled? * 285. IF <tc>-lines = 0.286.*&SPWIZARD: yes, ... *287. l_tc_new_top_line = 1.288. ELSE.289.*&SPWIZARD: no, ... * 290. CALL FUNCTION 'SCROLLING_IN_TABLE'291. EXPORTING292. entry_act = <tc>-top_line293. entry_from = 1294. entry_to = <tc>-lines295. last_page_full = 'X'296. loops = <lines>297. ok_code = p_ok298. overlapping = 'X'299. IMPORTING300. entry_new = l_tc_new_top_line301. EXCEPTIONS302.* NO_ENTRY_OR_PAGE_ACT = 01303.* NO_ENTRY_TO = 02304.* NO_OK_CODE_OR_PAGE_GO = 03305. OTHERS = 0.306. ENDIF.307.308.*&SPWIZARD: get actual tc and column * 309. GET CURSOR FIELD l_tc_field_name310. AREA l_tc_name.311.312. IF syst-subrc = 0.313. IF l_tc_name = p_tc_name.314.*&SPWIZARD: et actual column * 315. SET CURSOR FIELD l_tc_field_name LINE 1.316. ENDIF.317. ENDIF.318.319.*&SPWIZARD: set the new top line * 320. <tc>-top_line = l_tc_new_top_line.321.322.323.E NDFORM. " COMPUTE_SCROLLING_IN_TC324.325.*&---------------------------------------------------------------------* 326.*& Form FCODE_TC_MARK_LINES327.*&---------------------------------------------------------------------* 328.* marks all TableControl lines329.*----------------------------------------------------------------------* 330.* -->P_TC_NAME name of tablecontrol331.*----------------------------------------------------------------------* 332.F ORM fcode_tc_mark_lines USING p_tc_name333. p_table_name334. p_mark_name.335.*&SPWIZARD: EGIN OF LOCAL DATA-----------------------------------------* 336. DATA l_table_name LIKE feld-name.337.338. FIELD-SYMBOLS <tc> TYPE cxtab_control.339. FIELD-SYMBOLS <table> TYPE STANDARD TABLE.340. FIELD-SYMBOLS <wa>.341. FIELD-SYMBOLS <mark_field>.342.*&SPWIZARD: END OF LOCAL DATA------------------------------------------* 343.344. ASSIGN (p_tc_name) TO <tc>.345.346.*&SPWIZARD: get the table, which belongs to the tc * 347. CONCATENATE p_table_name '[]' INTO l_table_name. "table body348. ASSIGN (l_table_name) TO <table>. "not headerline349.350.*&SPWIZARD: mark all filled lines * 351. LOOP AT <table> ASSIGNING <wa>.352.353.*&SPWIZARD: access to the component 'FLAG' of the table header * 354. ASSIGN COMPONENT p_mark_name OF STRUCTURE <wa> TO <mark_field>. 355.356. <mark_field> = 'X'.357. ENDLOOP.358.E NDFORM. "fcode_tc_mark_lines 359.360.*&---------------------------------------------------------------------* 361.*& Form FCODE_TC_DEMARK_LINES362.*&---------------------------------------------------------------------* 363.* demarks all TableControl lines364.*----------------------------------------------------------------------* 365.* -->P_TC_NAME name of tablecontrol366.*----------------------------------------------------------------------* 367.F ORM fcode_tc_demark_lines USING p_tc_name368. p_table_name369. p_mark_name .370.*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------* 371. DATA l_table_name LIKE feld-name.372.373. FIELD-SYMBOLS <tc> TYPE cxtab_control.374. FIELD-SYMBOLS <table> TYPE STANDARD TABLE.375. FIELD-SYMBOLS <wa>.376. FIELD-SYMBOLS <mark_field>.377.*&SPWIZARD: END OF LOCAL DATA------------------------------------------* 378.379. ASSIGN (p_tc_name) TO <tc>.380.381.*&SPWIZARD: get the table, which belongs to the tc * 382. CONCATENATE p_table_name '[]' INTO l_table_name. "table body383. ASSIGN (l_table_name) TO <table>. "not headerline384.385.*&SPWIZARD: demark all filled lines * 386. LOOP AT <table> ASSIGNING <wa>.387.388.*&SPWIZARD: access to the component 'FLAG' of the table header * 389. ASSIGN COMPONENT p_mark_name OF STRUCTURE <wa> TO <mark_field>. 390.391. <mark_field> = space.392. ENDLOOP.393.E NDFORM. "fcode_tc_mark_lines。
tab ①接头(片).薄片.(电器)连接端,引线②凸耳[舌]table ①(工作)台.桌子②表,表格.图表tab washer 有耳[凸舌]垫圈tachometer 转速表[计]tachometer dial (指示仪表)转速表刻度盘tall board (货车货箱)后(栏)板tall end ①末端.尾端.后部.尾部②(车辆)后部tall gate ①(货箱)后(栏)板②(车身)背门键板tall lamp 尾灯,后灯tall lift ①(车辆/车辆动力学)尾升②(货箱)后置提升器.装在后栏板处的举升器taillight 尾灯.后灯tall panel (车身后端)后壁板tallpipe (排气系统)尾管tandem 串联[列]的tandem cylinder 串列[联]工作[油]缸tank ①罐.槽.桶.容器②燃油箱tank body 罐式车身tank filler 油箱加油口,容器加注口tank flap (车身)加油口盖tank-level sensor 油箱(贮液罐]液面[位]传感器tank neck 燃油箱加油管tank strap 燃油箱紧固[安装]带,油箱箍带tank truck 液罐车tank ventilation 燃油箱通气[风]tap ①塞子②旋塞,开关,龙头③丝攻[锥]taper ①(圆)锥形,锥度②斜,斜度taper-leaf spring 变截面弹簧,少片式板簧tapered 锥形[体]的,楔形的tapered bore 圆锥孔tapered pin 锥形[斜]销tapered roller bearing 圆锥滚子轴承tapered seat ①圆锥座面②(轮辋/车轮)斜底,斜胎圈座tapered spring (悬架)变截面(钢板)弹簧taper-face 锥面的taper gasket 锥形(密封)衬垫,锥形衬圈taper pin 锥形销,圆锥销tappet 挺柱[杆]tappet barrel[body] (配气机构)挺柱体tappet guide (配气机构)挺柱导套tappet pad (柴油机调速器)挺柱垫块tappet play 挺柱[气门]间隙target 目标target ignition angle 目标点火角度[正时]taxi 出租汽车[轿车]team ①组,班,队②机组tear 【动,名】撕破,裂开,裂纹,磨[破]损techincal 技术的。
ABAP 表格控制(Table Control)和步循环(STEP-LOOP)表格控制(Table Control)和步循环1. 两个标准Demo: SAPMTZ60, SAPMTZ612. 简介3. 建立Table Control程序的基本流程4. 使用步循环5. 表格控制(Table Control)和步循环注意事项6. 在屏幕表格中循环和在内表与屏幕表格中同时循环的区别7. 确定屏幕循环的记录条目8. MODIFY2. 简介表格控制和步循环是用于屏幕表格显示的对象。
表格控制只是增强了的步循环,它可以使用桌面应用程序中表格工具的“Look”和“Feel”来显示数据。
表格控制还提供使表格易于查看和使用的专用格式化功能步循环的一个特点是它们的表行能够在屏幕上跨越多行。
相反,表格控制中的行总是单行,但可以很长。
(表格控制的行能够滚动。
)通常表格控制所提供的许多特征由系统的SAPGUI 前端操纵,因此,不必在ABAP/4 事务中编制任何特征(除了竖直滚动)。
LOOP 语句的任务LOOP 语句负责读取往返传递于屏幕和ABAP/4 程序之间的屏幕表格值。
因此必须同时在PBO 和PAI 事件中为屏幕中的每一个表格编制LOOP语句。
至少在此应有一个空LOOP...ENDLOOP语句。
LOOP 语句还用于驱动滚动。
在PBO事件中,LOOP使用一个参数告诉从表格的何处开始循环。
该参数因此导致下一个屏幕表格显示的更新(对于表格控制,该参数是表格控制结构中的TOP_LINE 字段;对于步循环,该参数为用于LOOP 语句的CURSOR参数。
)。
ABAP/4 程序和系统都可以设置该参数。
注意,屏幕表格中所显示的行数可以改变。
当屏幕表格可调整并且用户更改窗口的高度时就会出现这种情况。
在这种情况下,PAI中的下一个LOOP就更改PAI中传到ABAP/4程序的表格行数。
LOOP 语句有两种重要的格式:LOOP如果正在使用表格控制,就必须包括附加的WITH CONTROL参数:LOOP WITH CONTROL <table-control>.<actions>...ENDLOOP .该语句在屏幕表格行中循环( Table Control 有多少行就循环多少次) ,同时在每个块和程序的对应ABAP/4 字段之间往复传送数据。
ABAP表控制TableControl设计表控制(Table Control)是SAP应用中最重要的对象之一,业务单据的输入、基础数据的表格输入等都是使用Table Control控件,本章主要介绍:(1)在屏幕设计中通过向导来制作表控件对象,由系统生成程序;(2)非向导设计Table Control控件;(3)通过系统生成数据表维护程序,并在程序中调用;(4)表格设计技巧;(5)通过表格维护变更内表数据,并将内表数据提交数据库。
1、使用向导制作Table Control本节先建立一个内表,通过向导建立一个表格控件使用该内表。
1.1、建立程序先建立程序,定义内表,屏幕有退出按钮,主程序代码如下[plain] view plaincopyprint?1.REPORT YTEST20160615002.2.3.DATA: OK_CODE TYPE SY-UCOMM,4.SAVE_OK LIKE OK_CODE.5.6.*定义内表,注意两种写法一样7.*DATA SH1 LIKE YTJAYSCHOOL OCCURS 0 WITH HEADER LINE.8.DATA SH1 LIKE TABLE OF YTJAYSCHOOL WITH HEADER LI NE.9.*增加内表数据10.SELECT * INTO CORRESPONDING FIELDS OF TABLE SH 1 FROM YTJAYSCHOOL.11.12.*测试输出数据13.LOOP AT SH1.14.WRITE:/ SH1-YCT_ID, SH1-YSH_ID, SH1-YSH_NAME, SH1-YSH_ADDR.15.ENDLOOP.16.17.*直接调用窗口18.CALL SCREEN 100.19.20.*用户交互21.MODULE USER_COMMAND_0100 INPUT.22.SAVE_OK = OK_CODE.23.CLEAR OK_CODE.24.*退出按钮时退出程序25.CASE SAVE_OK.26.WHEN 'CANCEL'.27.LEAVE PROGRAM.28.ENDCASE.29.ENDMODULE.30.31.MODULE STATUS_0100 OUTPUT.32.SET PF-STATUS 'STATUS1'.33.ENDMODULE.REPORT YTEST20160615002. DATA: OK_CODE TYPE SY-UCOMM, SAVE_OK LIKE OK_CODE. *定义内表,注意两种写法一样*DATA SH1 LIKE YTJAYSCHOOL OCCURS 0 WITH HEADER LINE. DATA SH1 LIKE TABLE OF YTJAYSCHOOL WITH HEADER LINE. *增加内表数据SELECT * INTO CORRESPONDING FIELDS OF TABLE SH1 FROM YTJAYSCHOOL. *测试输出数据 LOOP AT SH1. WRITE:/ SH1-YCT_ID, SH1-YSH_ID, SH1-YSH_NAME, SH1-YSH_ADDR. ENDLOOP. *直接调用窗口 CALL SCREEN 100. *用户交互 MODULEUSER_COMMAND_0100 INPUT. SAVE_OK = OK_CODE. CLEAR OK_CODE. *退出按钮时退出程序 CASE SAVE_OK. WHEN 'CANCEL'. LEAVE PROGRAM. ENDCASE. ENDMODULE. MODULE STATUS_0100 OUTPUT. SET PF-STATUS 'STATUS1'. ENDMODULE.逻辑流程序[plain] view plaincopyprint?1.PROCESS BEFORE OUTPUT.2.MODULE STATUS_0100.3.4.PROCESS AFTER INPUT.5.MODULE USER_COMMAND_0100.PROCESS BEFORE OUTPUT. MODULE STATUS_0100. PROCESS AFTER INPUT. MODULE USER_COMMAND_0100.1.2、使用向导建立Table Control控件启动屏幕编辑器,选“表控件”按钮,在屏幕上建立该对象后,系统自动导航界面,如图输入Table Control的名称,继续选择从内表建立,输入内表名称SH1(在主程序中已建立该内表)如果程序没有激活,会提示需要激活,此时再打开一个SESSION 激活程序,此前我们已经激活该程序。
本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==AE开发实验报告实验p2.2 使用控件创建第一个桌面应用程序一.实验目的1)掌握使用控件创建桌面应用程序的主要流程;2)掌握MapControl控件、TOC控件、Toobar控件的特性及其与ArcMap中的对应关系;3)编写代码实现加载 Mxd 文档、添加 Shape 文件、鹰眼放大等功能;4)掌握ArcGIS Developer help查询接口帮助的方法。
二.实验内容1)使用控件创建桌面应用程序的主要流程;2)代码加载 Mxd 文档3)添加 Shape 文件4)鹰眼功能三.实验步骤3.1使用控件创建桌面应用程序1)新建一个Windows窗体应用程序(文件--新建--项目--Windos窗体应用程序)2)设置项目保存位置及项目名称,在点了确定之后,在VS的工具箱中找到到和ArcGIS Engine相关的控件其中,AxMapControl就是Map地图控件,AxPageLayouControl是布局地图控件,AxTOCControl是目录控件,AxToolbarControl是GIS工具栏控件,AxSceneControl是Scene三维场景控件,axGlobeControl 是Globe 控件,AxLicenseControl 是许可控件,AxSymbologyControl控件,AxArcReaderControl 是ArcReader 控件,AxArcReaderGlobeControl 是ArcReaderGlobe 控件。
AxLicenseControl是许可控件,一般GIS系统中都必须添加,否则无法使用。
3)然后添加Toc、Map、Toolbar、license 控件。
License(许可)控件是首选的,否则其他控件无法使用,具体布局如下图所示4)设置工程初始化时自动添加地图文档(Map控件-右键-属性)5) 设置Buddy属性,使Toolbar控件和Toc控件与Map控件的关联6)在Toolbar中进行设置(Toolbar控件-右键-属性)7)添加工具命令在Toolbar control上右键—属性在items选项卡中添加几个工具命令添加结果如下:8)运行我们的应用程序,发现下面的错误出现这个问题的原因是因为ArcGIS 10 发生了变化,将“ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engine)”语句添加到使用AO对象的前面,如放在main函数中,如下图所示:9)上面工作完成之后,按F5键运行程序,运行成功之后出现以下界面尝试使用工具栏上的工具,如打开文档、保存文档等命令,测试toolbar控件是否与map控件相关联。
ABAP table controlTable control用于在screen上以表格的形式显示数据,在table control中,可以使用table elements,keywords,,templates,radio buttons,radio button groups和pushbuttons。
一行可以有255个columns。
每个column可以有一个title。
Table control可以用来显示single structured lines。
Table control的特点:●Resizable table for displaying and editing data●用户或者程序可以改变列的宽度和位置并可以保存下来用于下次调用●Check column for marking lines,marked lines are highlighted in a differentcolor●Line selection single lines multiple lines all lines and deselection●Column headings double as pushbuttons for marking columns●Scroll bars for horizontal and vertical scrolling●Any number of key columns can be set●Cell attributes are variable at runtimeTable control可以存储display variants完全在客户端运行的table control action有:●Horizontal scrolling●Swapping columns●Changing column width●Selecting columns●Selecting linesScroll vertically或者save user configuration都会trigger PAI processing block除了name start poison on screen和static size,table control还有很多特殊的属性,这些属性决定了table control的table type,display options以及用户是否可以配置table control。
SAP应用事务开发—TABLE CONTROL 控件之应用(一)
分类:ABAP 2012-10-26 17:41 2435人阅读评论(0) 收藏举报前期我自己自建了好多张表,其中有的表的数据是随着业务的增长添加的,比如:全国商超主数据表,随着公司入驻商超的数量增加而增加。
所以需要做一个对话框式的应用交付渠道主管部门,当有新商超的时候,他们自行添加。
这样就有了下面的例子。
利用SAP应用事务开发功能的表格控件(Table Control),此控件主要应用于数据的批量输出或输入。
1)Tcode:se38,新建程序:Z_INPUT_SAMPLE
2) 定义内表IT_ITAB
[plain]view plaincopyprint?
1.REPORT Z_INPUT_SAMPLE.
2.TABLES:ZMARKET_MESSAGE.
3.DATA: BEGIN OF IT_ITAB OCCURS 0,
4. CHK TYPE C,
5. SUPPERID LIKE ZMARKET_MESSAGE-SUPPERID,
6. SUPPER LIKE ZMARKET_MESSAGE-SUPPER,
7. MARKETID LIKE ZMARKET_MESSAGE-MARKETID,
8. MARKET LIKE ZMARKET_MESSAGE-MARKET,
9. END OF IT_ITAB.
2)我们可以用Tcode:SE51来实现Screen的创建和维护,当然使用该工具需要提供刚建的程序名及Screen编号。
注意:1000为SAP预留屏幕号,这里自定义的屏幕号必须定义1000以外的其他数字,且最多不能超过4位,本例定义屏幕号为100.
点击创建后,进入Screen设置界面。
界面分3个部分,如下面的图
3)你也可以使用Tcode:SE80来创建Screen及ABAP设计。
4)单击ScreenPainter 按钮,绘制一表格区域,系统将弹出表格创建向导。
单击:继续,在Name of table control这里输入屏幕表格元素名称,例如:T_TEST
单击:继续,在Internal program talbe 处按F4会自动出现刚我们创建的内表IT_ITAB. Table work area也是如此。
加入进去。
单击:继续,可以看到我们定义内表的Field,多选需要input数据的这几行。
单击:继续,因为我们要写入表格,所以单选Input control。
With column headers是设置是否显示每栏的标题,CHK这个字段就是我们内表中第一个字段,就是为在此出现特别定义的。
按F4会自动加显示出来
单击:继续,看到3个复选框,第一个是:是否滚动,第二个是:是否自动加载增加和删除按钮,第三个是:是否增加全选和全不选按钮,我们这里都选中,这样向导会自动加载程序代码,省事省力省时。
单击:继续,下面这些,可以保持默认就可。
单击:继续,最后一步,点击:complete,至此用向导就将Table control画好了。
双击标签栏的字段,出现属性窗口,更改下名称。
最后保存激活。
再回到我们的代码,发现通过向导建Table Control给我们做了很多便利的事情,如图,生成了方法,区分了类别。
还生成不少代码。
回到ABAP编辑界面,我们给代码中加几句:
保存激活后,就可以看到如下效果:你会发现状态栏的按钮都不起作用。
接下来,我们来设计它,让它起作用。
在逻辑流里将这两段被注释的语句解封。
然后双击:STATUS_0100,创建该对象
在出现的对话框中选择第二项提交。
点击是,界面转到ABAP编辑界面,出现如下代码:
将 SET PF-STATUS 'xxxxxxxx'.SET TITLEBAR 'xxx'.解封,并重命名。
双击重命名后的名称:ZCREEN0100 创建该对象
点击确定后,系统带我们进入如下界面:
将功能键区打开,我们可以看到我们经常看到的图标都在此聚集着
在每个ico图标上方命名
然后再双击每一个ico图标进行设置
完成后保存激活。
这时你会发现右边树形结构处多了一栏。
进入PAI模块的T_TEST_USER_COMMAND,双击进去,在后面的代码栏输入如图代码。
保存激活后,再运行状态栏这行就可以正常使用了。