1.zwxt_08_lvc
*&---------------------------------------------------------------------*
*& report zwxt_08
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zwxt_08_lvc MESSAGE-ID WX.
INCLUDE ZWXT_08_LVC_TOP.
*INCLUDE zwxt_08_top.
INCLUDE ZWXT_08_LVC_SEL.
*INCLUDE zwxt_08_sel.
INCLUDE ZWXT_08_LVC_FRM.
*INCLUDE zwxt_08_frm.
INITIALIZATION.
AT SELECTION-SCREEN OUTPUT.
AT SELECTION-SCREEN.
START-OF-SELECTION.
PERFORM frm_get_data.
END-of-SELECTION.
PERFORM frm_display_data.
2.ZWXT_08_LVC_TOP
*&---------------------------------------------------------------------*
*& 包含 ZWXT_08_TOP
*&---------------------------------------------------------------------*
TYPE-POOLS: slis.
TABLES: zwxstudent_02.
TYPES: BEGIN OF gty_student.
INCLUDE STRUCTURE zwxstudent_02.
TYPES: box TYPE c LENGTH 1.
TYPES: icon TYPE c LENGTH 5.
TYPES: check TYPE c LENGTH 1.
TYPES: line_color TYPE c LENGTH 4. "行颜色
TYPES: field_color TYPE lvc_t_scol."列颜色
TYPES: END OF gty_student.
DATA gt_student TYPE STANDARD TABLE OF gty_student.
DATA gs_student LIKE LINE OF gt_student.
DATA gt_fieldcat TYPE lvc_t_fcat.
DATA gs_fieldcat TYPE lvc_s_fcat.
DATA gs_layout TYPE lvc_s_layo.
DATA gt_sort TYPE lvc_t_sort.
DATA gs_sort TYPE lvc_s_sort.
DATA gt_filter TYPE lvc_t_filt.
DATA gs_filter TYPE lvc_s_filt.
DATA gs_variant TYPE disvariant.
DATA gt_events TYPE slis_t_event.
DATA gs_events LIKE LINE OF gt_events.
3.ZWXT_08_LVC_FRM
*&---------------------------------------------------------------------*
*& 包含 ZWXT_08_FRM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form frm_get_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_data .
DATA ls_field_color TYPE lvc_s_scol.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_student
FROM zwxstudent_02.
LOOP AT gt_student INTO gs_student.
IF gs_student-zsex = 'M'.
gs_student-icon = icon_green_light.
"设置性别为M的单元格颜色
CLEAR ls_field_color.
ls_field_color-fname = 'ZSEX'.
ls_field_color-color-col = 7.
ls_field_color-color-int = 1.
ls_field_color-color-inv = 0.
APPEND ls_field_color TO gs_student-field_color.
ELSE.
gs_student-icon = icon_red_light.
ENDIF.
IF gs_student-zunit <> 'KG'.
gs_student-line_color = 'C600'.
ENDIF.
MODIFY gt_student FROM gs_student.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_display_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_display_data .
PERFORM frm_build_layout.
PERFORM frm_build_fieldcat.
PERFORM frm_build_sort.
PERFORM frm_build_filter. "出现了一点问题
PERFORM frm_build_variant.
PERFORM frm_build_events.
PERFORM frm_build_alv.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_build_layout
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_build_layout .
* gs_layout-zebra = 'X'. "斑马线
* gs_layout-key_hotspot = 'X'. "热点
* gs_layout-colwidth_optimize = 'X'. "自动优化宽度
* gs_layout-box_fieldname = 'BOX'. "当选中某些行 这些box自动赋值X
* gs_layout-window_titlebar = '学生信息表'. "window窗体的title
* gs_layout-confirmation_prompt = 'X'. "退出窗体时提示是否退出的
* gs_layout-detail_initial_lines = 'X'. "没有值的也会显示出来在detail页面
* gs_layout-info_fieldname = 'line_color'. "设置行的颜色
* gs_layout-coltab_fieldname = 'field_color'. "单元格颜色
gs_layout-zebra = 'X'. "斑马线
gs_layout-keyhot = 'X'. "热点
gs_layout-cwidth_opt = 'X'. "自动优化宽度
gs_layout-box_fname = 'BOX'. "当选中某些行 这些box自动赋值X
gs_layout-grid_title = '学生信息表'. "window窗体的title
* gs_layout-confirmation_prompt = 'X'. "退出窗体时提示是否退出的
gs_layout-detailinit = 'X'. "没有值的也会显示出来在detail页面
gs_layout-info_fname = 'line_color'. "设置行的颜色
gs_layout-ctab_fname = 'field_color'. "单元格颜色
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_build_fieldcat
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_build_fieldcat .
"定义宏
DEFINE %%append_fieldcat.
CLEAR gs_fieldcat.
gs_fieldcat-col_pos = &1.
gs_fieldcat-fieldname = &2.
gs_fieldcat-outputlen = &3.
gs_fieldcat-scrtext_m = &4.
CASE &2.
WHEN 'ZCODE'.
gs_fieldcat-key = 'X'.
gs_fieldcat-no_zero = 'X'.
WHEN 'ICON'.
gs_fieldcat-icon = 'X'.
WHEN 'CHECK'.
gs_fieldcat-checkbox = 'X'.
WHEN 'ZWEIGHT'.
"gs_fieldcat-edit = 'X'. "可编辑
gs_fieldcat-do_sum = 'X'. "这一列做合计
gs_fieldcat-hotspot = 'X'.
gs_fieldcat-qfieldname = 'ZUNIT'. "指明当前字段单位
"gs_fieldcat-quantity = 'KG'.
WHEN 'ZSCHOOL'.
"第一位C是必须的,第二位是1-7之间的颜色,第三位0代表浅色,1代表深色,第四位0代表背景色,1代表字体颜色
"注意 如果设置了深色 则字体颜色为黑色
gs_fieldcat-emphasize = 'C600'.
WHEN 'ZUNIT'.
gs_fieldcat-emphasize = 'C601'.
ENDCASE.
APPEND gs_fieldcat TO gt_fieldcat.
END-OF-DEFINITION.
%%append_fieldcat: '1' 'ZCODE' '10' '学生编号',
'2' 'ZNAME' '10' '学生姓名',
'3' 'ZSEX' '5' '性别',
'4' 'ZSCHOOL' '10' '学校编号',
'5' 'ZWEIGHT' '10' '体重',
'6' 'ZUNIT' '3' '单位',
'7' 'ICON' '10' '图标',
'8' 'CHECK' '5' '选中'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_build_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_build_alv .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
i_callback_program = sy-repid
i_callback_pf_status_set = 'SPF_STATUS_SET'
i_callback_user_command = 'USER_COMMAND'
* I_CALLBACK_TOP_OF_PAGE = ' '
i_callback_html_top_of_page = 'FRM_HTML_TOP_OF_PAGE'
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fieldcat
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS_LVC =
it_sort_lvc = gt_sort
it_filter_lvc = gt_filter
* IT_HYPERLINK =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = ' '
is_variant = gs_variant
it_events = gt_events
* IT_EVENT_EXIT =
* IS_PRINT_LVC =
* IS_REPREP_ID_LVC =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP =
* I_HTML_HEIGHT_END =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO_LVC =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = gt_student
* EXCEPTIONS
* PROGRAM_ERROR = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
* CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
* EXPORTING
* i_callback_program = sy-repid
* i_callback_pf_status_set = 'SPF_STATUS_SET'
* i_callback_user_command = 'USER_COMMAND'
* i_grid_title = '学校表信息' "当前报表title
* i_callback_top_of_page = 'FRM_TOP_OF_PAGE' "FUNCTION
* i_callback_html_top_of_page = 'FRM_HTML_TOP_OF_PAGE' "OO
* is_layout = gs_layout
* it_fieldcat = gt_fieldcat
** it_sort = gt_sort
** IT_FILTER = gt_filter
** I_DEFAULT = 'X'
* i_save = 'X'
* is_variant = gs_variant
** it_events = gt_events
** IT_EVENT_EXIT =
** IS_PRINT =
** IS_REPREP_ID =
** I_SCREEN_START_COLUMN = 0
** I_SCREEN_START_LINE = 0
** I_SCREEN_END_COLUMN = 0
** I_SCREEN_END_LINE = 0
** I_HTML_HEIGHT_TOP = 0
** I_HTML_HEIGHT_END = 0
** IT_ALV_GRAPHICS =
** IT_HYPERLINK =
** IT_ADD_FIELDCAT =
** IT_EXCEPT_QINFO =
** IR_SALV_FULLSCREEN_ADAPTER =
** O_PREVIOUS_SRAL_HANDLER =
** IMPORTING
** E_EXIT_CAUSED_BY_CALLER =
** ES_EXIT_CAUSED_BY_USER =
* TABLES
* t_outtab = gt_student
* EXCEPTIONS
* program_error = 1
* OTHERS = 2.
ENDFORM.
*设置表头
FORM frm_top_of_page.
DATA lt_header TYPE slis_t_listheader.
DATA ls_header LIKE LINE OF lt_header.
DATA lv_date TYPE c LENGTH 20.
WRITE sy-datum TO lv_date USING EDIT MASK '____年__月__日'.
CLEAR ls_header.
ls_header-typ = 'H'.
* LS_HEADER-KEY = '信息表'.
ls_header-info = '学校信息表信息'.
APPEND ls_header TO lt_header.
CLEAR ls_header.
ls_header-typ = 'S'.
ls_header-key = '当前时间:'.
ls_header-info = lv_date.
APPEND ls_header TO lt_header.
CLEAR ls_header.
ls_header-typ = 'A'.
* LS_HEADER-KEY = '信息表'.
ls_header-info = '可查看学生信息'.
APPEND ls_header TO lt_header.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = lt_header
* I_LOGO =
* I_END_OF_LIST_GRID =
* I_ALV_FORM =
.
ENDFORM.
FORM frm_html_top_of_page USING p_document TYPE REF TO cl_dd_document.
DATA lv_datum TYPE sdydo_text_element.
WRITE sy-datum TO lv_DATUM USING EDIT MASK '____-__-__'.
CALL METHOD p_document->add_text
EXPORTING text = '学生信息表信息'
sap_style = cl_dd_document=>table_heading
sap_color = cl_dd_document=>list_key.
CALL METHOD p_document->new_line
EXPORTING repeat = 1. "重复几次
*输出日期
CALL METHOD p_document->add_text
EXPORTING text = '当前日期:'
sap_color = cl_dd_document=>list_negative_int
sap_fontsize = cl_dd_document=>medium.
CALL METHOD p_document->add_gap
EXPORTING width = 3.
CALL METHOD p_document->add_text
EXPORTING text = lv_datum
sap_color = cl_dd_document=>list_negative_inv.
CALL METHOD p_document->new_line
EXPORTING repeat = 1.
*输出链接
CALL METHOD p_document->add_text
EXPORTING text = '链接'
sap_fontsize = cl_dd_document=>medium.
CALL METHOD p_document->add_gap
EXPORTING width = 3.
CALL METHOD p_document->add_link
EXPORTING url = 'http://www.baidu.com/'
text = '点击跳转百度'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_build_sort
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_build_sort .
gs_sort-spos = 1.
gs_sort-fieldname = 'ZSCHOOL'.
gs_sort-up = 'X'.
"gs_sort-subtot = 'X'. "设置对当前字段进行统计
APPEND gs_sort TO gt_sort.
CLEAR gs_sort.
gs_sort-spos = 2.
gs_sort-fieldname = 'ZWEIGHT'.
gs_sort-down = 'X'.
APPEND gs_sort TO gt_sort.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_build_filter
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_build_filter .
gs_filter-fieldname = 'ZWEIGHT'.
gs_filter-sign = 'E'.
gs_filter-option = 'EQ'.
gs_filter-low = '0'.
gs_filter-high = ''.
APPEND gs_filter TO gt_filter.
ENDFORM.
FORM spf_status_set USING lt_extab TYPE slis_t_extab.
SET PF-STATUS 'STATUS'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_build_variant
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_build_variant .
gs_variant-report = sy-repid.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_build_events
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_build_events .
CLEAR gs_events.
gs_events-name = 'TOP_OF_PAGE'.
gs_events-form = 'frm_top_of_page'.
APPEND gs_events TO gt_events.
ENDFORM.
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
CASE r_ucomm.
WHEN 'PRINT'.
MESSAGE '报表打印' TYPE 'S'.
WHEN '&IC1'. "单击和双击事件
CASE rs_selfield-fieldname.
WHEN 'ZCODE'.
DATA ls_msg TYPE c LENGTH 50.
CONCATENATE '单击编号为:' rs_selfield-value '的学生' INTO ls_msg.
CONDENSE ls_msg NO-GAPS.
MESSAGE ls_msg TYPE 'S'.
WHEN 'ZWEIGHT'.
MESSAGE '单击体重' TYPE 'S'.
WHEN OTHERS.
"否则就是双击事件
CLEAR gs_student.
READ TABLE gt_student INTO gs_student INDEX rs_selfield-tabindex.
PERFORM frm_display_alv_school USING gs_student-zschool.
ENDCASE.
WHEN OTHERS.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_display_alv_school
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> GS_STUDENT_ZSCHOOL
*&---------------------------------------------------------------------*
FORM frm_display_alv_school USING p_gs_student_zschool.
DATA lt_school TYPE STANDARD TABLE OF zwxschool_01.
SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_school
FROM zwxschool_01
WHERE zschool = p_gs_student_zschool.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
* I_CALLBACK_PROGRAM = ' '
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
I_STRUCTURE_NAME = 'ZWXSCHOOL_01'
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
* IS_LAYOUT =
* IT_FIELDCAT =
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* O_PREVIOUS_SRAL_HANDLER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = lt_school
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.