ALV报表——ALV颜色设置(三)

一、行

用Layout相关属性设置

代码:

************************************************************************
* Tables Definitions
************************************************************************
TABLES: marc.
************************************************************************
* Data Definitions                定义数据
************************************************************************
TYPES: BEGIN OF  ty_data,
         color TYPE char4,            "行颜色
         matnr TYPE mara-matnr,       "物料號碼
         maktx TYPE makt-maktx,       "物料说明
       END OF ty_data.

DATA: gt_data TYPE TABLE OF ty_data.

DATA: gs_layout   TYPE slis_layout_alv,     "布局
      gt_fieldcat TYPE slis_t_fieldcat_alv. "字段

************************************************************************
* Includes Module                 包含模块
************************************************************************

************************************************************************
* Selection Screen                选择屏幕
************************************************************************
PARAMETERS: p_werks LIKE marc-werks DEFAULT '2000' OBLIGATORY.

SELECT-OPTIONS: s_matnr FOR marc-matnr.

************************************************************************
* Initialization                  初始化事件
************************************************************************
INITIALIZATION.

************************************************************************
* At Selection Screen             PAI事件
************************************************************************
AT SELECTION-SCREEN.

************************************************************************
* At Selection Screen Output      PBO事件
************************************************************************
AT SELECTION-SCREEN OUTPUT.

************************************************************************
* Report Format                   报表格式
************************************************************************
TOP-OF-PAGE.

END-OF-PAGE.

************************************************************************
* Main Process                    主要逻辑
************************************************************************
START-OF-SELECTION.

  "获取数据
  PERFORM frm_get_data.
  "显示数据
  PERFORM frm_display_data.

END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_get_data .

  DATA: ls_data LIKE LINE OF gt_data.

  SELECT marc~matnr "料号
         makt~maktx
         INTO CORRESPONDING FIELDS OF TABLE gt_data
         FROM marc
         INNER JOIN mara ON marc~matnr EQ mara~matnr
         INNER JOIN makt ON marc~matnr EQ makt~matnr
         WHERE marc~matnr IN s_matnr "料号
         AND marc~werks EQ p_werks   "工厂
         AND makt~spras = sy-langu.  "登录语言

  LOOP AT gt_data INTO ls_data.

    IF sy-tabix MOD 2 = 0.
      "给偶数行设置颜色
      ls_data-color = 'C310'.
    ENDIF.

    MODIFY gt_data FROM ls_data.
  ENDLOOP.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_display_data .

  "栏位最适宽度
  gs_layout-colwidth_optimize = 'X'.

  "ALV条纹
  gs_layout-zebra = 'X'.

  "指定内表中的颜色栏位
  gs_layout-info_fieldname = 'COLOR'.

  "构建ALV的栏位
  PERFORM frm_create_field.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = sy-repid       "当前程序名
      is_layout          = gs_layout      "Layout
      it_fieldcat        = gt_fieldcat[]  "Fieldcat
      i_save             = 'A'
    TABLES
      t_outtab           = gt_data
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_FIELD
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_create_field .

  DATA: ls_fieldcat TYPE slis_fieldcat_alv,
        lv_count    TYPE i.

  DEFINE fieldcat.
    ADD 1 TO lv_count.

    "栏位显示顺序
    ls_fieldcat-col_pos    = lv_count.
    "内表栏位
    ls_fieldcat-fieldname  = &1.
    "参考栏位
    ls_fieldcat-ref_fieldname = &2.
    "参考表
    ls_fieldcat-ref_tabname = &3.
    "单位
    ls_fieldcat-qfieldname = &4.
    "栏位标题(长文或中等文或短文)
    ls_fieldcat-seltext_s = ls_fieldcat-seltext_m =
    ls_fieldcat-seltext_l = &5.
    "显示长文或中等文或短文
    ls_fieldcat-ddictxt = &6.

    APPEND ls_fieldcat TO gt_fieldcat.
    CLEAR ls_fieldcat.
  END-OF-DEFINITION.

  fieldcat 'MATNR' 'MATNR' 'MARC' '' '' ''.
  fieldcat 'MAKTX' 'MAKTX' 'MAKT' '' '' ''.

ENDFORM.
View Code

运行效果:

二、列

用FILEDCAT相关属性设置

代码:

************************************************************************
* Type Pools Definitions          定义类型池
************************************************************************
TYPE-POOLS slis.

************************************************************************
* Tables Definitions
************************************************************************
TABLES: marc.
************************************************************************
* Data Definitions                定义数据
************************************************************************
TYPES: BEGIN OF  ty_data,
         matnr TYPE mara-matnr,       "物料號碼
         maktx TYPE makt-maktx,       "物料说明
       END OF ty_data.

DATA: gt_data TYPE TABLE OF ty_data.

DATA: gs_layout   TYPE slis_layout_alv,     "布局
      gt_fieldcat TYPE slis_t_fieldcat_alv. "字段

************************************************************************
* Includes Module                 包含模块
************************************************************************

************************************************************************
* Selection Screen                选择屏幕
************************************************************************
PARAMETERS: p_werks LIKE marc-werks DEFAULT '2000' OBLIGATORY.

SELECT-OPTIONS: s_matnr FOR marc-matnr.

************************************************************************
* Initialization                  初始化事件
************************************************************************
INITIALIZATION.

************************************************************************
* At Selection Screen             PAI事件
************************************************************************
AT SELECTION-SCREEN.

************************************************************************
* At Selection Screen Output      PBO事件
************************************************************************
AT SELECTION-SCREEN OUTPUT.

************************************************************************
* Report Format                   报表格式
************************************************************************
TOP-OF-PAGE.

END-OF-PAGE.

************************************************************************
* Main Process                    主要逻辑
************************************************************************
START-OF-SELECTION.

  "获取数据
  PERFORM frm_get_data.
  "显示数据
  PERFORM frm_display_data.

END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_get_data .

  SELECT marc~matnr "料号
         makt~maktx
         INTO CORRESPONDING FIELDS OF TABLE gt_data
         FROM marc
         INNER JOIN mara ON marc~matnr EQ mara~matnr
         INNER JOIN makt ON marc~matnr EQ makt~matnr
         WHERE marc~matnr IN s_matnr "料号
         AND marc~werks EQ p_werks   "工厂
         AND makt~spras = sy-langu.  "登录语言

ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_display_data .

  "栏位最适宽度
  gs_layout-colwidth_optimize = 'X'.

  "ALV条纹
  gs_layout-zebra = 'X'.

  "构建ALV的栏位
  PERFORM frm_create_field.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = sy-repid       "当前程序名
      is_layout          = gs_layout      "Layout
      it_fieldcat        = gt_fieldcat[]  "Fieldcat
      i_save             = 'A'
    TABLES
      t_outtab           = gt_data
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_FIELD
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_create_field .

  DATA: ls_fieldcat TYPE slis_fieldcat_alv,
        lv_count    TYPE i.

  DEFINE fieldcat.
    ADD 1 TO lv_count.

    "栏位显示顺序
    ls_fieldcat-col_pos    = lv_count.
    "内表栏位
    ls_fieldcat-fieldname  = &1.
    "参考栏位
    ls_fieldcat-ref_fieldname = &2.
    "参考表
    ls_fieldcat-ref_tabname = &3.
    "单位
    ls_fieldcat-qfieldname = &4.
    "栏位标题(长文或中等文或短文)
    ls_fieldcat-seltext_s = ls_fieldcat-seltext_m =
    ls_fieldcat-seltext_l = &5.
    "显示长文或中等文或短文
    ls_fieldcat-ddictxt = &6.
    "列颜色
    ls_fieldcat-emphasize = &7.

    APPEND ls_fieldcat TO gt_fieldcat.
    CLEAR ls_fieldcat.
  END-OF-DEFINITION.

  fieldcat 'MATNR' 'MATNR' 'MARC' '' '' '' 'C310'.
  fieldcat 'MAKTX' 'MAKTX' 'MAKT' '' '' '' ''.

ENDFORM.
View Code

运行效果:

三、单元格
************************************************************************
* Type Pools Definitions          定义类型池
************************************************************************
TYPE-POOLS slis.

************************************************************************
* Tables Definitions
************************************************************************
TABLES: marc.
************************************************************************
* Data Definitions                定义数据
************************************************************************
TYPES: BEGIN OF  ty_data,
         color TYPE lvc_t_scol,       "单元格颜色
         matnr TYPE mara-matnr,       "物料號碼
         maktx TYPE makt-maktx,       "物料说明
       END OF ty_data.

DATA: gt_data TYPE TABLE OF ty_data.

DATA: gs_layout   TYPE slis_layout_alv,     "布局
      gt_fieldcat TYPE slis_t_fieldcat_alv. "字段

************************************************************************
* Includes Module                 包含模块
************************************************************************

************************************************************************
* Selection Screen                选择屏幕
************************************************************************
PARAMETERS: p_werks LIKE marc-werks DEFAULT '2000' OBLIGATORY.

SELECT-OPTIONS: s_matnr FOR marc-matnr.

************************************************************************
* Initialization                  初始化事件
************************************************************************
INITIALIZATION.

************************************************************************
* At Selection Screen             PAI事件
************************************************************************
AT SELECTION-SCREEN.

************************************************************************
* At Selection Screen Output      PBO事件
************************************************************************
AT SELECTION-SCREEN OUTPUT.

************************************************************************
* Report Format                   报表格式
************************************************************************
TOP-OF-PAGE.

END-OF-PAGE.

************************************************************************
* Main Process                    主要逻辑
************************************************************************
START-OF-SELECTION.

  "获取数据
  PERFORM frm_get_data.
  "显示数据
  PERFORM frm_display_data.

END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_get_data .

  DATA: ls_data LIKE LINE OF gt_data,
        ls_color TYPE lvc_s_scol. "ALV单元格颜色

  SELECT marc~matnr "料号
         makt~maktx
         INTO CORRESPONDING FIELDS OF TABLE gt_data
         FROM marc
         INNER JOIN mara ON marc~matnr EQ mara~matnr
         INNER JOIN makt ON marc~matnr EQ makt~matnr
         WHERE marc~matnr IN s_matnr "料号
         AND marc~werks EQ p_werks   "工厂
         AND makt~spras = sy-langu.  "登录语言

  LOOP AT gt_data INTO ls_data.

    "给物料偶数列设置颜色
    IF sy-tabix MOD 2 = 0.
      ls_color-fname = 'MATNR'.
      ls_color-color-col = 6.
      ls_color-color-int = 1.
      ls_color-color-inv = 0.
      APPEND ls_color TO ls_data-color.
      CLEAR ls_color.
    ELSE.
      "给物料说明奇数列设置颜色
      ls_color-fname = 'MAKTX'.
      ls_color-color-col = 5.
      ls_color-color-int = 1.
      ls_color-color-inv = 0.
      APPEND ls_color TO ls_data-color.
      CLEAR ls_color.
    ENDIF.

    MODIFY gt_data FROM ls_data.
  ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_display_data .

  "栏位最适宽度
  gs_layout-colwidth_optimize = 'X'.

  "ALV条纹
  gs_layout-zebra = 'X'.

  "指定内表单元格颜色栏位
  gs_layout-coltab_fieldname = 'COLOR'.

  "构建ALV的栏位
  PERFORM frm_create_field.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = sy-repid       "当前程序名
      is_layout          = gs_layout      "Layout
      it_fieldcat        = gt_fieldcat[]  "Fieldcat
      i_save             = 'A'
    TABLES
      t_outtab           = gt_data
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_FIELD
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_create_field .

  DATA: ls_fieldcat TYPE slis_fieldcat_alv,
        lv_count    TYPE i.

  DEFINE fieldcat.
    ADD 1 TO lv_count.

    "栏位显示顺序
    ls_fieldcat-col_pos    = lv_count.
    "内表栏位
    ls_fieldcat-fieldname  = &1.
    "参考栏位
    ls_fieldcat-ref_fieldname = &2.
    "参考表
    ls_fieldcat-ref_tabname = &3.
    "单位
    ls_fieldcat-qfieldname = &4.
    "栏位标题(长文或中等文或短文)
    ls_fieldcat-seltext_s = ls_fieldcat-seltext_m =
    ls_fieldcat-seltext_l = &5.
    "显示长文或中等文或短文
    ls_fieldcat-ddictxt = &6.

    APPEND ls_fieldcat TO gt_fieldcat.
    CLEAR ls_fieldcat.
  END-OF-DEFINITION.

  fieldcat 'MATNR' 'MATNR' 'MARC' '' '' ''.
  fieldcat 'MAKTX' 'MAKTX' 'MAKT' '' '' ''.

ENDFORM.
View Code

运行效果:

四:附ALV的颜色代码

posted @ 2017-12-28 16:41  鲸与海  阅读(897)  评论(0编辑  收藏  举报