ALV合并单元格

news2024/11/25 6:58:14

1、文章说明

 在开发一些报表时,需要显示双层的标题,或者合并单元格的数据,归根结底就是要实现类似EXCEL合并单元格的需求。如图所示

网上的资料,很多根据国外某大神的方法实现:https://tricktresor.de/blog/zellen-verbinden/

本文章在测试该方法时,发现了一些问题,并根据个人实现习惯,加以优化和修改:

优化问题:

1、优化源代码只能对第1列进行垂直合并。

2、解决源代码垂直合并中,将导致下一列字段内容被清空。

本文章通过不画CONTAINER的OOALV方式实现ALV报表,虽然解决了一些BUG,但实现方法仍有很大的优化空间,读者可动手持续优化。

2、实现过程

首先创建9000屏幕

程序中根据超类,创建新的类

定义ALV对象

在ALV中预留要显示标题的空行

并去掉fieldcat自动带出来的列名

调用ALV显示方法后,开始合并单元格

垂直合并,outputlen表示向下合并几行(包含本行)

水平合并,outputlen表示向右合并到第几列

设置对应单元格的名称

3、源代码参考

"--------------------@斌将军--------------------
REPORT ybintest018.
*----------------------------------------------------------------------*
*表声明
*----------------------------------------------------------------------*
TABLES:sscrfields."

*----------------------------------------------------------------------*
*类型池声明
*----------------------------------------------------------------------*
TYPE-POOLS:slis.

INCLUDE <cl_alv_control>.
*----------------------------------------------------------------------*
* 类型定义
*----------------------------------------------------------------------*
TYPES:BEGIN OF ty_alv,
        xm    TYPE char20,
        hsl01 TYPE acdoca-hsl,
        hsl02 TYPE acdoca-hsl,
        hsl03 TYPE acdoca-hsl,
        hsl04 TYPE acdoca-hsl,
        hsl05 TYPE acdoca-hsl,
        hsl06 TYPE acdoca-hsl,
        hsl07 TYPE acdoca-hsl,
        hsl08 TYPE acdoca-hsl,
        hsl09 TYPE acdoca-hsl,
        hsl10 TYPE acdoca-hsl,
        hsl11 TYPE acdoca-hsl,
        hsl12 TYPE acdoca-hsl,
        hz    TYPE char20,
      END OF ty_alv.

*----------------------------------------------------------------------*
* 声明内表和工作区
*----------------------------------------------------------------------*
DATA:gt_alv TYPE TABLE OF ty_alv,
     gs_alv TYPE ty_alv.

FIELD-SYMBOLS:<fs_gs_alv> TYPE ty_alv.

*----------------------------------------------------------------------*
*       ALV层级关系定义
*----------------------------------------------------------------------*

CLASS zcl_gui_alv_grid DEFINITION DEFERRED.

*创建ALV屏幕
DATA:g_grid_9000      TYPE REF TO zcl_gui_alv_grid, "ALV容器的实例
     g_container_9000 TYPE REF TO cl_gui_docking_container, "ALV容器 不用画屏幕容器
     gs_variant_9000  TYPE disvariant,
     gs_style         TYPE lvc_s_styl,
     gt_fieldcat_9000 TYPE lvc_t_fcat,
     gs_fieldcat      TYPE lvc_s_fcat,
     gs_layout_9000   TYPE lvc_s_layo.  "ALV 控制: 布局结构

DATA:r_ucomm   LIKE sy-ucomm,
     ok_code   TYPE sy-ucomm,
     save_code TYPE sy-ucomm.

*&---------------------------------------------------------------------*
* CLASS DEFINITION 定义类/Definition class
*&---------------------------------------------------------------------*
CLASS zcl_gui_alv_grid DEFINITION INHERITING FROM cl_gui_alv_grid.

  PUBLIC SECTION.
    "水平合并
    METHODS z_set_merge_horiz
      IMPORTING
        row           TYPE i
      CHANGING
        tab_col_merge TYPE lvc_t_co01.

    "垂直合并
    METHODS z_set_merge_vert
      IMPORTING
        row           TYPE i
      CHANGING
        tab_col_merge TYPE lvc_t_co01.

    "标题文本
    METHODS z_set_title_value
      IMPORTING
        row   TYPE i
        col   TYPE i
        value TYPE lvc_value.

    "清空单元格样式
    METHODS z_init_cell_styles.

    "单元格样式
    METHODS z_set_cell_style
      IMPORTING
        row    TYPE i OPTIONAL
        col    TYPE i OPTIONAL
        style  TYPE lvc_style
        style2 TYPE lvc_style OPTIONAL.

    "冻结行列
    METHODS z_set_fixed_col_row
      IMPORTING
        row TYPE i
        col TYPE i.

    "显示
    METHODS z_display.
ENDCLASS.                    "ZCL_GUI_ALV_GRID DEFINITION

*&---------------------------------------------------------------------*
* CLASS IMPLEMENTATION 实现类/Implementation class
*&---------------------------------------------------------------------*
CLASS zcl_gui_alv_grid IMPLEMENTATION.

  "水平合并
  METHOD z_set_merge_horiz.

* ROW - Zeile deren Spalten zusammengef�hrt werden sollen
* tab_col_merge - Spalten, die zusammengef�hrt werden sollen
    FIELD-SYMBOLS <fs_cols> TYPE lvc_s_co01.
    FIELD-SYMBOLS <fs_data> TYPE lvc_s_data.
    DATA outputlen TYPE i.

    SORT tab_col_merge.
* Die Spalten, die zusammengef�hrt werden sollen
    LOOP AT tab_col_merge ASSIGNING <fs_cols>.
* ein paar Pr�fungen
      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 ).
* Setze wie weit soll gemerged werden Von Spalte in L�nge
* und zwar wird bei der 1 Spalte angefangen
        IF <fs_data>-col_pos = <fs_cols>-col_id.
          <fs_data>-mergehoriz = outputlen.
* bei allen anderen, die zusammangeh�ren
* muss der Wert raus, da er aus der 1. Spalte kommt
* und das mergekennzeichen muss auch weg !
        ELSE.
          CLEAR <fs_data>-mergehoriz.
          CLEAR <fs_data>-value.
        ENDIF.
      ENDLOOP.

    ENDLOOP.

  ENDMETHOD.

  "垂直合并
  METHOD z_set_merge_vert.

* ROW - Zeile deren Spalten zusammengef�hrt werden sollen
* tab_col_merge - Spalten, die zusammengef�hrt werden sollen
    FIELD-SYMBOLS <fs_cols> TYPE lvc_s_co01.
    FIELD-SYMBOLS <fs_data> TYPE lvc_s_data.
    DATA:outputlen  TYPE i,
         lv_row_end TYPE i.

    SORT tab_col_merge.
* Die Spalten, die zusammengef�hrt werden sollen
    LOOP AT tab_col_merge ASSIGNING <fs_cols>.
* ein paar Pr�fungen
      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.
      outputlen = <fs_cols>-outputlen - 1.
      lv_row_end = row + outputlen.
      LOOP AT mt_data ASSIGNING <fs_data>
      WHERE ( row_pos BETWEEN row AND lv_row_end )
        AND col_pos = <fs_cols>-col_id.
*      ( col_pos BETWEEN <fs_cols>-col_id AND
*      <fs_cols>-outputlen ).


* Setze wie weit soll gemerged werden Von Spalte in L�nge
* und zwar wird bei der 1 Spalte angefangen
*        IF <fs_data>-col_pos = <fs_cols>-col_id.
        IF <fs_data>-row_pos = row.
          <fs_data>-mergevert = outputlen.
* bei allen anderen, die zusammangeh�ren
* muss der Wert raus, da er aus der 1. Spalte kommt
* und das mergekennzeichen muss auch weg !
        ELSE.
          CLEAR <fs_data>-mergevert.
          CLEAR <fs_data>-value.
        ENDIF.
      ENDLOOP.

    ENDLOOP.

  ENDMETHOD.

  "标题文本
  METHOD z_set_title_value.
    FIELD-SYMBOLS <fs_data> TYPE lvc_s_data.

    LOOP AT mt_data ASSIGNING <fs_data>
    WHERE row_pos = row  AND col_pos = col.
      <fs_data>-value = value.
    ENDLOOP.
  ENDMETHOD.                    "z_set_title_value

  "清空单元格样式
  METHOD z_init_cell_styles.
    FIELD-SYMBOLS <fs_data> TYPE lvc_s_data.
* Nur Spalte setze komplette Spalte
    LOOP AT mt_data ASSIGNING <fs_data>.
      <fs_data>-style = 0.
    ENDLOOP.
  ENDMETHOD.

  "单元格样式
  METHOD z_set_cell_style.

    FIELD-SYMBOLS <fs_data> TYPE lvc_s_data.
    IF row IS INITIAL.
      IF col IS INITIAL.
* Beides leer -> nichts zu tun.
        EXIT.
      ELSE.
* Nur Spalte setze komplette Spalte
        LOOP AT mt_data ASSIGNING <fs_data>
        WHERE col_pos = col.
          <fs_data>-style  = <fs_data>-style + style.
          <fs_data>-style2 = <fs_data>-style2 + style2.
        ENDLOOP.
      ENDIF.
    ELSE.
      IF col IS INITIAL.
* Nur Zeile eingegeben -> komplette Zeile setzen
        LOOP AT mt_data ASSIGNING <fs_data>
        WHERE row_pos = row.
          <fs_data>-style  = <fs_data>-style + style.
          <fs_data>-style2 = <fs_data>-style2 + style2.
        ENDLOOP.
      ELSE.
        READ TABLE mt_data ASSIGNING <fs_data>
        WITH KEY row_pos = row
        col_pos = col.
        IF sy-subrc EQ 0.
          <fs_data>-style  = <fs_data>-style + style.
          <fs_data>-style2 = <fs_data>-style2 + style2.
        ELSE.
          EXIT.
        ENDIF.
      ENDIF.
    ENDIF.

  ENDMETHOD.

  "冻结行列
  METHOD z_set_fixed_col_row.

    me->set_fixed_cols( col ).
    me->set_fixed_rows( row ).
  ENDMETHOD.

  "显示
  METHOD z_display.

    DATA lv_stable TYPE lvc_s_stbl.
    DATA lv_soft   TYPE c.

**** Prepare refresh
*  lv_stable-row = 'X'.
*  lv_stable-col = 'X'.
*  lv_soft       = 'X'.
*
**** Refresh table because Z_SET_CELL_STYLE adds style-values
**** Refresh initializes mt_data
*  CALL METHOD refresh_table_display
*    EXPORTING
*      is_stable      = lv_stable
*      i_soft_refresh = lv_soft
*    EXCEPTIONS
*      OTHERS         = 1.

* Jetzt noch  �bertragen der ge�nderten Daten
    CALL METHOD me->set_data_table
      CHANGING
        data_table = mt_data[].

    CALL METHOD set_auto_redraw
      EXPORTING
        enable = 1.

  ENDMETHOD.

ENDCLASS.                    "ZCL_GUI_ALV_GRID IMPLEMENTATION
*&---------------------------------------------------------------------*
*&  START-OF-SELECTION:程序运行所处理的代码
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  "获取取数
  PERFORM frm_get_data.

  CALL SCREEN 9000.

*&---------------------------------------------------------------------*
*&      Form  FRM_GET_DATA
*&---------------------------------------------------------------------*
*       text 获取数据
*----------------------------------------------------------------------*
FORM frm_get_data.

  APPEND INITIAL LINE TO gt_alv.
  APPEND INITIAL LINE TO gt_alv.

  "第3行
  CLEAR gs_alv.
  gs_alv-xm = '成本'.
  gs_alv-hsl01 = '10'.
  gs_alv-hsl02 = '20'.
  gs_alv-hsl03 = '30'.
  gs_alv-hsl04 = '40'.
  gs_alv-hsl05 = '50'.
  gs_alv-hsl06 = '60'.
  gs_alv-hsl07 = '70'.
  gs_alv-hsl08 = '80'.
  gs_alv-hsl09 = '90'.
  gs_alv-hsl10 = '100'.
  gs_alv-hsl11 = '110'.
  gs_alv-hsl12 = '120'.
  gs_alv-hz = '780'.
  APPEND gs_alv TO gt_alv.

  "第4行
  CLEAR gs_alv.
  gs_alv-xm = '利润'.
  gs_alv-hsl01 = '110'.
  gs_alv-hsl02 = '120'.
  gs_alv-hsl03 = '130'.
  gs_alv-hsl04 = '140'.
  gs_alv-hsl05 = '150'.
  gs_alv-hsl06 = '160'.
  gs_alv-hsl07 = '170'.
  gs_alv-hsl08 = '180'.
  gs_alv-hsl09 = '190'.
  gs_alv-hsl10 = '1100'.
  gs_alv-hsl11 = '1110'.
  gs_alv-hsl12 = '1120'.
  gs_alv-hz = '4680'.
  APPEND gs_alv TO gt_alv.
ENDFORM. " FRM_GET_DATA
*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_LAYOUT_9000
*&---------------------------------------------------------------------*
FORM frm_alv_layout_9000.
  CLEAR gs_layout_9000.
  gs_layout_9000-sel_mode   = 'A'.     "选择行模式
  gs_layout_9000-cwidth_opt = 'A'.     "优化列宽设置
  gs_layout_9000-zebra      = 'X'.     "设置斑马线
  gs_layout_9000-no_toolbar = 'X'.
  gs_layout_9000-no_headers = 'X'."不显示列名
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_FIELDCAT_9000
*&---------------------------------------------------------------------*
FORM frm_alv_fieldcat_9000.
  DATA:lv_times     TYPE i,
       lv_count     TYPE i,
       lv_fieldname TYPE lvc_fname,
       lv_coltext   TYPE lvc_txtcol.

  REFRESH:gt_fieldcat_9000.
  DEFINE  init_fill_fcat.
    CLEAR gs_fieldcat.
    gs_fieldcat-fieldname  = &1.
    gs_fieldcat-coltext    = &2.
    gs_fieldcat-scrtext_l  = &2.
    gs_fieldcat-scrtext_m  = &2.
    gs_fieldcat-scrtext_s  = &2.
    gs_fieldcat-reptext    = &2.
    gs_fieldcat-col_pos  = &3.
*    gs_fieldcat-do_sum  = &3.
*    gs_fieldcat-hotspot = &4.
    gs_fieldcat-icon   = &4.
    gs_fieldcat-hotspot = &5.
        gs_fieldcat-no_zero = &6.
    gs_fieldcat-edit = &7.
    gs_fieldcat-datatype  = &8.
    gs_fieldcat-inttype  = &9.
    APPEND gs_fieldcat TO gt_fieldcat_9000.
  END-OF-DEFINITION.

  init_fill_fcat 'XM' '项目'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HSL01' 'HSL01'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HSL02' 'HSL02'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HSL03' 'HSL03'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HSL04' 'HSL04'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HSL05' 'HSL05'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HSL06' 'HSL06'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HSL07' 'HSL07'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HSL08' 'HSL08'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HSL09' 'HSL09'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HSL10' 'HSL10'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HSL11' 'HSL11'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HSL12' 'HSL12'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HZ' '汇总'  '' '' '' '' '' '' ''.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_CREATE_CONTAINER_9000
*&      创建容器
*&---------------------------------------------------------------------*
FORM frm_create_container_9000.

  CREATE OBJECT g_container_9000
    EXPORTING
      repid                       = sy-repid
      dynnr                       = '9000'
*     side                        = cl_gui_docking_container=>dock_at_right      ”ALV贴屏幕右边,从屏幕右边开始算宽度
      side                        = cl_gui_docking_container=>dock_at_top       "ALV贴屏幕左边,从左边算屏幕宽度,
      extension                   = 1000                                          "屏幕宽度
*     ratio                       = 95  "屏幕比例 小于5大于95会报cntl_error异常
      style                       = cl_gui_control=>ws_child                     "可选参数,设置ALV是否可用手动拖动大小
    EXCEPTIONS
      cntl_error                  = 1
      cntl_system_error           = 2
      create_error                = 3
      lifetime_error              = 4
      lifetime_dynpro_dynpro_link = 5
      OTHERS                      = 6.

  IF sy-subrc <> 0.
    MESSAGE s001(00) WITH '屏幕初始化失败'.
    LEAVE LIST-PROCESSING.
  ENDIF.

*  创建容器实例
  CREATE OBJECT g_grid_9000
    EXPORTING
      i_parent          = g_container_9000
    EXCEPTIONS
      error_cntl_create = 1
      error_cntl_init   = 2
      error_cntl_link   = 3
      error_dp_create   = 4
      OTHERS            = 5.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_DISPLAY_9000
*&---------------------------------------------------------------------*
FORM frm_alv_display_9000.

  CALL METHOD g_grid_9000->set_table_for_first_display
    EXPORTING
      is_variant                    = gs_variant_9000
*     i_save                        = 'A'
      is_layout                     = gs_layout_9000
*     it_toolbar_excluding          = gt_exclude_9000
    CHANGING
      it_fieldcatalog               = gt_fieldcat_9000  "
      it_outtab                     = gt_alv      "输出数据的内表
*     it_sort                       = gt_sort
*     it_filter                     = gt_filt
    EXCEPTIONS
      invalid_parameter_combination = 1
      program_error                 = 2
      too_many_lines                = 3
      OTHERS                        = 4.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  "合并单元格
  "垂直合并
  PERFORM frm_merge_vert.
  "水平合并
  PERFORM frm_merge_horiz.
  "设置标题
  PERFORM frm_title_value.
  "设置样式
  PERFORM frm_cell_style.
  "合并单元格后显示
  g_grid_9000->z_display( ).

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_MERGE_VERT  垂直合并
*&---------------------------------------------------------------------*
FORM frm_merge_vert.
  DATA:lt_col_merge TYPE lvc_t_co01,
       ls_col_merge TYPE lvc_s_co01.


  "纵向合并
  REFRESH:lt_col_merge.
  CLEAR:ls_col_merge.
  ls_col_merge-col_id    = 1.
  ls_col_merge-outputlen = 2."向下合并多少行(含本行)
  APPEND ls_col_merge TO lt_col_merge.

  CLEAR:ls_col_merge.
  ls_col_merge-col_id    = 14.
  ls_col_merge-outputlen = 2."向下合并多少行(含本行)
  APPEND ls_col_merge TO lt_col_merge.

  "第1行的纵向合并单元格
  CALL METHOD g_grid_9000->z_set_merge_vert "纵向合并
    EXPORTING
      row           = 1
    CHANGING
      tab_col_merge = lt_col_merge.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_MERGE_HORIZ 水平合并
*&---------------------------------------------------------------------*
FORM frm_merge_horiz.
  DATA:lt_col_merge TYPE lvc_t_co01,
       ls_col_merge TYPE lvc_s_co01.

  "水平合并
  REFRESH:lt_col_merge.
  CLEAR:ls_col_merge.
  ls_col_merge-col_id    = 2.
  ls_col_merge-outputlen = 4."水平合并到第几列
  APPEND ls_col_merge TO lt_col_merge.

  CLEAR:ls_col_merge.
  ls_col_merge-col_id    = 5.
  ls_col_merge-outputlen = 7.
  APPEND ls_col_merge TO lt_col_merge.

  CLEAR:ls_col_merge.
  ls_col_merge-col_id    = 8.
  ls_col_merge-outputlen = 10.
  APPEND ls_col_merge TO lt_col_merge.

  CLEAR:ls_col_merge.
  ls_col_merge-col_id    = 11.
  ls_col_merge-outputlen = 13.
  APPEND ls_col_merge TO lt_col_merge.

  "第1行的水平合并单元格
  CALL METHOD g_grid_9000->z_set_merge_horiz "水平合并
    EXPORTING
      row           = 1
    CHANGING
      tab_col_merge = lt_col_merge.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_CELL_STYLE 设置样式
*&---------------------------------------------------------------------*
FORM frm_cell_style.
  "设置值效果:加粗 居中 主键颜色
  gs_style-style = alv_style_font_bold
  + alv_style_align_center_center
  + alv_style_color_heading.

  "第1行 第1列
  CALL METHOD g_grid_9000->z_set_cell_style
    EXPORTING
      row   = 1
      col   = 1
      style = gs_style-style.

  CALL METHOD g_grid_9000->z_set_cell_style
    EXPORTING
      row   = 1
      col   = 2
      style = gs_style-style.

  CALL METHOD g_grid_9000->z_set_cell_style
    EXPORTING
      row   = 1
      col   = 5
      style = gs_style-style.

  CALL METHOD g_grid_9000->z_set_cell_style
    EXPORTING
      row   = 1
      col   = 8
      style = gs_style-style.

  CALL METHOD g_grid_9000->z_set_cell_style
    EXPORTING
      row   = 1
      col   = 11
      style = gs_style-style.

  CALL METHOD g_grid_9000->z_set_cell_style
    EXPORTING
      row   = 1
      col   = 14
      style = gs_style-style.

  "冻结行和列
  g_grid_9000->z_set_fixed_col_row(
  EXPORTING col = 1
    row = 2 ).
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_TITLE_VALUE 设置标题
*&---------------------------------------------------------------------*
FORM frm_title_value.
  CALL METHOD g_grid_9000->z_set_title_value
    EXPORTING
      row   = 1
      col   = 1
      value = '项目'.

  CALL METHOD g_grid_9000->z_set_title_value
    EXPORTING
      row   = 1
      col   = 2
      value = '1季度'.

  CALL METHOD g_grid_9000->z_set_title_value
    EXPORTING
      row   = 1
      col   = 5
      value = '2季度'.

  CALL METHOD g_grid_9000->z_set_title_value
    EXPORTING
      row   = 1
      col   = 8
      value = '3季度'.

  CALL METHOD g_grid_9000->z_set_title_value
    EXPORTING
      row   = 1
      col   = 11
      value = '4季度'.

  CALL METHOD g_grid_9000->z_set_title_value
    EXPORTING
      row   = 1
      col   = 14
      value = '汇总'.

  DATA:lv_fname TYPE lvc_value,
       lv_index TYPE sy-index.
  DO 12 TIMES.
    lv_fname = sy-index && '月'.
    lv_index = sy-index + 1.
    CALL METHOD g_grid_9000->z_set_title_value
      EXPORTING
        row   = 2
        col   = lv_index
        value = lv_fname.
  ENDDO.
ENDFORM.


*&---------------------------------------------------------------------*
*&      Form  FRM_REFRESH_ALV_9000
*&---------------------------------------------------------------------*
FORM frm_refresh_alv.
  DATA: lt_celltab TYPE lvc_t_styl,
        ls_celltab TYPE lvc_s_styl,
        ls_stable  TYPE lvc_s_stbl.

  ls_stable-row = 'X'.  "固定行
  ls_stable-col = 'X'.  "固定列

  CHECK g_grid_9000 IS NOT INITIAL.

  CALL METHOD g_grid_9000->refresh_table_display
    EXPORTING
      is_stable = ls_stable
*     I_SOFT_REFRESH = 'X'
    EXCEPTIONS
      finished  = 1
      OTHERS    = 2.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  CALL METHOD cl_gui_cfw=>flush.
ENDFORM.
*&---------------------------------------------------------------------*
*&  屏幕流
*&---------------------------------------------------------------------*
MODULE status_9000 OUTPUT.

  SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDMODULE.

*&---------------------------------------------------------------------*
*&  屏幕流
*&---------------------------------------------------------------------*
MODULE display_alv_9000 OUTPUT.
  IF g_container_9000 IS INITIAL.
    PERFORM frm_create_container_9000.
    PERFORM frm_alv_fieldcat_9000.
    PERFORM frm_alv_layout_9000.
    PERFORM frm_alv_display_9000.
  ELSE.
    PERFORM frm_refresh_alv.
  ENDIF.
ENDMODULE.

*&---------------------------------------------------------------------*
*&  屏幕流
*&---------------------------------------------------------------------*
MODULE user_command_9000 INPUT.

  save_code = ok_code.
  CLEAR ok_code.
  CASE save_code.
    WHEN '&BACK'."设置功能键返回按钮单击事件
      LEAVE TO SCREEN 0.
    WHEN '&EXIT'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.
"--------------------@斌将军--------------------

4、结语

以上就是关于ALV合并单元格的介绍,希望对您有所帮助。

在总结过程中,也参考学习了以下文章:

http://t.csdnimg.cn/zAWea

定期更文,欢迎关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1588154.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript(四)-Web APIS

文章目录 日期对象实例化时间对象方法时间戳 节点操作DOM节点查找节点增加节点删除节点 M端事件JS插件Window对象BOM&#xff08;浏览器对象模型&#xff09;定时器-延时函数JS执行机制location对象navigator对象history对象 本地存储本地存储介绍本地存储分类localStoragesess…

Play Module Factory:Codigger系统上的高效Module开发工具

Play Module Factory&#xff0c;这款在Codigger系统上独树一帜的Play-Module开发工具&#xff0c;为广大的开发者们提供了一个全新的、高效的插件开发平台。它汇集了丰富的模板资源、基础库、API接口以及语言支持&#xff0c;这些功能强大的工具组合在一起&#xff0c;使得开发…

14亿美元!德国默克与AI生物科技公司合作;马斯克Neuralink首位脑机接口植入者用意念打游戏;黄仁勋在俄勒冈州立大学开讲

AI for Science 的新成果、新动态、新视角—— 日本第一 IT 公司富士通&#xff1a;生成式 AI 加速药物研发 马斯克&#xff1a;Neuralink 首位脑机接口植入者用「意念」打游戏 默克与 AI 生物科技公司 Caris 达成合作 AI 蛋白质设计服务提供商「天鹜科技」完成数千万元 Pre…

VE、希喂、PR猫咪主食冻干怎么样?测评品控最强、配方最好主食冻干!

我发现还是有不少铲屎官局限于“进口最高贵”&#xff0c;盲目的迷信进口产品。看到进口粮就盲买&#xff0c;甚至过分的贬低国产品牌&#xff0c;将国产粮贴上“不靠谱”“不合格”等标签。 最近&#xff0c;我针对主食冻干的国内、国际标准&#xff0c;相关规范文件&#xf…

C++资源重复释放问题

这不是自己释放了2次&#xff1b; 可能是类互相引用&#xff0c;有类似现象释放资源时引起&#xff1b;还不太了解&#xff1b; 类对象作为函数参数也会引起&#xff1b; 下面是一个简单示例&#xff1b; #include <iostream> #include <string.h> #include &l…

如何快速写一份简历

文章目录 如何快速写一份简历一些写简历的技巧 最近一段时间一直在忙简历相关的事情&#xff0c;起初是有一个其他行业的朋友问我&#xff0c;说这些简历我写了好久真难写&#xff0c;我说你可以借助AI&#xff0c;现在这种工具多了去了&#xff0c;为什么不借助呢&#xff1f;…

2024年 Mathorcup高校数学建模竞赛(B题)| 甲骨文识别 | 特征提取,图像分割解析,小鹿学长带队指引全代码文章与思路

我是鹿鹿学长&#xff0c;就读于上海交通大学&#xff0c;截至目前已经帮200人完成了建模与思路的构建的处理了&#xff5e; 本篇文章是鹿鹿学长经过深度思考&#xff0c;独辟蹊径&#xff0c;通过神经网络解决甲骨文识别问题。结合特征提取&#xff0c;图像分割等多元算法&…

Apabi Reader软件:打开ceb文件

Apabi Reader软件&#xff1a;打开ceb文件 软件下载软件安装 打开ceb文件参考 软件下载 下载官网-Apabi Reader软件 软件安装 打开ceb文件 ceb文件目录如下&#xff1a; 打开文件如下&#xff1a; 参考

从“黑箱”到“透明”:云里物里电子标签助力汽车总装数字化转型

“汽车总装”指“汽车产品&#xff08;包括整车及总成等&#xff09;的装配”&#xff0c;是把经检验合格的数以百计、或数以千计的各种零部件按照一定的技术要求组装成整车及发动机、变速器等总成的工艺过程&#xff0c;是汽车产品制造过程中最重要的工艺环节之一。 其中&…

社交网络与Web3:数字社交的下一阶段

随着信息技术的飞速发展&#xff0c;人们的社交方式也发生了巨大的变化。从最初的互联网聊天室到如今的社交网络平台&#xff0c;我们已经见证了数字社交的不断演变和发展。而随着区块链技术的兴起&#xff0c;Web3时代的到来将为数字社交带来全新的可能性和挑战。本文将探讨社…

.NET MAUI使用Visual Studio Android Emulator(安卓模拟器)运行

Android Emulator&#xff08;安卓模拟器&#xff09;运行&#xff1a; 安卓模拟器一直卡在不动&#xff1a; 在某些情况下&#xff0c;在“打开或关闭 Windows 功能”对话框中启用 Hyper-V 和 Windows 虚拟机监控程序平台后可能无法正确启用Hyper-V。 我就是开启Hyper-V才把安…

Python网络爬虫中JSON格式数据存储详解

目录 一、引言 二、JSON格式数据简介 三、Python中处理JSON数据 四、网络爬虫中获取JSON数据 五、存储JSON数据到文件 六、从文件中读取JSON数据 七、注意事项和常见问题 八、总结 一、引言 在网络爬虫的应用中&#xff0c;JSON格式数据以其轻量级、易读易写的…

Redis性能管理和集群的三种模式(二)

一、Redis集群模式 1.1 redis的定义 redis 集群 是一个提供高性能、高可用、数据分片、故障转移特性的分布式数据解决方案 1.2 redis的功能 数据分片&#xff1a;redis cluster 实现了数据自动分片&#xff0c;每个节点都会保存一份数据故障转移&#xff1a;若个某个节点发生故…

2024年第十四届 Mathorcup (B题)| 甲骨文智能识别 | 深度学习 计算机视觉 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 让我们来看看Mathorcup (B题&#xff09;&#xff01; CS团队…

基于springboot+vue的汽车租赁管理系统

背景介绍: 网络发展的越来越迅速&#xff0c;它深刻的影响着每一个人生活的各个方面。每一种新型事务的兴起都是为了使人们的生活更加方便。汽车租赁管理系统是一种低成本、更加高效的电子商务方式&#xff0c;它已慢慢的成为一种全新的管理模式。人们不再满足于在互联网上浏览…

自动化测试提速必备 - 并发编程

在自动化测试领域&#xff0c;多线程和多进程技术被广泛应用于提高测试的执行效率和性能。通过并发运行测试用例&#xff0c;可以显著缩短测试周期&#xff0c;特别是在面对大量测试用例或者需要在多个环境中进行测试时尤为重要。 在实际的自动化测试中&#xff0c;我们经常碰…

为什么选择成为程序员?

目录 兴趣和热爱高薪和就业机会持续学习和不断成长挑战和乐趣 兴趣和热爱 许多人选择成为程序员可能是热爱&#xff0c;对计算机&#xff0c;以及编程和科技产生了浓厚的兴趣&#xff0c;并且享受着解决每一个技术问题&#xff0c;构建应用程序和探索新技术所带来的乐趣。 谈到…

【多线程】 synchronized关键字 | 可重入锁 | 死锁 | volatile关键字 | 内存可见性问题 |waitnotify方法|

文章目录 synchronized和volatile关键字一、加锁互斥二、synchronized的使用1.修饰实例方法2.修饰类方法 三、可重入锁1.死锁关于死锁哲学家就餐问题如何避免死锁死锁成因的四个必要条件 四、volatile关键字1.保证内存可见性什么是内存可见性问题如何解决Java内存模型JMMvolati…

蓝牙技术在智能硬件中应用火热,你的蓝牙适配测试如何解决?

蓝牙技术在物联网中的应用非常广泛&#xff0c;可以为人们的生活和工作带来更多的便利和智能化体验&#xff0c;主要五大核心应用场景&#xff0c;具体如下&#xff1a; 1、智能家居 通过蓝牙连接智能家居设备&#xff0c;如智能灯泡、智能插座、智能恒温器等&#xff0c;可以…

【PyQt5】环境配置

PyQt5 环境配置 一、前言1.1 PyQt5介绍1.2 PyCharm集成Pyqt5 二、pyqt5安装三、PyQt5-tools工具包安装四、常用工具环境配置4.1、环境变量配置4。2、验证是否安装成功 五、pycharm中设置Qt工具&#xff08;Qt Designer、PyUIC、PyRcc&#xff09;5.1、配置Qt Designer5.2、配置…