源代码:

  1. *--------------------------------------------------------------------*
  2. *&---------------------------「TABLES」-----------------------------&*
  3. *--------------------------------------------------------------------*
  4. TABLES:.
  5. *--------------------------------------------------------------------*
  6. *&---------------------------「TYPES」------------------------------&*
  7. *--------------------------------------------------------------------*
  8. * 定义ALV输出结构
  9. TYPES:BEGIN OF output,
  10. END OF output.
  11. *--------------------------------------------------------------------*
  12. *&-----------------------「INTERNAL TABLES」------------------------&*
  13. *--------------------------------------------------------------------*
  14. * 定义输出内表
  15. DATA: gt_output TYPE TABLE OF output,
  16. gs_output TYPE output.
  17. * 定义ALV数据选择内表
  18. DATA: gt_checked TYPE TABLE OF output,
  19. gs_checked TYPE output.
  20. *--------------------------------------------------------------------*
  21. *&--------------------------「VARIABLE」----------------------------&*
  22. *--------------------------------------------------------------------*
  23. * 定义AVL变量
  24. DATA: gt_fieldcat TYPE lvc_t_fcat,
  25. gs_fieldcat TYPE lvc_s_fcat,
  26. gs_decimals TYPE lvc_decmls,
  27. gs_layout TYPE lvc_s_layo.
  28. * 定义指针
  29. FIELD-SYMBOLS:<fs_opt> TYPE output.
  30. *--------------------------------------------------------------------*
  31. *&--------------------------「SCREEN」------------------------------&*
  32. *--------------------------------------------------------------------*
  33. SELECTION-SCREEN:BEGIN OF BLOCK bk1 WITH FRAME TITLE TEXT-001 .
  34. * 区间
  35. SELECT-OPTIONS:
  36. s_field FOR itab-field NO INTERVALS NO-EXTENSION .
  37. SELECTION-SCREEN ULINE.
  38. * 单值
  39. PARAMETERS:p_field AS CHECKBOX, "复选框"
  40. p_rtn1 RADIOBUTTON GROUP g1, "单选按钮一"
  41. p_rtn2 RADIOBUTTON GROUP g1, "单选按钮二"
  42. p_file TYPE rlgrap-filename.
  43. SELECTION-SCREEN END OF BLOCK bk1.
  44. *--------------------------------------------------------------------*
  45. *&--------------------------「PROCESS」-----------------------------&*
  46. *--------------------------------------------------------------------*
  47. INITIALIZATION.
  48. START-OF-SELECTION.
  49. PERFORM frm_get_data.
  50. PERFORM frm_display_data.
  51. *&---------------------------------------------------------------------*
  52. *& Form FRM_DISPLAY_DATA
  53. *&---------------------------------------------------------------------*
  54. *& 数据展示输出
  55. *&---------------------------------------------------------------------*
  56. FORM frm_display_data .
  57. PERFORM frm_set_layout. " 设置ALV布局
  58. PERFORM frm_set_fieldcat. " 设置ALV展示字段
  59. PERFORM frm_display_alv. " 设置ALV数据展示
  60. ENDFORM.
  61. *&---------------------------------------------------------------------*
  62. *& Form FRM_SET_LAYOUT
  63. *&---------------------------------------------------------------------*
  64. *& 设置ALV布局
  65. *&---------------------------------------------------------------------*
  66. FORM frm_set_layout .
  67. gs_layout-zebra = 'X'.
  68. gs_layout-sel_mode = 'D'.
  69. gs_layout-cwidth_opt = 'X'.
  70. * GS_LAYOUT-BOX_FNAME = 'SEL'.
  71. ENDFORM.
  72. *&---------------------------------------------------------------------*
  73. *& Form FRM_SET_FIELDCAT
  74. *&---------------------------------------------------------------------*
  75. *& 设置字段目录
  76. *&---------------------------------------------------------------------*
  77. FORM frm_set_fieldcat .
  78. PERFORM frm_add_field USING 'STATUS' '状态灯' '' '' '' '' ''.
  79. * PERFORM frm_add_field USING 'MESSAGE' '消息' '' '' '' '' ''.
  80. ENDFORM.
  81. *&---------------------------------------------------------------------*
  82. *& Form FRM_ADD_FIELD
  83. *&---------------------------------------------------------------------*
  84. * 设置屏幕显示的字段
  85. *----------------------------------------------------------------------*
  86. FORM frm_add_field USING pv_fieldname
  87. pv_seltext
  88. pv_nozero
  89. pv_sum
  90. pv_ref_field
  91. pv_ref_table
  92. pv_edit.
  93. CLEAR:gs_fieldcat.
  94. gs_fieldcat-fieldname = pv_fieldname.
  95. gs_fieldcat-coltext = pv_seltext.
  96. gs_fieldcat-scrtext_s = pv_seltext.
  97. gs_fieldcat-scrtext_m = pv_seltext.
  98. gs_fieldcat-scrtext_l = pv_seltext.
  99. gs_fieldcat-no_zero = pv_nozero.
  100. gs_fieldcat-do_sum = pv_sum.
  101. gs_fieldcat-ref_field = pv_ref_field.
  102. gs_fieldcat-ref_table = pv_ref_table.
  103. gs_fieldcat-edit = pv_edit.
  104. APPEND gs_fieldcat TO gt_fieldcat.
  105. ENDFORM.
  106. *&---------------------------------------------------------------------*
  107. *& Form FRM_DISPLAY_ALV
  108. *&---------------------------------------------------------------------*
  109. *& 定义ALV输出函数
  110. *&---------------------------------------------------------------------*
  111. FORM frm_display_alv .
  112. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
  113. EXPORTING
  114. i_callback_program = sy-repid
  115. i_callback_pf_status_set = 'SET_PF_STATUS'
  116. i_callback_user_command = 'ALV_USER_COMMAND'
  117. is_layout_lvc = gs_layout
  118. it_fieldcat_lvc = gt_fieldcat
  119. * IT_EXCLUDING =
  120. * IT_SPECIAL_GROUPS_LVC =
  121. * IT_SORT_LVC =
  122. * I_DEFAULT = 'X'
  123. i_save = 'A'
  124. TABLES
  125. t_outtab = gt_output
  126. EXCEPTIONS
  127. program_error = 1
  128. OTHERS = 2.
  129. IF sy-subrc <> 0.
  130. * Implement suitable error handling here
  131. ENDIF.
  132. ENDFORM.
  133. *&---------------------------------------------------------------------*
  134. *& Form SET_PF_STATUS
  135. *&---------------------------------------------------------------------*
  136. *& 定义工具栏按钮状态
  137. *&---------------------------------------------------------------------*
  138. FORM SET_PF_STATUS USING PT_EXCLUDE TYPE KKBLO_T_EXTAB .
  139. * 声明按钮设置内表
  140. * DATA:LT_EXCLUDE TYPE KKBLO_T_EXTAB WITH HEADER LINE.
  141. * DATA:LS_EXCLUDE LIKE LINE OF LT_EXCLUDE.
  142. * 添加按钮例子:
  143. * LS_EXCLUDE = '&ADDLINE'.
  144. * APPEND LS_EXCLUDE TO LT_EXCLUDE[].
  145. * CLEAR LS_EXCLUDE.
  146. * LS_EXCLUDE = '&DELLINE'.
  147. * APPEND LS_EXCLUDE TO LT_EXCLUDE[].
  148. * CLEAR LS_EXCLUDE.
  149. * LS_EXCLUDE = '&SAVEMD'.
  150. * APPEND LS_EXCLUDE TO LT_EXCLUDE[].
  151. * CLEAR LS_EXCLUDE.
  152. * SET PF-STATUS 'STANDARD' EXCLUDING LT_EXCLUDE[] .
  153. * 如果条件满足:
  154. * IF P_FILTER IS NOT INITIAL.
  155. SET PF-STATUS 'STANDARD' .
  156. * ENDIF.
  157. ENDFORM.
  158. *&---------------------------------------------------------------------*
  159. *& Form ALV_USER_COMMAND
  160. *&---------------------------------------------------------------------*
  161. *& 定义ALV按钮事件
  162. *&---------------------------------------------------------------------*
  163. FORM ALV_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM RS_SELFIELD TYPE SLIS_SELFIELD .
  164. * 设置ALV内容改变事件回调
  165. DATA: LR_GRID TYPE REF TO CL_GUI_ALV_GRID.
  166. DATA: LV_INDEX TYPE I.
  167. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
  168. IMPORTING
  169. E_GRID = LR_GRID.
  170. CALL METHOD LR_GRID->CHECK_CHANGED_DATA.
  171. * 设置按钮触发事件
  172. * CASE R_UCOMM.
  173. * WHEN '&IC1'. " ALV双击事件
  174. * 获取当前双击的行目索引"
  175. * READ TABLE GT_OUTPUT INDEX RS_SELFIELD-TABINDEX ASSIGNING <FS_OPT>.
  176. * 判断是否是指定的字段?"
  177. * IF RS_SELFIELD-FIELDNAME EQ 'FIELD1' OR RS_SELFIELD-FIELDNAME EQ 'FIELD2'.
  178. * PERFORM FRM_ALV_EVENT_IC1.
  179. * ENDIF.
  180. * WHEN '&PRINT'.
  181. * PERFORM FRM_ALV_EVENT_PRINT. " 调用SF打印事件子例程
  182. * WHEN '&BDC'.
  183. * PERFORM FRM_ALV_EVENT_BDC. " 调用BDC批导事件子例程
  184. * WHEN '&BAPI'.
  185. * PERFORM FRM_ALV_EVENT_BAPI. " 调用BAPI批导事件子例程
  186. * WHEN '&FC01'.
  187. * PERFORM FRM_ALV_EVENT_FC01. " 调用FC01按钮事件子例程
  188. * WHEN '&FC02'.
  189. * PERFORM FRM_ALV_EVENT_FC02. " 调用FC02按钮事件子例程
  190. * WHEN OTHERS.
  191. * ENDCASE.
  192. RS_SELFIELD-REFRESH = 'X'. " 刷新ALV屏幕
  193. ENDFORM.