SAP-FUNCTION ALV LVC

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.

猜你喜欢

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