SAP-FUNCTION ALV LIST

1.zwxt_08_list

*&---------------------------------------------------------------------*
*& report zwxt_08
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zwxt_08_list MESSAGE-ID WX.

INCLUDE ZWXT_08_LIST_TOP.
*INCLUDE zwxt_08_top.
INCLUDE ZWXT_08_LIST_SEL.
*INCLUDE zwxt_08_sel.
INCLUDE ZWXT_08_LIST_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_LIST_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 STANDARD TABLE OF slis_fieldcat_alv.
DATA gs_fieldcat TYPE slis_fieldcat_alv.

DATA gs_layout TYPE slis_layout_alv.

DATA gt_sort TYPE STANDARD TABLE OF slis_sortinfo_alv.
DATA gs_sort LIKE LINE OF gt_sort.

DATA gt_filter TYPE STANDARD TABLE OF slis_filter_alv.
DATA gs_filter LIKE LINE OF gt_filter.

DATA gs_variant TYPE disvariant.

DATA gt_events TYPE slis_t_event.
DATA gs_events LIKE LINE OF gt_events.

3.ZWXT_08_LIST_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'. "单元格颜色 在List ALV这个会报错
  "gs_layout-tabname = '学生表信息'.
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-seltext_l = &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_LIST_DISPLAY'
   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_STRUCTURE_NAME               =
     is_layout                      = gs_layout
     it_fieldcat                    = gt_fieldcat
*     IT_EXCLUDING                   =
*     IT_SPECIAL_GROUPS              =
*     IT_SORT                        =
*     IT_FILTER                      =
*     IS_SEL_HIDE                    =
*     I_DEFAULT                      = 'X'
*     I_SAVE                         = ' '
     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
*     IR_SALV_LIST_ADAPTER           =
*     IT_EXCEPT_QINFO                =
*     I_SUPPRESS_EMPTY_DATA          = ABAP_FALSE
*   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.

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-sign0 = 'E'.
  gs_filter-optio = 'EQ'.
  gs_filter-valuf = 0.
  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 = 'PF_STATUS_SET'.
  gs_events-form = 'SPF_STATUS_SET'.
  APPEND gs_events to gt_events.

  CLEAR gs_events.
  gs_events-name = 'TOP_OF_PAGE'.
  gs_events-form = 'TOP_OF_PAGE_WRITE'.
  APPEND gs_events TO gt_events.
ENDFORM.

*设置表头
FORM TOP_OF_PAGE_WRITE.
 WRITE:/(40) '学生信息表' CENTERED.
 WRITE:(20) SY-UZEIT CENTERED.
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.

猜你喜欢

转载自blog.csdn.net/wx774891/article/details/109337015
alv