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

目录

一、行用Layout相关属性设置

代码:

*Report  ZRFI001_XFL_TEST
REPORT ZRFI001_XFL_TEST .

*定义ALV所需要用到的类型池
TYPE-POOLS SLIS.

*****************************TABLES
TABLES:MARD.

*****************************Data Definitions
*定义ALV所要显示的数据对应的内表数据类型及内表数据对象
DATA: BEGIN OF  GT_MARD OCCURS 0,           "一般物料資料
             MATNR LIKE MARD-MATNR ,        "物料號碼
             WERKS LIKE MARD-WERKS,         "工厂
             LABST LIKE MARD-LABST,         "未限制使用的已估價庫存
END OF GT_MARD.
DATA: BEGIN OF  GT_MARD2 OCCURS 0,          "一般物料資料
             LINECOLOR(4) TYPE C,           "行颜色
             MATNR LIKE MARD-MATNR ,        "物料號碼
             WERKS LIKE MARD-WERKS,         "工厂
             LABST LIKE MARD-LABST,         "未限制使用的已估價庫存
END OF GT_MARD2.

*定义一些显示ALV时所需要使用的变量
DATA: GS_LAYOUT    TYPE SLIS_LAYOUT_ALV,
      GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV  WITH HEADER LINE.
"定义FIELDCAT

*****************************Selection Screen
*定义选择屏幕
SELECT-OPTIONS: S_MATNR FOR MARD-MATNR.

*****************************Main Process
*声明各个选择屏幕事件块
START-OF-SELECTION.

     PERFORM GET_DATA.
     PERFORM CATA_LOG.
     PERFORM ALV_SHOW.

END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
FORM GET_DATA .

     SELECT MATNR WERKS LABST INTO TABLE GT_MARD
                    FROM MARD
                    WHERE MATNR IN S_MATNR.

     SORT GT_MARD BY MATNR ASCENDING.

     LOOP AT GT_MARD.
       IF GT_MARD-LABST > 0.
          GT_MARD2-LINECOLOR = 'C310'.         "设置行颜色的值
       ELSE.
          GT_MARD2-LINECOLOR = ''.
       ENDIF.
       GT_MARD2-MATNR = GT_MARD-MATNR.
       GT_MARD2-WERKS = GT_MARD-WERKS.
       GT_MARD2-LABST = GT_MARD-LABST.
       APPEND GT_MARD2.
       GS_LAYOUT-INFO_FIELDNAME = 'LINECOLOR'.  "指定数据输出内表中哪列存储的是颜色
       CLEAR GT_MARD2.
     ENDLOOP.

ENDFORM.                    " GET_DATA

*&---------------------------------------------------------------------*
*&      Form  CATA_LOG
*&---------------------------------------------------------------------*
FORM CATA_LOG .

   DEFINE FILEDCAT.
        GT_FIELDCAT-FIELDNAME = &1.   "对应内表的字段名
        GT_FIELDCAT-SELTEXT_L = &2.   "输出列文本
        GT_FIELDCAT-OUTPUTLEN = &3.   "输出列长度
        APPEND GT_FIELDCAT.
   END-OF-DEFINITION.

   FILEDCAT 'MATNR'  '物料编号' 20.
   FILEDCAT 'WERKS'  '工厂' 10.
   FILEDCAT 'LABST'  '库存' 10.

ENDFORM.                    " CATA_LOG

*&---------------------------------------------------------------------*
*&      Form  ALV_SHOW
*&---------------------------------------------------------------------*
FORM ALV_SHOW.
* 显示ALV的函数
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-REPID
      IS_LAYOUT                = GS_LAYOUT
      IT_FIELDCAT              = GT_FIELDCAT[]
      I_SAVE                   = 'A'             "保存全局,特定變式
    TABLES
      T_OUTTAB            =  GT_MARD2
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.

ENDFORM.                    " ALV_SHOW

运行效果:

 二、列:用FILEDCAT相关属性设置

代码:

*Report  ZRFI001_XFL_TEST
REPORT ZRFI001_XFL_TEST .

*定义ALV所需要用到的类型池
TYPE-POOLS SLIS.

*****************************TABLES
TABLES:MARD.

*****************************Data Definitions
*定义ALV所要显示的数据对应的内表数据类型及内表数据对象
DATA: BEGIN OF  GT_MARD OCCURS 0,           "一般物料資料
             MATNR LIKE MARD-MATNR ,        "物料號碼
             WERKS LIKE MARD-WERKS,         "工厂
             LABST LIKE MARD-LABST,         "未限制使用的已估價庫存
END OF GT_MARD.

*定义一些显示ALV时所需要使用的变量
DATA: GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV  WITH HEADER LINE.
"定义FIELDCAT

*****************************Selection Screen
*定义选择屏幕
SELECT-OPTIONS: S_MATNR FOR MARD-MATNR.

*****************************Main Process
*声明各个选择屏幕事件块
START-OF-SELECTION.

     PERFORM GET_DATA.
     PERFORM CATA_LOG.
     PERFORM ALV_SHOW.

END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
FORM GET_DATA .

     SELECT MATNR WERKS LABST INTO TABLE GT_MARD
                    FROM MARD
                    WHERE MATNR IN S_MATNR.

ENDFORM.                    " GET_DATA

*&---------------------------------------------------------------------*
*&      Form  CATA_LOG
*&---------------------------------------------------------------------*
FORM CATA_LOG .

   DEFINE FILEDCAT.
        GT_FIELDCAT-FIELDNAME = &1.   "对应内表的字段名
        GT_FIELDCAT-SELTEXT_L = &2.   "输出列文本
        GT_FIELDCAT-EMPHASIZE = &3.   "栏位的颜色
        APPEND GT_FIELDCAT.
   END-OF-DEFINITION.

   FILEDCAT 'MATNR'  '物料编号' 'C310'.
   FILEDCAT 'WERKS'  '工厂' ''.
   FILEDCAT 'LABST'  '库存' ''.

ENDFORM.                    " CATA_LOG

*&---------------------------------------------------------------------*
*&      Form  ALV_SHOW
*&---------------------------------------------------------------------*
FORM ALV_SHOW.
* 显示ALV的函数
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-REPID
      IT_FIELDCAT              = GT_FIELDCAT[]
      I_SAVE                   = 'A'             "保存全局,特定變式
    TABLES
      T_OUTTAB            =  GT_MARD
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.

ENDFORM.                    " ALV_SHOW

运行效果:

三、单元格

*&---------------------------------------------------------------------*
*& REPORT ZMMTEST.
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZMMTEST.

TABLES: MSEG,MKPF,T156T,MAKT,T001W,MARC,MARD.

DATA: BEGIN OF GT_MSEG  OCCURS 0,
  WERKS LIKE MSEG-WERKS,
  BWART LIKE MSEG-BWART,
  SHKZG LIKE MSEG-SHKZG,
  BTEXT LIKE T156T-BTEXT,
  AUFNR LIKE MSEG-AUFNR,
  MATNR LIKE MSEG-MATNR,
  MAKTX LIKE MAKT-MAKTX,
  ERFMG LIKE MSEG-ERFMG,
  ERFME LIKE MSEG-ERFME,
  LGORT LIKE MSEG-LGORT,
  LGPBE LIKE MARD-LGPBE,
  BUDAT_MKPF LIKE MSEG-BUDAT_MKPF,
  SOBKZ LIKE MSEG-SOBKZ,
  MJAHR LIKE MSEG-MJAHR,
  MBLNR LIKE MSEG-MBLNR,
  ZEILE LIKE MSEG-ZEILE,
  KOSTL LIKE MSEG-KOSTL,
  SGTXT LIKE MSEG-SGTXT,
  EBELN LIKE MSEG-EBELN,
  EBELP LIKE MSEG-EBELP,
  LIFNR LIKE MSEG-LIFNR,
  SORTL LIKE LFA1-SORTL,
  BLDAT LIKE MKPF-BLDAT,
  BKTXT LIKE MKPF-BKTXT,
  BPMNG LIKE MSEG-BPMNG,
  BSTMG LIKE MSEG-BSTMG,
  BPRME LIKE MSEG-BPRME,
  CPUDT_MKPF LIKE MSEG-CPUDT_MKPF,
  CPUTM_MKPF LIKE MSEG-CPUTM_MKPF,
  XBLNR_MKPF LIKE MSEG-XBLNR_MKPF,
  USNAM_MKPF LIKE MSEG-USNAM_MKPF,
  ZSTATUS LIKE ZMMT012-ZSTATUS,
  ZUSER LIKE ZMMT012-ZUSER,
  ZDATE LIKE ZMMT012-ZDATE,
  ZTIME LIKE ZMMT012-ZTIME,
  CELLCOLOR TYPE LVC_T_SCOL, "单元格颜色
END OF GT_MSEG.

DATA: IW_CELLCOLOR TYPE LVC_S_SCOL.

*-->ALV
TYPE-POOLS SLIS.
DATA: GS_LAYOUT TYPE SLIS_LAYOUT_ALV,
          GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
          WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-B01.
SELECT-OPTIONS: S_MATNR FOR MSEG-MATNR,
                           S_MBLNR FOR MSEG-MBLNR,
                           S_WERKS FOR MSEG-WERKS,
                           S_LGORT FOR MSEG-LGORT,
                           S_CHARG FOR MSEG-CHARG,
                           S_LIFNR FOR MSEG-LIFNR,
                           S_KUNNR FOR MSEG-KUNNR,
                           S_BWART FOR MSEG-BWART,
                           S_SOBKZ FOR MSEG-SOBKZ,
                           S_AUFNR FOR MSEG-AUFNR,
                           S_KDAUF FOR MSEG-MAT_KDAUF,
                           S_KDPOS FOR MSEG-MAT_KDPOS.
SELECTION-SCREEN END OF BLOCK B1.

SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-B02.
SELECT-OPTIONS: S_BUDAT FOR MSEG-BUDAT_MKPF,
                           S_USNAM FOR MSEG-USNAM_MKPF,
                           S_VGART FOR MKPF-VGART,
                           S_XBLNR FOR MSEG-XBLNR_MKPF.
SELECTION-SCREEN END OF BLOCK B2.

START-OF-SELECTION.
  PERFORM: GET_DATA.
  PERFORM: ALV_SHOW.
END-OF-SELECTION.

FORM GET_DATA.
  GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
  GS_LAYOUT-COLTAB_FIELDNAME = 'CELLCOLOR'. "单元格颜色内表字段
  DATA: L_INDEX LIKE SY-TABIX.

  SELECT MSEG~WERKS MSEG~BWART MSEG~SHKZG MSEG~AUFNR MSEG~MATNR
              MSEG~ERFMG MSEG~ERFME MSEG~LGORT
              MSEG~BUDAT_MKPF MSEG~SOBKZ MSEG~MJAHR MSEG~MBLNR
              MSEG~ZEILE MSEG~KOSTL MSEG~SGTXT
              MSEG~EBELN MSEG~EBELP MSEG~LIFNR MKPF~BLDAT MKPF~BKTXT
              MSEG~BPMNG MSEG~BSTMG MSEG~BPRME
              MSEG~CPUDT_MKPF MSEG~CPUTM_MKPF MSEG~XBLNR_MKPF
              MSEG~USNAM_MKPF
              ZMMT012~ZSTATUS ZMMT012~ZUSER ZMMT012~ZDATE
              ZMMT012~ZTIME LFA1~SORTL
              INTO CORRESPONDING FIELDS OF TABLE GT_MSEG
              FROM MSEG
              LEFT JOIN MKPF ON MKPF~MJAHR = MSEG~MJAHR
              AND MKPF~MBLNR = MSEG~MBLNR
              LEFT JOIN ZMMT012 ON ZMMT012~MJAHR = MSEG~MJAHR
              AND ZMMT012~MBLNR = MSEG~MBLNR
              AND ZMMT012~ZEILE = MSEG~ZEILE
              LEFT JOIN LFA1 ON LFA1~LIFNR = MSEG~LIFNR
              WHERE MATNR IN S_MATNR
              AND MSEG~MBLNR IN S_MBLNR
              AND MSEG~WERKS IN S_WERKS
              AND LGORT IN S_LGORT
              AND CHARG IN S_CHARG
              AND MSEG~LIFNR IN S_LIFNR
              AND MSEG~KUNNR IN S_KUNNR
              AND BWART IN S_BWART
              AND SOBKZ IN S_SOBKZ
              AND AUFNR IN S_AUFNR
              AND MAT_KDAUF IN S_KDAUF
              AND MAT_KDPOS IN S_KDPOS
              AND BUDAT_MKPF IN S_BUDAT
              AND USNAM_MKPF IN S_USNAM
              AND VGART_MKPF IN S_VGART
              AND XBLNR_MKPF IN S_XBLNR.

    SORT GT_MSEG BY MJAHR MBLNR ZEILE ASCENDING.
    LOOP AT GT_MSEG.
      L_INDEX = SY-TABIX.

*-->异动类型名称
      SELECT SINGLE BTEXT INTO GT_MSEG-BTEXT
                  FROM T156T
                  WHERE BWART = GT_MSEG-BWART
                  AND SPRAS = SY-LANGU.

*-->物料说明
      SELECT SINGLE MAKTX INTO GT_MSEG-MAKTX
                 FROM MAKT
                 WHERE MATNR = GT_MSEG-MATNR
                 AND SPRAS = SY-LANGU.
*-->仓库

      IF GT_MSEG-LGORT = SPACE.

        IF GT_MSEG-AUFNR <> SPACE.
          SELECT SINGLE LGPRO INTO GT_MSEG-LGORT
                  FROM MARC
                  WHERE WERKS = GT_MSEG-WERKS
                  AND MATNR = GT_MSEG-MATNR.
        ELSE.
          SELECT SINGLE LGFSB INTO GT_MSEG-LGORT
                  FROM MARC
                  WHERE WERKS = GT_MSEG-WERKS
                  AND MATNR = GT_MSEG-MATNR.
        ENDIF.
      ENDIF.
*-->储位
      SELECT SINGLE LGPBE INTO GT_MSEG-LGPBE
                 FROM MARD
                 WHERE WERKS = GT_MSEG-WERKS
                 AND MATNR = GT_MSEG-MATNR
                 AND LGORT = GT_MSEG-LGORT.

      CASE GT_MSEG-SHKZG.
      "根据借贷项类别设定颜色
        WHEN 'H'.
          GT_MSEG-ERFMG = GT_MSEG-ERFMG * -1.
          GT_MSEG-BPMNG = GT_MSEG-BPMNG * -1.
          DEFINE SET_COLOR.
              IW_CELLCOLOR-FNAME = &1.
              IW_CELLCOLOR-COLOR-COL = 6.
              IW_CELLCOLOR-COLOR-INT = 1.
              IW_CELLCOLOR-COLOR-INV = 0.
              APPEND IW_CELLCOLOR TO GT_MSEG-CELLCOLOR.
          END-OF-DEFINITION.
          SET_COLOR 'ERFMG'.
          SET_COLOR 'BPMNG'.
          SET_COLOR 'BSTMG'.
        WHEN 'S'.
          DEFINE SET_COLOR.
              IW_CELLCOLOR-FNAME = &1.
              IW_CELLCOLOR-COLOR-COL = 5.
              IW_CELLCOLOR-COLOR-INT = 1.
              IW_CELLCOLOR-COLOR-INV = 0.
              APPEND IW_CELLCOLOR TO GT_MSEG-CELLCOLOR.
          END-OF-DEFINITION.
          SET_COLOR 'ERFMG'.
          SET_COLOR 'BPMNG'.
          SET_COLOR 'BSTMG'.
      ENDCASE.
      MODIFY GT_MSEG INDEX L_INDEX.

    ENDLOOP.
ENDFORM.

FORM ALV_SHOW .
DATA: L_REPID TYPE SY-REPID,
            L_INCLNAME TYPE TRDIR-NAME,
            L_IDX LIKE SY-TABIX.
  CLEAR: GT_FIELDCAT[],WA_FIELDCAT.
  L_REPID = L_INCLNAME = SY-CPROG.
  GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      I_PROGRAM_NAME         = L_REPID
      I_INTERNAL_TABNAME     = 'GT_MSEG'
      I_INCLNAME             = L_INCLNAME
    CHANGING
      CT_FIELDCAT            = GT_FIELDCAT
    EXCEPTIONS
      INCONSISTENT_INTERFACE = 1
      PROGRAM_ERROR          = 2
      OTHERS                 = 3.
  LOOP AT GT_FIELDCAT INTO WA_FIELDCAT.
    L_IDX = SY-TABIX.
    CASE WA_FIELDCAT-FIELDNAME.
      WHEN 'SORTL'.
        WA_FIELDCAT-SELTEXT_S = WA_FIELDCAT-SELTEXT_M =
        WA_FIELDCAT-SELTEXT_L = '供应商名称'.
        WA_FIELDCAT-DDICTXT = 'S'.
      WHEN 'ZSTATUS'.
        WA_FIELDCAT-SELTEXT_S = WA_FIELDCAT-SELTEXT_M =
        WA_FIELDCAT-SELTEXT_L = '过账状态'.
        WA_FIELDCAT-DDICTXT = 'S'.
      WHEN 'ZUSER'.
        WA_FIELDCAT-SELTEXT_S = WA_FIELDCAT-SELTEXT_M =
        WA_FIELDCAT-SELTEXT_L = '过账用户'.
        WA_FIELDCAT-DDICTXT = 'S'.
      WHEN 'ZDATE'.
        WA_FIELDCAT-SELTEXT_S = WA_FIELDCAT-SELTEXT_M =
        WA_FIELDCAT-SELTEXT_L = '过账日期'.
        WA_FIELDCAT-DDICTXT = 'S'.
      WHEN 'ZTIME'.
        WA_FIELDCAT-SELTEXT_S = WA_FIELDCAT-SELTEXT_M =
        WA_FIELDCAT-SELTEXT_L = '过账时间'.
        WA_FIELDCAT-DDICTXT = 'S'.
    ENDCASE.
    CLEAR WA_FIELDCAT-KEY.
    MODIFY GT_FIELDCAT FROM WA_FIELDCAT INDEX L_IDX.
  ENDLOOP.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-REPID
      IS_LAYOUT                 = GS_LAYOUT
      IT_FIELDCAT              = GT_FIELDCAT[]
*      I_CALLBACK_PF_STATUS_SET     = 'ALV_PF_STATUS'   " 触发事件调用子程序
*      I_CALLBACK_USER_COMMAND  = 'ALV_USER_COMMAND'   " 鼠标事件操作子程序
      I_SAVE                   = 'A'
    TABLES
      T_OUTTAB            =  GT_MSEG
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.

ENDFORM.                    " ALV_SHOW

 

运行效果:

 

四:附ALV的颜色代码

 

转载于:https://www.cnblogs.com/StephenAmell/p/8135442.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值