SAP ALV合并单元格示例(合并单元格为表头)

前言

  • 实现参考Enno Wulff的文章(德文):Zellen verbinden
  • 在原有基础上新增了部分功能(支持输入合并单元格的显示值)

效果

1

代码

  • 主程序

    *&---------------------------------------------------------------------*
    * TABLES 申明表类型工作区/Work area for declaring table object types
    *&---------------------------------------------------------------------*
    
    
    *&---------------------------------------------------------------------*
    * TYPE-POOL 引入类型池/Introduce type pool
    *&---------------------------------------------------------------------*
    
    
    *&---------------------------------------------------------------------*
    * TYPES 定义数据类型/defines a standalone data type
    *&---------------------------------------------------------------------*
    TYPES: BEGIN OF t_check_styles,
             matnr TYPE mara-matnr,
             ersda  TYPE mara-ersda,
             ernam  TYPE mara-ernam,
             laeda  TYPE mara-laeda,
             aenam  TYPE mara-aenam,
             vpsta  TYPE mara-vpsta,
             pstat  TYPE mara-pstat,
             lvorm  TYPE mara-lvorm,
             mtart  TYPE mara-mtart,
             mbrsh  TYPE mara-mbrsh,
             matkl  TYPE mara-matkl,
             bismt  TYPE mara-bismt,
    END OF t_check_styles.
    
    *&---------------------------------------------------------------------*
    * CONSTANTS 申明常量/declares a constant data object
    *&---------------------------------------------------------------------*
    
    
    *&---------------------------------------------------------------------*
    * DATA 申明全局变量/declares a variable of any data type
    * Declaration type:var, ref, struc, comp, itab, and range_tab
    *&---------------------------------------------------------------------*
    
    INCLUDE <cl_alv_control>.
    INCLUDE <icon>.
    
    DATA ok_code TYPE sy-ucomm.
    DATA gt_main TYPE TABLE OF t_check_styles.
    
    FIELD-SYMBOLS <fs_styles>        TYPE t_check_styles.
    DATA : lt_fieldcatalog  TYPE lvc_t_fcat.
    
    FIELD-SYMBOLS  <fs_cat> TYPE lvc_s_fcat.
    
    CLASS zcl_gui_alv_grid DEFINITION DEFERRED .
    DATA it_col_merge        TYPE lvc_t_co01.
    DATA wa_col_merge        TYPE lvc_s_co01.
    DATA: g_custom_container TYPE REF TO cl_gui_custom_container.
    DATA  g_alv_grid         TYPE REF TO zcl_gui_alv_grid.
    CLASS cl_gui_cfw DEFINITION LOAD.
    
    DATA: x_save,                     "for Parameter I_SAVE
          gs_variant TYPE disvariant. "for parameter IS_VARIANT
    DATA gs_layout TYPE lvc_s_layo.   " Layout
    DATA wa_style  TYPE lvc_s_styl.
    
    *&---------------------------------------------------------------------*
    * DEFINE 定义全局宏/Define global macro
    *&---------------------------------------------------------------------*
    
    
    *&---------------------------------------------------------------------*
    * CLASS DEFINITION 定义类/Definition class
    *&---------------------------------------------------------------------*
    CLASS zcl_gui_alv_grid DEFINITION INHERITING FROM cl_gui_alv_grid.
    
      "Implement CL GUI ALV GRID method
      PUBLIC SECTION.
        "Horizontal merge method
        METHODS z_set_merge_horiz
          IMPORTING
            row           TYPE i
            value         TYPE lvc_value
          CHANGING
            tab_col_merge TYPE lvc_t_co01.
        "Vertical merge method
        METHODS z_set_merge_vert
          IMPORTING
            row           TYPE i
            value         TYPE lvc_value
          CHANGING
            tab_col_merge TYPE lvc_t_co01.
    
        METHODS z_set_header_value
          IMPORTING
            row TYPE i
            col TYPE i
            value TYPE lvc_value.
    
        "Change output to CL_GUI_ALV_GRID display method
        METHODS z_display.
        "Sets the cell style method
        METHODS z_set_cell_style
          IMPORTING
            row    TYPE i OPTIONAL
            col    TYPE i OPTIONAL
            style  TYPE lvc_style
            style2 TYPE lvc_style OPTIONAL.
        "Set fixed columns/rows method
        METHODS z_set_fixed_col_row
          IMPORTING
            col TYPE i
            row TYPE i.
        "Initialize cell style method
        METHODS z_init_cell_styles.
    ENDCLASS.                    "ZCL_GUI_ALV_GRID DEFINITION
    
    *&---------------------------------------------------------------------*
    * CLASS IMPLEMENTATION 实现类/Implementation class
    *&---------------------------------------------------------------------*
    CLASS zcl_gui_alv_grid IMPLEMENTATION.
      METHOD z_set_merge_horiz.
    * ROW - row whose columns are to be merged
    * tab_col_merge - Columns to be merged
        FIELD-SYMBOLS <fs_cols> TYPE lvc_s_co01.
        FIELD-SYMBOLS <fs_data> TYPE lvc_s_data.
        DATA outputlen TYPE i.
    
        SORT tab_col_merge.
    * Columns to merge
        LOOP AT tab_col_merge ASSIGNING <fs_cols>.
    * data verification
          IF <fs_cols>-col_id    LE 0.                CONTINUE. ENDIF.
          IF <fs_cols>-outputlen LE <fs_cols>-col_id. CONTINUE. ENDIF.
          outputlen = <fs_cols>-outputlen - <fs_cols>-col_id.
          LOOP AT mt_data ASSIGNING <fs_data>
          WHERE row_pos = row  AND
          ( col_pos BETWEEN <fs_cols>-col_id AND
          <fs_cols>-outputlen ).
    * Set how far to merge From column in length
    * starting with the 1st column
            IF <fs_data>-col_pos = <fs_cols>-col_id.
              <fs_data>-mergehoriz = outputlen.
    * with all others who belong together
    * the value has to go out because it comes from the 1st column
    * and the merge indicator must also go!
              <fs_data>-value = value.
            ELSE.
              CLEAR <fs_data>-mergehoriz.
              CLEAR <fs_data>-value.
            ENDIF.
          ENDLOOP.
        ENDLOOP.
      ENDMETHOD.                    "Z_SET_MERGE_HORIZ
    
      METHOD z_set_merge_vert.
    * ROW - row whose columns are to be merged
    * tab_col_merge - Columns to be merged
        FIELD-SYMBOLS <fs_cols> TYPE lvc_s_co01.
        FIELD-SYMBOLS <fs_data> TYPE lvc_s_data.
        DATA outputlen TYPE i.
    
        SORT tab_col_merge.
    * Columns to merge
        LOOP AT tab_col_merge ASSIGNING <fs_cols>.
    * data verification
          IF <fs_cols>-col_id    LE 0.                CONTINUE. ENDIF.
          IF <fs_cols>-outputlen LE <fs_cols>-col_id. CONTINUE. ENDIF.
          outputlen = <fs_cols>-outputlen - <fs_cols>-col_id.
          LOOP AT mt_data ASSIGNING 
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值