grid_alv

2023-09-10  本文已影响0人  聂落尘
REPORT
REPORT zlc_alv_learn_1.

INCLUDE zlc_alv_learn_1_top.
INCLUDE zlc_alv_learn_1_form.

START-OF-SELECTION.
PERFORM form_get_data.

END-OF-SELECTION.
PERFORM form_build_alv.
zlc_alv_learn_1_top
TYPE-POOLS slis.
TYPE-POOLS icon.

TYPES: BEGIN OF gty_student.
         INCLUDE STRUCTURE zstudent_hq_03.
TYPES:   icon      TYPE c LENGTH 4, "增加图标列,用来显示图标
         check     TYPE c LENGTH 1, " 复选框
         box       TYPE c LENGTH 1, " alv最左侧的选择框
         linecolor TYPE c LENGTH 4, "行颜色
         tabcolor  TYPE lvc_t_scol," 单元格颜色
       END OF gty_student.

DATA: gt_student TYPE TABLE OF gty_student,
      gs_student TYPE gty_student.

DATA: gt_fieldcat TYPE slis_t_fieldcat_alv, " 列属性
      gs_fieldcat TYPE slis_fieldcat_alv.

DATA: gs_layout TYPE slis_layout_alv.

" 排序
DATA: gt_sort TYPE slis_t_sortinfo_alv,
      gs_sort TYPE slis_sortinfo_alv.

" 筛选
DATA: gt_filter TYPE slis_t_filter_alv,
      gs_filter TYPE slis_filter_alv.

" 事件
DATA: gt_event TYPE slis_t_event,
      gs_event TYPE slis_alv_event.

DATA: gs_varient TYPE disvariant.
ZLC_ALV_LEARN_1_FORM
" 宏定义一般前面用加上%%,也可以不加, 一个宏最多9个参数
*DEFINE %%append_fieldcat.
*  CLEAR gs_fieldcat.
*  gs_fieldcat-col_pos = &1.
*  gs_fieldcat-fieldname = &2.
*  gs_fieldcat-outputlen = &3.
*  gs_fieldcat-seltext_m = &4.
*  CASE &2.
*    WHEN 'ZCODE'.
*      gs_fieldcat-key = 'X'." 设置为关键列
*      WHEN 'ICON'.
*         gs_fieldcat-icon = 'X'." 只要设置了图标, 不添加这一行也会显示图标
*    WHEN OTHERS.
*  ENDCASE.
*  APPEND gs_fieldcat TO gt_fieldcat.
*END-OF-DEFINITION.
FORM form_show_alv .
  gs_varient-report = sy-repid.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
*     I_INTERFACE_CHECK           = ' '
*     I_BYPASSING_BUFFER          = ' '
*     I_BUFFER_ACTIVE             = ' '
      i_callback_program          = sy-cprog " 调用程序的名称
*     I_CALLBACK_PF_STATUS_SET    = ' '
*     I_CALLBACK_USER_COMMAND     = ' '
*     I_CALLBACK_TOP_OF_PAGE      = ' '
      i_callback_html_top_of_page = 'FORM_HTML_TOP_OF_PAGE'
*     I_CALLBACK_HTML_END_OF_LIST = ' '
*     I_STRUCTURE_NAME            = " 可以传一个数据库表的名字,就不需要传it_fieldcat字段
*     I_BACKGROUND_ID             = ' '
      i_grid_title                = 'GRID ALV 标题'
*     I_GRID_SETTINGS             =
      is_layout                   = gs_layout
      it_fieldcat                 = gt_fieldcat
*     IT_EXCLUDING                =
*     IT_SPECIAL_GROUPS           =
      it_sort                     = gt_sort
      it_filter                   = gt_filter
*     IS_SEL_HIDE                 =
*     I_DEFAULT                   = 'X'
      i_save                      = 'A'
      is_variant                  = gs_varient
      it_events                   = gt_event
*     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.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form form_get_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM form_get_data .
  DATA ls_col TYPE lvc_s_scol.

  SELECT * FROM zstudent_hq_03 INTO CORRESPONDING FIELDS OF TABLE gt_student.
  LOOP AT gt_student INTO gs_student.
    IF gs_student-sex = 'F'.
      gs_student-icon = icon_green_light.
    ELSE.
      gs_student-icon = icon_red_light.
    ENDIF.

    "行颜色
*    IF gs_student-sex is INITIAL.
*      gs_student-linecolor = 'C600'.
*    ENDIF.

    " 单元格颜色
    " 性别字段添加颜色
    IF gs_student-sex = 'M'.
      CLEAR LS_COL.
      ls_col-fname = 'SEX'." 字段名
      ls_col-color-col = 6." 颜色
      ls_col-color-int = 0." 加重
      ls_col-color-inv = 0." 反色
      APPEND ls_col TO gs_student-tabcolor.
    ENDIF.

    MODIFY gt_student FROM gs_student.
  ENDLOOP.
ENDFORM.


FORM form_build_fieldcat.
  PERFORM form_fieldcat USING: '1' 'ZCODE' '10' '学生编号',
                                '2' 'ZNAME'  '20' '学生姓名',
                                '3' 'SEX' '3' '性别',
                                 '4' 'ZSCHOOL' '10' '学校',
                                 '5' 'WEIGH' '15' '体重',
                                 '6' 'ZUNIT' '5' '单位',
                                 '7' 'ICON' '4' '图标',
                                 '8' 'CHECK' '3' '选择'.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form form_build_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM form_build_alv .
  PERFORM form_build_layout.
  PERFORM form_build_fieldcat.
*  PERFORM form_sort.
*  PERFORM form_filter.
  PERFORM form_event.
  PERFORM form_show_alv.
ENDFORM.

" 排序
FORM form_sort.
  " 显按照SCHOOL升序,在按照SEX降序
  CLEAR gs_sort.
  gs_sort-spos = '1'.
  gs_sort-fieldname = 'ZSCHOOL'.
  gs_sort-up = 'X'.
  gs_sort-subtot = 'X'. "根据ZSCHOOL字段进行小计, 前提是已有字段进行合计
  APPEND gs_sort TO gt_sort.
  CLEAR gs_sort.
  gs_sort-spos = '2'.
  gs_sort-fieldname = 'SEX'.
  gs_sort-down = 'X'.
  APPEND gs_sort TO gt_sort.
ENDFORM.

" 筛选
FORM form_filter.
  CLEAR gs_filter.
  gs_filter-fieldname = 'SEX'.
  gs_filter-sign0 = 'E'.
  gs_filter-optio = 'EQ'.
  gs_filter-valuf = ''.
  APPEND gs_filter TO gt_filter.
ENDFORM.

" 事件
FORM form_event.
  CLEAR gs_event.
  gs_event-name = 'PF_STATUS_SET'.
  gs_event-form = 'FORM_SET_STATUS'.
  APPEND gs_event TO gt_event.

  CLEAR gs_event.
  gs_event-name = 'USER_COMMAND'.
  gs_event-form = 'FORM_USER_COMMAND'.
  APPEND gs_event TO gt_event.

  CLEAR gs_event.
  gs_event-name = 'TOP_OF_PAGE'.
  gs_event-form = 'FORM_TOP_OF_PAGE'.
  APPEND gs_event TO gt_event.

ENDFORM.



FORM form_set_status  USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'STAUTS1' EXCLUDING rt_extab.
ENDFORM.


FORM form_user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield.
  CASE r_ucomm.
    WHEN 'SMARFORM'.
      MESSAGE i002(zlc_me/ossage) WITH '点击了下载'.
    WHEN '&IC1'. "单击功能码(可以通过打断点获取), 设置过热点才可单击
      " 单击和双击公用一个功能码
      CASE rs_selfield-fieldname.
        WHEN 'ZCODE'. " 单击或双击
          SET PARAMETER ID 'LIF' FIELD rs_selfield-value.
          CALL TRANSACTION 'FK03'.
        WHEN 'WEIGH'." 单击或双击
          MESSAGE s003(zlc_message) WITH '点击的内容' rs_selfield-value.
        WHEN OTHERS.
          " 双击跳转到学校alv
          READ TABLE gt_student INTO gs_student INDEX rs_selfield-tabindex. "rs_selfield-tabindex 点击的第几行
          PERFORM form_student_alv USING gs_student.
      ENDCASE.
    WHEN OTHERS.
  ENDCASE.
ENDFORM.


FORM form_fieldcat USING col fieldname optlen text_m.
  CLEAR gs_fieldcat.
  gs_fieldcat-col_pos = col.
  gs_fieldcat-fieldname = fieldname.
  gs_fieldcat-outputlen = optlen.
  gs_fieldcat-seltext_m = text_m.
  CASE fieldname.
    WHEN 'ZCODE'.
      gs_fieldcat-key = 'X'." 设置为关键列
    WHEN 'ICON'.
      gs_fieldcat-icon = 'X'." 以图标显示(只要设置了图标, 不添加这一行也会显示图标)
    WHEN 'CHECK'.
      gs_fieldcat-checkbox = 'X'." 以复选框显示
      "gs_fieldcat-edit = 'X'.
    WHEN 'WEIGH'.
      gs_fieldcat-do_sum = 'X'." 对字段进行汇总
      gs_fieldcat-hotspot = 'X'." 设置热点
      "gs_fieldcat-quantity = 'KG'." 直接指明的固定单位
      " 如果数据中,单位一致,比如有的是kg有的是g,则需要添加该字段
      "货币也有同样的字段 cfieldname
      gs_fieldcat-qfieldname = 'ZUNIT'."内表中标明当前数值的单位字段
      " 以列为单位设置颜色
      "gs_fieldcat-emphasize = 'C511'.
    WHEN OTHERS.
  ENDCASE.
  APPEND gs_fieldcat TO gt_fieldcat.
ENDFORM.

FORM form_build_layout.
  gs_layout-colwidth_optimize = 'X'." 优化列宽
  gs_layout-zebra = 'X'." 斑马纹输出
  " 在 fieldcat中设置过key的字段都会设置热点
  gs_layout-key_hotspot = 'X'." 设置热点
  gs_layout-box_fieldname = 'BOX'."内表中的字段名称, 定义为当前行的选择按钮
  gs_layout-detail_initial_lines = 'X'." 是否显示值为空的字段
  gs_layout-window_titlebar = '窗体描述'.
  gs_layout-detail_titlebar = '对话框描述'.
  " 退出时是否弹出确认对话框
  gs_layout-confirmation_prompt = 'X'.

  " 以行为单位设置颜色 字段名
  "gs_layout-info_fieldname = 'LINECOLOR'.

  " 以单元格为单色设置颜色
    gs_layout-coltab_fieldname = 'TABCOLOR'.
ENDFORM.

FORM form_top_of_page.
  " 不论添加内标的顺序,展示的时候从上到下的顺序时 H S A
  " 内容可以重复添加
  DATA: lt_header TYPE slis_t_listheader,
        ls_header TYPE slis_listheader.
  ls_header-typ = 'H'.
  ls_header-info = '表头描述文本'.
  APPEND ls_header TO lt_header.

  CLEAR ls_header.
  ls_header-typ = 'S'.
  ls_header-key = '字段名称或描述'.
  ls_header-info = '字段值'.
  APPEND ls_header TO lt_header.

  CLEAR ls_header.
  ls_header-typ = 'A'.
  ls_header-info = '结尾斜体'.
  APPEND ls_header TO lt_header.

  CLEAR ls_header.
  ls_header-typ = 'S'.
  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             = 'ZLC_LOGO'
*     I_END_OF_LIST_GRID =
*     I_ALV_FORM         =
    .
ENDFORM.

FORM form_html_top_of_page USING pr_document TYPE REF TO cl_dd_document.
  DATA lv_datum TYPE sdydo_text_element.
  CALL METHOD pr_document->add_text
    EXPORTING
      text      = '学生信息表'
      sap_style = cl_dd_document=>table_heading.
  CALL METHOD pr_document->new_line. "新行
  CALL METHOD pr_document->add_text
    EXPORTING
      text         = '日期'
      sap_fontsize = cl_dd_document=>medium.
  CALL METHOD pr_document->add_gap " 添加间隔
    EXPORTING
      width = 3.
  WRITE sy-datum TO lv_datum USING EDIT MASK '__年__月__日'.
  CALL METHOD pr_document->add_text
    EXPORTING
      text         = lv_datum
      sap_fontsize = cl_dd_document=>medium.
  CALL METHOD pr_document->new_line
    EXPORTING
      repeat = 1.
  CALL METHOD pr_document->add_text
    EXPORTING
      text         = '链接'
      sap_fontsize = cl_dd_document=>medium.
  CALL METHOD pr_document->add_gap
    EXPORTING
      width = 5.
  CALL METHOD pr_document->add_link
    EXPORTING
      text = '百度'
      url  = 'http://www.baidu.com'.

ENDFORM.


FORM form_student_alv USING gs_stu TYPE gty_student.

  DATA gt_school TYPE TABLE OF zschool_hq_03.
  SELECT * FROM zschool_hq_03 INTO CORRESPONDING FIELDS OF TABLE gt_school WHERE zschool = gs_stu-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 = 'ZSCHOOL_HQ_03'
*     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         = gt_school
    EXCEPTIONS
      program_error    = 1
      OTHERS           = 2.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM.
ALV9.PNG alv1.PNG alv2.PNG alv3.PNG ALV4.PNG ALV5.PNG alv6.PNG alv7.PNG alv8.PNG
上一篇 下一篇

猜你喜欢

热点阅读