ABAP ALV多行表头(合并列,合并单元格)

ABAP ALV多行表头(合并列,合并单元格)

参考原文:Zellen verbinden 新增功能

效果:效果

代码:

REPORT ZDEMO172516.
*&---------------------------------------------------------------------*
* 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 <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>-mergevert = 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>-mergevert.
          CLEAR <fs_data>-VALUE.
        ENDIF.
      ENDLOOP.
    ENDLOOP.
  ENDMETHOD.                    "Z_SET_MERGE_VERT

  METHOD z_set_header_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_header_value

  METHOD z_display.
    DATA lv_stable TYPE lvc_s_stbl.
    DATA lv_soft   TYPE C.

    CALL METHOD me->set_data_table
    CHANGING
      data_table = mt_data[].

    CALL METHOD set_auto_redraw
    EXPORTING
      enable = 1.
  ENDMETHOD.                    "Z_DISPLAY

  METHOD z_set_cell_style.
    FIELD-SYMBOLS <fs_data> TYPE lvc_s_data.
    IF row IS INITIAL.
      IF col IS INITIAL.
* Both empty -> nothing to do.
        EXIT.
      ELSE.
* Column only set complete column
        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.
* Enter line only -> set complete line
        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.                    "Z_SET_CELL_STYLE

  METHOD z_set_fixed_col_row.
    me->set_fixed_cols( col ).
    me->set_fixed_rows( row ).
  ENDMETHOD.                    "Z_SET_FIXED_COL_ROW

  METHOD z_init_cell_styles.
    FIELD-SYMBOLS <fs_data> TYPE lvc_s_data.
* init style
    LOOP AT mt_data ASSIGNING <fs_data>.
      <fs_data>-style = 0.
    ENDLOOP.
  ENDMETHOD.                    "Z_INIT_CELL_STYLES
ENDCLASS .                    "ZCL_GUI_ALV_GRID IMPLEMENTATION

*&---------------------------------------------------------------------*
* SELECTION-SCREEN 定义选择屏幕/Define selection screen
*&---------------------------------------------------------------------*


*&=====================================================================*
* PRE-EXECUTION EVENTS/程序执行前事件
*======================================================================*
INITIALIZATION.                     "初始化事件:运行事务代码后执行一次


AT SELECTION-SCREEN OUTPUT.                "PBO事件:屏幕输出前处理逻辑


AT SELECTION-SCREEN.    "PAI事件:屏幕值变化后处理逻辑,自动触发一次PBO


*AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_MATNR.    "自定义F4处理逻辑


*&=====================================================================*
* PROGRAM EXECUTION EVENTS/ 程序执行事件                               *
*======================================================================*
START-OF-SELECTION.                                           "数据处理
PERFORM frm_get_data.       "Get Data

END-OF-SELECTION.                                             "数据执行
IF gt_main[] IS NOT INITIAL.
  CALL SCREEN 0200.
ELSE.
  MESSAGE 'NO DATA' TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.

*&=====================================================================*
* DEFINE SUBROUTINE/定义子程序                                         *
*======================================================================*

FORM frm_get_data.
  "添加两个初始行用作Title行
  APPEND INITIAL LINE TO gt_main.
  APPEND INITIAL LINE TO gt_main.

  "新增需要显示的数据
  SELECT * FROM mara
  APPENDING CORRESPONDING FIELDS OF TABLE gt_main
  UP TO 30 ROWS.

ENDFORM.                    "FRM_GET_DATA
*&---------------------------------------------------------------------*
*&      Form  FRM_INIT_OBJECT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_init_object .
  IF g_custom_container  IS INITIAL.
    CREATE OBJECT g_custom_container
    EXPORTING
      container_name = 'CONTAINER'.

    CREATE OBJECT g_alv_grid
    EXPORTING
      i_parent = g_custom_container.
  ENDIF.
ENDFORM.                    "FRM_INIT_OBJECT
*&---------------------------------------------------------------------*
*&      Form  FRM_FILL_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_fill_layout .

  gs_layout-stylefname = 'CELL'.
  gs_layout-no_headers = 'X'.
  gs_layout-cwidth_opt = 'X'.
  gs_layout-no_toolbar = 'X'.


ENDFORM.                    "FRM_FILL_LAYOUT
*&---------------------------------------------------------------------*
*&      Form  FRM_FILL_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_fill_fieldcat .
  REFRESH lt_fieldcatalog.
  PERFORM frm_set_field USING 'MATNR' 'MARA' 'MATNR' '物料编码'.
  PERFORM frm_set_field USING 'ERSDA' 'MARA' 'ERSDA' '创建日期'.
  PERFORM frm_set_field USING 'ERNAM' 'MARA' 'ERNAM' '创建对象的人员名称'.
  PERFORM frm_set_field USING 'LAEDA' 'MARA' 'LAEDA' '上次更改的日期'.
  PERFORM frm_set_field USING 'AENAM' 'MARA' 'AENAM' '对象更改人员的名称 '.
  PERFORM frm_set_field USING 'VPSTA' 'MARA' 'VPSTA' '维护全部物料状态'.
  PERFORM frm_set_field USING 'PSTAT' 'MARA' 'PSTAT' '维护状态'.
  PERFORM frm_set_field USING 'LVORM' 'MARA' 'LVORM' '在客户级标记要删除的物料'.
  PERFORM frm_set_field USING 'MTART' 'MARA' 'MTART' '商品类型'.
  PERFORM frm_set_field USING 'MBRSH' 'MARA' 'MBRSH' '行业领域'.
  PERFORM frm_set_field USING 'MATKL' 'MARA' 'MATKL' '物料组'.
  PERFORM frm_set_field USING 'BISMT' 'MARA' 'BISMT' '旧商品编码'.
ENDFORM.                    "FRM_FILL_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_display_alv .
*
  CALL METHOD g_alv_grid->set_table_for_first_display
  EXPORTING
    is_variant      = gs_variant
    i_save          = x_save
    is_layout       = gs_layout
  CHANGING
    it_fieldcatalog = lt_fieldcatalog
    it_outtab       = gt_main.

ENDFORM.                    "FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*&      Form  SET_CELL_STYLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM set_merge_vert .
  "开始纵向合并单元格
*-----------------------第一列-----------------------*
  "合并1-2行
  CLEAR: wa_col_merge,it_col_merge.
  wa_col_merge-col_id    = 1.
  wa_col_merge-outputlen = 2.
  APPEND wa_col_merge TO it_col_merge.

  CALL METHOD g_alv_grid->z_set_merge_vert
  EXPORTING
    row           = 1
    VALUE         = '合并1-2行'
  CHANGING
    tab_col_merge = it_col_merge.

  "设置Style
  wa_style-style     = alv_style_font_bold
  + alv_style_align_center_center
  + alv_style_color_key.

  CALL METHOD g_alv_grid->z_set_cell_style
  EXPORTING
    row   = 1
    col   = 1
    style = wa_style-style.

ENDFORM.                    "SET_MERGE_VERT
*&---------------------------------------------------------------------*
*&      Form  SET_MERGE_HORIZ
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM set_merge_horiz .
  "开始横向合并单元格
*-----------------------合并第一行-----------------------*
  "合并4-8列
  CLEAR: wa_col_merge,it_col_merge.
  wa_col_merge-col_id    = 4.
  wa_col_merge-outputlen = 8.
  APPEND wa_col_merge TO it_col_merge.

  CALL METHOD g_alv_grid->z_set_merge_horiz
  EXPORTING
    row           = 1
    VALUE         = '横向4-8列'
  CHANGING
    tab_col_merge = it_col_merge.

  "合并10-12列
  CLEAR: wa_col_merge,it_col_merge.
  wa_col_merge-col_id    = 10.
  wa_col_merge-outputlen = 12.
  APPEND wa_col_merge TO it_col_merge.

  CALL METHOD g_alv_grid->z_set_merge_horiz
  EXPORTING
    row           = 1
    VALUE         = '横向10-12列'
  CHANGING
    tab_col_merge = it_col_merge.

  "设置Style
  wa_style-style     = alv_style_font_bold.

  CALL METHOD g_alv_grid->z_set_cell_style
  EXPORTING
    row   = 1
    col   = 3
    style = wa_style-style.

  CALL METHOD g_alv_grid->z_set_cell_style
  EXPORTING
    row   = 1
    col   = 4
    style = wa_style-style.

  CALL METHOD g_alv_grid->z_set_cell_style
  EXPORTING
    row   = 1
    col   = 9
    style = wa_style-style.

  CALL METHOD g_alv_grid->z_set_cell_style
  EXPORTING
    row   = 1
    col   = 10
    style = wa_style-style.

*-----------------------合并第二行-----------------------*
  "合并4-7列
  CLEAR: wa_col_merge,it_col_merge.
  wa_col_merge-col_id    = 4.
  wa_col_merge-outputlen = 7.
  APPEND wa_col_merge TO it_col_merge.

  CALL METHOD g_alv_grid->z_set_merge_horiz
  EXPORTING
    row           = 2
    VALUE         = '合并4-7列'
  CHANGING
    tab_col_merge = it_col_merge.

  "合并10-12列
  CLEAR: wa_col_merge,it_col_merge.
  wa_col_merge-col_id    = 10.
  wa_col_merge-outputlen = 12.
  APPEND wa_col_merge TO it_col_merge.

  CALL METHOD g_alv_grid->z_set_merge_horiz
  EXPORTING
    row           = 2
    VALUE         = '合并10-12列'
  CHANGING
    tab_col_merge = it_col_merge.

  "设置Style
  wa_style-style     = alv_style_color_group +
  alv_style_align_center_center.

  CALL METHOD g_alv_grid->z_set_cell_style
  EXPORTING
    col   = 3
    style = wa_style-style.

  wa_style-style     = alv_style_color_heading +
  alv_style_align_center_center.

  CALL METHOD g_alv_grid->z_set_cell_style
  EXPORTING
    col   = 4
    style = wa_style-style.


  CALL METHOD g_alv_grid->z_set_cell_style
  EXPORTING
    col   = 5
    style = wa_style-style.

  CALL METHOD g_alv_grid->z_set_cell_style
  EXPORTING
    col   = 6
    style = wa_style-style.

  CALL METHOD g_alv_grid->z_set_cell_style
  EXPORTING
    col   = 7
    style = wa_style-style.
  CALL METHOD g_alv_grid->z_set_cell_style
  EXPORTING
    col   = 8
    style = wa_style-style.

  wa_style-style     = alv_style_color_total +
  alv_style_align_center_center.

  CALL METHOD g_alv_grid->z_set_cell_style
  EXPORTING
    col   = 9
    style = wa_style-style.


  wa_style-style     = alv_style_color_negative +
  alv_style_align_center_center.

  CALL METHOD g_alv_grid->z_set_cell_style
  EXPORTING
    col   = 10
    style = wa_style-style.

  CALL METHOD g_alv_grid->z_set_cell_style
  EXPORTING
    col   = 11
    style = wa_style-style.


  CALL METHOD g_alv_grid->z_set_cell_style
  EXPORTING
    col   = 12
    style = wa_style-style.

  CALL METHOD g_alv_grid->z_set_cell_style
  EXPORTING
    col   = 13
    style = wa_style-style.

  wa_style-style     = alv_style_color_positive +
  alv_style_align_center_center.

  CALL METHOD g_alv_grid->z_set_cell_style
  EXPORTING
    col   = 14
    style = wa_style-style.

  CALL METHOD g_alv_grid->z_set_cell_style
  EXPORTING
    col   = 15
    style = wa_style-style.

  wa_style-style     = alv_style_color_int_background +
  alv_style_align_center_center.

  CALL METHOD g_alv_grid->z_set_cell_style
  EXPORTING
    col   = 16
    style = wa_style-style.

  wa_style-style     = alv_style_color_positive +
  alv_style_align_center_center +
  alv_style_font_italic.


  CALL METHOD g_alv_grid->z_set_cell_style
  EXPORTING
    row   = 4
    col   = 2
    style = wa_style-style.

  g_alv_grid->z_set_fixed_col_row(
  EXPORTING col = 3
    row = 3 ).

ENDFORM.                    "SET_MERGE_HORIZ

*&---------------------------------------------------------------------*
*& Module STATUS_0200 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_0200 OUTPUT.
  SET PF-STATUS '0200'.
  SET TITLEBAR '0200'.
ENDMODULE.                    "STATUS_0200 OUTPUT

*&---------------------------------------------------------------------*
*& Module INIT_ALV_0200 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE init_alv_0200 OUTPUT.
  PERFORM frm_init_object.
  PERFORM frm_fill_fieldcat.
  PERFORM frm_fill_layout.
  PERFORM frm_display_alv .
  PERFORM set_merge_vert.  "Vertical merger
  PERFORM set_merge_horiz. "Horizontal merge
  PERFORM set_other_headername.   "设置其他抬头文本
  g_alv_grid->z_display( ).
ENDMODULE.                    "INIT_ALV_0200 OUTPUT

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0200  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0200 INPUT.
* button event response
  cl_gui_cfw=>dispatch( ).

  CASE ok_code.
  WHEN '&F03'.
    SET SCREEN 0. LEAVE SCREEN.
  WHEN '&F15'.
    SET SCREEN 0. LEAVE SCREEN.
  WHEN '&F12'.
    SET SCREEN 0. LEAVE SCREEN.
  ENDCASE.
ENDMODULE.                    "USER_COMMAND_0200 INPUT
*&---------------------------------------------------------------------*
*&      Form  SET_OTHER_HEADERNAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM set_other_headername .
  CALL METHOD g_alv_grid->z_set_header_value
  EXPORTING
    col   = 2
    row   = 1
    VALUE = '1-2文本'.

  CALL METHOD g_alv_grid->z_set_header_value
  EXPORTING
    col   = 2
    row   = 2
    VALUE = '2-2文本'.

  CALL METHOD g_alv_grid->z_set_header_value
  EXPORTING
    col   = 3
    row   = 1
    VALUE = '1-3文本'.

  CALL METHOD g_alv_grid->z_set_header_value
  EXPORTING
    col   = 3
    row   = 2
    VALUE = '2-3文本'.

  CALL METHOD g_alv_grid->z_set_header_value
  EXPORTING
    col   = 8
    row   = 2
    VALUE = '2-8文本'.

  CALL METHOD g_alv_grid->z_set_header_value
  EXPORTING
    col   = 9
    row   = 1
    VALUE = '1-9文本'.

  CALL METHOD g_alv_grid->z_set_header_value
  EXPORTING
    col   = 9
    row   = 2
    VALUE = '2-9文本'.

ENDFORM.                    " SET_OTHER_HEADERNAME
*&---------------------------------------------------------------------*
*&      Form  FRM_SET_FIELD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0673   text
*      -->P_0674   text
*      -->P_0675   text
*      -->P_0676   text
*----------------------------------------------------------------------*
FORM frm_set_field  USING    VALUE(p1)
      VALUE(p2)
      VALUE(p3)
      VALUE(p4).
  DATA : ls_fieldcatalog  TYPE lvc_s_fcat.

  ls_fieldcatalog-fieldname = p1.
  ls_fieldcatalog-ref_table = p2.
  ls_fieldcatalog-ref_field = p3.
  ls_fieldcatalog-scrtext_s = p4.
  ls_fieldcatalog-scrtext_m = p4.
  ls_fieldcatalog-scrtext_l = p4.

  APPEND ls_fieldcatalog TO lt_fieldcatalog.
ENDFORM.                    " FRM_SET_FIELD

SE80和屏幕在这里插入图片描述在这里插入图片描述

在这里插入图片描述

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
ABAP 中,可以使用 ALV Grid 控件的合并单元格功能来实现多行同组的字段内容拼接。 首先,需要使用 CL_SALV_TABLE 类来创建 ALV Grid 控件,例如: ``` DATA(lo_alv) = NEW cl_salv_table( ). ``` 然后,使用 SET_TABLE_FOR_FIRST_DISPLAY 方法将内表传递给 ALV Grid 控件,并设置需要拼接的字段: ``` lo_alv->set_table_for_first_display( EXPORTING i_structure_name = 'TY_TABLE' CHANGING it_outtab = lt_table EXCEPTIONS invalid_parameter_combination = 1 program_error = 2 too_many_lines = 3 OTHERS = 4 ). lo_alv->get_columns( )->set_column_merging( columnname = 'FIELD1' ). lo_alv->get_columns( )->set_column_merging( columnname = 'FIELD2' ). ``` 在以上示例中,TY_TABLE 是需要拼接的内表类型,lt_table 是实际的内表数据。使用 get_columns 方法获取 ALV Grid 控件的属性,然后使用 set_column_merging 方法设置需要合并单元格。在本例中,需要合并 field1 和 field2 两。 最后,使用 DISPLAY 方法显示 ALV Grid 控件: ``` lo_alv->display( ). ``` 在显示 ALV Grid 控件时,如果有多行同组的数据,ALV Grid 控件会自动将同组的数据合并到一行,并将需要拼接的字段内容拼接成一个字符串,显示在合并后的单元格中。 注意:以上示例中使用了 CL_SALV_TABLE 类来创建 ALV Grid 控件,这是一种比较新的方法,需要在代码中引入相应的类库。在旧的方法中,可以使用 REUSE_ALV_GRID_DISPLAY 函数来显示 ALV Grid 控件,具体实现方式与以上示例类似。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

樱桃-小丸纸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值