ALV特定字段的颜色控制

此博客展示了一个ABAP程序,用于实现计量单位的查询并以ALV方式输出结果。程序包含数据库表声明、结构类型定义、变量和内表定义等,还涉及选择屏幕设置、数据查询、字段颜色设置、ALV显示及相关操作处理,如清空字段颜色等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

*&
&---------------------------------------------------------------------
*&
*&
&---------------------------------------------------------------------

REPORT ZTEST_ALV1 NO STANDARD PAGE HEADING.
*@=@
*@ 声明数据库表
*@
=@
TABLES: T006,
T006A.
*@=@
*@ 定义结构类型
*@
=@
TYPES:BEGIN OF TYP_RESULT,
BOX TYPE C, "选择字段
MANDT TYPE MANDT,
SPRAS TYPE SPRAS,
MSEHI TYPE MSEHI,
MSEH3 TYPE MSEH3,
MSEH6 TYPE MSEH6,
MSEHT TYPE MSEHT,
MSEHL TYPE MSEHL,
COLOR TYPE LVC_T_SCOL, "用来保存字段的显示颜色
END OF TYP_RESULT.
*@=@
*@ 定义全局变量、内表与工作区
*@
=@

DATA:GT_RESULT TYPE TABLE OF TYP_RESULT WITH HEADER LINE.

FIELD-SYMBOLS TYPE TYP_RESULT.
DATA:G_INDIC TYPE C.
@------------------ ALV 相关的变量 -----------------------------------
TYPE-POOLS:SLIS.
DATA:G_GRID TYPE REF TO CL_GUI_ALV_GRID,
G_REPID LIKE SY-REPID,
G_STRUCTURE_NAME TYPE TABNAME,
G_COMMAND TYPE SLIS_FORMNAME,
G_TITLE TYPE LVC_TITLE,
G_SETTING TYPE LVC_S_GLAY,
WA_PRINT TYPE SLIS_PRINT_ALV,
GT_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER,
GT_EVENTS TYPE SLIS_T_EVENT WITH HEADER LINE,
GT_SORT TYPE SLIS_T_SORTINFO_ALV,
WA_LAYOUT TYPE SLIS_LAYOUT_ALV,
GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
WA_FIELDCAT LIKE LINE OF GT_FIELDCAT,
G_SAVE TYPE C,
G_CON_MARK TYPE SLIS_FIELDCAT_ALV-FIELDNAME VALUE ‘MARK’,
G_POS TYPE I.

  • 用操作具体单元的是否可编辑的内表和工作区
    DATA: WA_COLOR TYPE LVC_S_SCOL,
    GT_COLOR TYPE LVC_T_SCOL,
    WA_COLOR_6 TYPE LVC_S_COLO,
    WA_COLOR_5 TYPE LVC_S_COLO,
    WA_COLOR_4 TYPE LVC_S_COLO.
    *@=@
    *@ 定义宏
    *@
    =@
    DEFINE MCR_FIELD.
    CLEAR WA_FIELDCAT.
    G_POS = G_POS + 1 .
    WA_FIELDCAT-COL_POS = G_POS.
    WA_FIELDCAT-FIELDNAME = &1.
    WA_FIELDCAT-TABNAME = ‘TYP_RESULT’.
  • wa_fieldcat-no_out = ‘X’. "field no display, choose from layout
    WA_FIELDCAT-KEY = ’ '. "SUBTOTAL KEY
    WA_FIELDCAT-SELTEXT_L = &2.
    WA_FIELDCAT-OUTPUTLEN = &3.
    APPEND WA_FIELDCAT TO GT_FIELDCAT.
    END-OF-DEFINITION.
    *@=@
    *@ SELECT-SCREEN 选择屏幕
    *@
    =@
    SELECTION-SCREEN BEGIN OF BLOCK XAVERY WITH FRAME TITLE TEXT-001.
    PARAMETERS: P_SPRAS TYPE SPRAS OBLIGATORY. "语言代码
    SELECT-OPTIONS:S_MSEHI FOR T006-MSEHI. "期间
    SELECTION-SCREEN END OF BLOCK XAVERY.
    *@=@
    *@ 执行程序事件
    *@
    =@
    INITIALIZATION.
    PERFORM SUB_INIT_COND. "初始化选择屏幕字段

START-OF-SELECTION.
PERFORM SUB_PROCESS_COND. "对选择条件进行处理
PERFORM SUB_QUERY_T006A . "查询相关数据

END-OF-SELECTION.
PERFORM SUB_CREATE_FIELDCAT.
PERFORM SUB_INIT_LAYOUT.
PERFORM SUB_DISPLAY_AS_ALV. "以ALV的方式输出结果表
&---------------------------------------------------------------------
*& Form SUB_INIT_COND
&---------------------------------------------------------------------

  • 设置选择屏幕上的初始值
    ----------------------------------------------------------------------
    FORM SUB_INIT_COND .
    P_SPRAS = SY-LANGU.
    ENDFORM. " SUB_INIT_COND
    &---------------------------------------------------------------------
    *& Form SUB_PROCESS_COND
    &---------------------------------------------------------------------
  • 对选择条件进行处理
    ----------------------------------------------------------------------
    FORM SUB_PROCESS_COND .
    ENDFORM. " SUB_PROCESS_COND
    &---------------------------------------------------------------------
    *& Form SUB_QUERY_T006A
    &---------------------------------------------------------------------
  • text
    ----------------------------------------------------------------------
    FORM SUB_QUERY_T006A .
    SELECT * FROM T006A
    INTO CORRESPONDING FIELDS OF TABLE GT_RESULT
    WHERE SPRAS EQ P_SPRAS AND
    MSEHI IN S_MSEHI.
    ENDFORM. " SUB_QUERY_T006A
    &---------------------------------------------------------------------
    *& Form SUB_CREATE_FIELDCAT
    &---------------------------------------------------------------------
  • text
    ----------------------------------------------------------------------
    FORM SUB_CREATE_FIELDCAT .
    CLEAR GT_FIELDCAT[].
    MCR_FIELD ‘MANDT’ ‘客户端’ ‘8’.
    MCR_FIELD ‘SPRAS’ ‘语言代码’ ‘8’.
    MCR_FIELD ‘MSEHI’ ‘计量单位’ ‘4’.
    MCR_FIELD ‘MSEH3’ ‘商业格式中外部计量单’ ‘18’.
    MCR_FIELD ‘MSEH6’ ‘技术格式中的外部计量单’ ‘30’.
    MCR_FIELD ‘MSEHT’ ‘度量单位文本’ ‘10’.
    MCR_FIELD ‘MSEHL’ ‘度量单位长文本’ ‘20’.
    ENDFORM. " SUB_CREATE_FIELDCAT
    &---------------------------------------------------------------------
    *& Form SUB_INIT_LAYOUT
    &---------------------------------------------------------------------
  • text
    ----------------------------------------------------------------------
    FORM SUB_INIT_LAYOUT .
    WA_LAYOUT-ZEBRA = ‘X’.
    WA_LAYOUT-WINDOW_TITLEBAR = ‘计量单位查询清单’.
    WA_LAYOUT-COLWIDTH_OPTIMIZE = ‘X’.
    WA_LAYOUT-BOX_FIELDNAME = ‘BOX’.
    WA_LAYOUT-COLTAB_FIELDNAME = ‘COLOR’.
    G_TITLE = ‘Fuck God’.
    WA_COLOR_4-COL = ‘1’.
    WA_COLOR_4-INT = ‘0’.
    WA_COLOR_4-INV = ‘0’.
    WA_COLOR_5-COL = ‘5’.
    WA_COLOR_5-INT = ‘0’.
    WA_COLOR_5-INV = ‘0’.
    WA_COLOR_6-COL = ‘6’.
    WA_COLOR_6-INT = ‘0’.
    WA_COLOR_6-INV = ‘0’.
  • 设置特定字段的颜色
    LOOP AT GT_RESULT ASSIGNING .
    REFRESH GT_COLOR.
    IF -SPRAS = ‘1’.
    CLEAR WA_COLOR.
    WA_COLOR-FNAME = ‘MSEHT’.
    WA_COLOR-COLOR = WA_COLOR_6.
    APPEND WA_COLOR TO GT_COLOR.
    ENDIF.
    IF -MSEH3+0(1) = ‘M’.
    CLEAR WA_COLOR.
    WA_COLOR-FNAME = ‘MSEHI’.
    WA_COLOR-COLOR = WA_COLOR_5.
    APPEND WA_COLOR TO GT_COLOR.
    ELSEIF -MSEH3+0(1) = ‘B’.
    CLEAR WA_COLOR.
    WA_COLOR-FNAME = ‘MSEHI’.
    WA_COLOR-COLOR = WA_COLOR_4.
    APPEND WA_COLOR TO GT_COLOR.
    ENDIF.
    -COLOR = GT_COLOR.
    ENDLOOP.
    ENDFORM. " SUB_INIT_LAYOUT
    &---------------------------------------------------------------------
    *& Form SUB_DISPLAY_AS_ALV
    &---------------------------------------------------------------------
  • text
    ----------------------------------------------------------------------
    FORM SUB_DISPLAY_AS_ALV .
    G_REPID = SY-REPID.
    G_SETTING-COLL_TOP_P = ‘X’. "最小化 CALLBACK-TOP-OF-PAGE.
    *ABAP List Viewer
    CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
    EXPORTING
    I_CALLBACK_PROGRAM = G_REPID
    I_STRUCTURE_NAME = ‘TYP_RESULT’
    I_GRID_TITLE = G_TITLE
    I_GRID_SETTINGS = G_SETTING
    I_CALLBACK_USER_COMMAND = ‘SUB_USER_COMMAND’
  •  I_CALLBACK_PF_STATUS_SET = 'SUB_SET_PF_STATUS'
    I_CALLBACK_TOP_OF_PAGE   = 'SUB_TOP_OF_PAGE'
    I_SAVE                   = G_SAVE
    IS_LAYOUT                = WA_LAYOUT
    IT_FIELDCAT              = GT_FIELDCAT[]
    
    TABLES
    T_OUTTAB = GT_RESULT
    EXCEPTIONS
    PROGRAM_ERROR = 1
    OTHERS = 2.
    ENDFORM. " SUB_DISPLAY_AS_ALV
    @--------------------------------------------------------------------
    *@ Form sub_user_command
    @--------------------------------------------------------------------
  • –>R_UCOMM 事务功能码
  • –>RS_SELFIELD ALV相关的数据
    ---------------------------------------------------------------------
    FORM SUB_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
    RS_SELFIELD TYPE SLIS_SELFIELD.
    CASE R_UCOMM.
    WHEN ‘&IC1’. "双击事件的功能码
    WHEN ‘CLEAR’.
    PERFORM SUB_UCOMM_CLEAR. "清空操作
    ENDCASE.
  • 刷新ALV报表
  • CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
  • IMPORTING
  • e_grid = g_grid.
  • CALL METHOD g_grid->check_changed_data.
  • CALL METHOD g_grid->refresh_table_display.
    RS_SELFIELD-REFRESH = ‘X’.
    ENDFORM. "sub_user_command
    @---------------------------------------------------------------------
    *@ FORM SUB_SET_PF_STATUS *
    @---------------------------------------------------------------------
  • 设置ALV菜单
  • 通过SE41,拷贝程序SAPLSLVC_FULLSCREEN的状态STANDARD_FULLSCREEN过来
    @---------------------------------------------------------------------
    FORM SUB_SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
    SET PF-STATUS ‘STANDARD_FULLSCREEN’.
    ENDFORM. "sub_set_pf_status
    &---------------------------------------------------------------------
    *& Form sub_top_of_page
    &---------------------------------------------------------------------
  • text
    ----------------------------------------------------------------------
    FORM SUB_TOP_OF_PAGE.
    DATA: GS_LINE TYPE SLIS_LISTHEADER.
    REFRESH GT_LIST_TOP_OF_PAGE.
  • 第一行
    CLEAR GS_LINE.
    GS_LINE-TYP = ‘H’.
    GS_LINE-INFO = ‘Xavery Hsueh’.
    APPEND GS_LINE TO GT_LIST_TOP_OF_PAGE.
  • 第二行
    CLEAR GS_LINE.
    GS_LINE-TYP = ‘S’.
    GS_LINE-INFO = ‘Created by’.
    CONCATENATE GS_LINE-INFO ‘Xavery Huseh On’ INTO GS_LINE-INFO.
    CONCATENATE GS_LINE-INFO ‘2008-08-08’ INTO GS_LINE-INFO.
    APPEND GS_LINE TO GT_LIST_TOP_OF_PAGE.
  • 第三行
    CLEAR GS_LINE.
    GS_LINE-TYP = ‘A’.
    GS_LINE-INFO = ‘Double Click’.
    APPEND GS_LINE TO GT_LIST_TOP_OF_PAGE.
  • 输出抬头
    CALL FUNCTION ‘REUSE_ALV_COMMENTARY_WRITE’
    EXPORTING
    IT_LIST_COMMENTARY = GT_LIST_TOP_OF_PAGE.
    ENDFORM. "sub_top_of_page
    &---------------------------------------------------------------------
    *& Form SUB_UCOMM_CLEAR
    &---------------------------------------------------------------------
  • 清空字段MSEHT的颜色
    ----------------------------------------------------------------------
    FORM SUB_UCOMM_CLEAR .
    LOOP AT GT_RESULT ASSIGNING .
    CLEAR -COLOR.
    ENDLOOP.
    ENDFORM. " SUB_UCOMM_CLEAR
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值