0
点赞
收藏
分享

微信扫一扫

DEMO:ALV 行、列、单元格颜色控制

Raow1 2022-06-17 阅读 47

搜东西偶然看到一个不错的ALV demo

 

效果

DEMO:ALV <wbr>行、列、单元格颜色控制​​
DEMO:ALV <wbr>行、列、单元格颜色控制
DEMO:ALV <wbr>行、列、单元格颜色控制

代码

*&---------------------------------------------------------------------*
*& Report ZLM_010
*&---------------------------------------------------------------------*
*& http://scn.sap.com/message/1640274#1640274
*&---------------------------------------------------------------------*
REPORT zlm_010.


*REPORT zrich_0002 .

*****************************************************************
* Use of colours in ALV grid (cell, line and column)            *
*****************************************************************

* Table
TABLES : mara.

* Type
TYPES : BEGIN OF ty_mara,
          matnr         LIKE mara-matnr,
          matkl         LIKE mara-matkl,
          counter(4)    TYPE n,
          free_text(15) TYPE c,
          color_line(4) TYPE c,           " Line color
          color_cell    TYPE lvc_t_scol,  " Cell color
        END OF ty_mara.

* Structures
DATA  : wa_mara     TYPE ty_mara,
        wa_fieldcat TYPE lvc_s_fcat,
        is_layout   TYPE lvc_s_layo,
        wa_color    TYPE lvc_s_scol.

* Internal table
DATA : it_mara     TYPE STANDARD TABLE OF ty_mara,
       it_fieldcat TYPE STANDARD TABLE OF lvc_s_fcat,
       it_color    TYPE TABLE          OF lvc_s_scol.

* Variables
DATA : okcode              LIKE sy-ucomm,
       w_alv_grid          TYPE REF TO cl_gui_alv_grid,
       w_docking_container TYPE REF TO cl_gui_docking_container.


PARAMETERS : p_column AS CHECKBOX,
             p_line   AS CHECKBOX,
             p_cell   AS CHECKBOX.

AT SELECTION-SCREEN OUTPUT.

  PERFORM get_data.
  PERFORM fill_catalog.

  IF w_docking_container IS INITIAL.
    PERFORM create_objects.
  ENDIF.

*&--------------------------------------------------------------*
*&      Form  create_objects
*&--------------------------------------------------------------*
FORM create_objects.

  CREATE OBJECT w_docking_container
    EXPORTING
      ratio                       = 60
    EXCEPTIONS
      cntl_error                  = 1
      cntl_system_error           = 2
      create_error                = 3
      lifetime_error              = 4
      lifetime_dynpro_dynpro_link = 5
      OTHERS                      = 6.

  CREATE OBJECT w_alv_grid
    EXPORTING
      i_parent = w_docking_container.

* Field that identify color line in internal table
  MOVE 'COLOR_LINE' TO is_layout-info_fname.

* Field that identify cell color in inetrnal table
  MOVE 'COLOR_CELL' TO is_layout-ctab_fname.

  CALL METHOD w_alv_grid->set_table_for_first_display
    EXPORTING
      is_layout                     = is_layout
    CHANGING
      it_outtab                     = it_mara
      it_fieldcatalog               = it_fieldcat
    EXCEPTIONS
      invalid_parameter_combination = 1
      program_error                 = 2
      too_many_lines                = 3
      OTHERS                        = 4.

ENDFORM.
*&--------------------------------------------------------------*
*&      Form  get_data
*&--------------------------------------------------------------*
FORM get_data.

  SELECT * FROM mara UP TO 5 ROWS.
  CLEAR : wa_mara-color_line, wa_mara-color_cell.

  MOVE-CORRESPONDING mara TO wa_mara.
  ADD 1                   TO wa_mara-counter.
  MOVE 'Blabla'           TO wa_mara-free_text.

  IF wa_mara-counter = '0002'
  AND p_line = 'X'.
* Color line
    MOVE 'C410' TO wa_mara-color_line.
  ELSEIF wa_mara-counter = '0004'
  AND p_cell = 'X'.
* Color cell
    MOVE 'FREE_TEXT' TO wa_color-fname.
    MOVE '6'         TO wa_color-color-col.
    MOVE '1'         TO wa_color-color-int.
    MOVE '1'         TO wa_color-color-inv.
    APPEND wa_color TO it_color.
    wa_mara-color_cell[] = it_color[].
  ENDIF.

  APPEND wa_mara TO it_mara.
ENDSELECT.

ENDFORM.
*&--------------------------------------------------------------*
*&      Form  fill_catalog
*&--------------------------------------------------------------*
FORM fill_catalog.

*****************************************************************
* Colour code :                                                 *
* Colour is a 4-char field where :                              *
*              - 1st char = C (color property)                  *
*              - 2nd char = color code (from 0 to 7)            *
*                                  0 = background color         *
*                                  1 = blue                     *
*                                  2 = gray                     *
*                                  3 = yellow                   *
*                                  4 = blue/gray                *
*                                  5 = green                    *
*                                  6 = red                      *
*                                  7 = orange                   *
*              - 3rd char = intensified (0=off, 1=on)           *
*              - 4th char = inverse display (0=off, 1=on)       *
*                                                               *
* Colour overwriting priority :                                 *
*   1. Line                                                     *
*   2. Cell                                                     *
*   3. Column                                                   *
*****************************************************************
  DATA : w_position TYPE i VALUE '1'.

  CLEAR wa_fieldcat.
  MOVE w_position TO wa_fieldcat-col_pos.
  MOVE 'MATNR'    TO wa_fieldcat-fieldname.
  MOVE 'MARA'     TO wa_fieldcat-ref_table.
  MOVE 'MATNR'    TO wa_fieldcat-ref_field.
  APPEND wa_fieldcat TO it_fieldcat.

  ADD 1 TO w_position.

  CLEAR wa_fieldcat.
  MOVE w_position TO wa_fieldcat-col_pos.
  MOVE 'MATKL'    TO wa_fieldcat-fieldname.
  MOVE 'MARA'     TO wa_fieldcat-ref_table.
  MOVE 'MATKL'    TO wa_fieldcat-ref_field.
* Color column
  IF p_column = 'X'.
    MOVE 'C610'     TO wa_fieldcat-emphasize.
  ENDIF.
  APPEND wa_fieldcat TO it_fieldcat.

  ADD 1 TO w_position.

  CLEAR wa_fieldcat.
  MOVE w_position TO wa_fieldcat-col_pos.
  MOVE 'COUNTER'  TO wa_fieldcat-fieldname.
  MOVE 'N'        TO wa_fieldcat-inttype.
  MOVE '4'        TO wa_fieldcat-intlen.
  MOVE 'Counter'  TO wa_fieldcat-coltext.
  APPEND wa_fieldcat TO it_fieldcat.

  ADD 1 TO w_position.

  CLEAR wa_fieldcat.
  MOVE w_position  TO wa_fieldcat-col_pos.
  MOVE 'FREE_TEXT' TO wa_fieldcat-fieldname.
  MOVE 'C'         TO wa_fieldcat-inttype.
  MOVE '20'        TO wa_fieldcat-intlen.
  MOVE 'Text'      TO wa_fieldcat-coltext.
  APPEND wa_fieldcat TO it_fieldcat.

ENDFORM.



举报

相关推荐

0 条评论