在ALV中为该行上色

2020-09-26 20:44发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


 桌子:mara,marc。
     "马克是N 181
     "玛拉是1157
     数据:马拉的lt_mara类型表,
           ls_mara TYPE mara,
           lt_marc马克类型表,
           ls_marc TYPE marc,
           开始ls_out发生0,
             mtart像mara-mtart,
             matnr像marc-matnr,
             像marc-werks一样,
             ntgew喜欢mara-ntgew,
             brgew喜欢mara-brgew,
             就像mara-brgew
           color(4)。
     数据:ls_out的结尾。
     数据:lt_out与ls_out类似,
           fcat TYPE slis_t_fieldcat_alv,
           ls_fcat与fcat类似,
            布局类型slis_layout_alv。
     字段符号:类似于fcat的行。
     参数:p_mtart TYPE mara-mtart。
     选择选项:so_werks适用于marc-werks。
     SELECT * FROM mara进入表lt_mara
       mtart = p_mtart。
     如果sy-subrc = 0。
       SELECT * FROM marc进入表lt_marc
       对于lt_mara中的所有条目
       哪里matnr = lt_mara-matnr
       和在so_werks中怪异。
       循环至lt_marc INTO ls_marc。
         读取表lt_mara INTO ls_mara
        WITH KEY matnr = ls_marc-matnr。
         ls_out-sum = ls_mara-brgew + ls_mara-ntgew。
         将ls_marc移动到ls_out。
         将ls_mara对应移动到ls_out。
         APPEND ls_out至lt_out。
         清除ls_out。
       结局。
     其他。
       消息文本-e02类型" E"。
     万一。
     通话功能'REUSE_ALV_FIELDCATALOG_MERGE'
       出口
         i_program_name = sy-repid
         i_internal_tabname ='LS_OUT'
         i_client_never_display ='X'
         i_inclname = sy-repid
       改变
         ct_fieldcat = fcat []
       例外情况
         接口不一致= 1
         程序错误= 2
         其他= 3。
     读取表fcat索引6分配 -outputlen = 15。
     环游LS_OUT。
       IF LS_OUT-SUM LT 5000。
        LS_OUT-color ='C311'。
        其他。
          LS_OUT-color ='C511'。
       万一。
       修改LS_OUT。
     结局。
     layout-info_fieldname ='COLOR'。
     通话功能'REUSE_ALV_GRID_DISPLAY'
       出口
         i_callback_program = sy-repid
         i_structure_name ='LS_OUT'
          is_layout =布局
         it_fieldcat = fcat []
       桌子
         t_outtab = lt_out
       例外情况
         程序错误= 1
         其他= 2。
 此报告中缺少WHat!为什么不为任何行上色

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


 桌子:mara,marc。
     "马克是N 181
     "玛拉是1157
     数据:马拉的lt_mara类型表,
           ls_mara TYPE mara,
           lt_marc马克类型表,
           ls_marc TYPE marc,
           开始ls_out发生0,
             mtart像mara-mtart,
             matnr像marc-matnr,
             像marc-werks一样,
             ntgew喜欢mara-ntgew,
             brgew喜欢mara-brgew,
             就像mara-brgew
           color(4)。
     数据:ls_out的结尾。
     数据:lt_out与ls_out类似,
           fcat TYPE slis_t_fieldcat_alv,
           ls_fcat与fcat类似,
            布局类型slis_layout_alv。
     字段符号:类似于fcat的行。
     参数:p_mtart TYPE mara-mtart。
     选择选项:so_werks适用于marc-werks。
     SELECT * FROM mara进入表lt_mara
       mtart = p_mtart。
     如果sy-subrc = 0。
       SELECT * FROM marc进入表lt_marc
       对于lt_mara中的所有条目
       哪里matnr = lt_mara-matnr
       和在so_werks中怪异。
       循环至lt_marc INTO ls_marc。
         读取表lt_mara INTO ls_mara
        WITH KEY matnr = ls_marc-matnr。
         ls_out-sum = ls_mara-brgew + ls_mara-ntgew。
         将ls_marc移动到ls_out。
         将ls_mara对应移动到ls_out。
         APPEND ls_out至lt_out。
         清除ls_out。
       结局。
     其他。
       消息文本-e02类型" E"。
     万一。
     通话功能'REUSE_ALV_FIELDCATALOG_MERGE'
       出口
         i_program_name = sy-repid
         i_internal_tabname ='LS_OUT'
         i_client_never_display ='X'
         i_inclname = sy-repid
       改变
         ct_fieldcat = fcat []
       例外情况
         接口不一致= 1
         程序错误= 2
         其他= 3。
     读取表fcat索引6分配 -outputlen = 15。
     环游LS_OUT。
       IF LS_OUT-SUM LT 5000。
        LS_OUT-color ='C311'。
        其他。
          LS_OUT-color ='C511'。
       万一。
       修改LS_OUT。
     结局。
     layout-info_fieldname ='COLOR'。
     通话功能'REUSE_ALV_GRID_DISPLAY'
       出口
         i_callback_program = sy-repid
         i_structure_name ='LS_OUT'
          is_layout =布局
         it_fieldcat = fcat []
       桌子
         t_outtab = lt_out
       例外情况
         程序错误= 1
         其他= 2。
 此报告中缺少WHat!为什么不为任何行上色
付费偷看设置
发送
1条回答
四川大学会员
1楼-- · 2020-09-26 21:19

如果您要在ALV中处理特定单元格的ANY/!\格式,则采用这种方式。

 form update_style使用
   x类型lvc_fname" x是'MATNR','VBELN','BELNR'...。
   y类型int4" y = 1,2,3 .....
   update_mask类型xstring
   update_style类型xstring。

 将表gt_alv读入gs_alv索引y。
 tabstyle = gs_alv-tabstyle。
 将表tabstyle读为s_style,键字段名= x。

 "检查gs_alv-tabstyle是否已经存在字段名(插入或更新)

 s_style-style = s_style-style BIT-AND update_mask。
 s_style-style = s_style-style BIT-OR update_style。

 "从s_style更新或插入gs_alv-tabstyle
 "从gs_alv更新gt_alv

 ENDFORM。


如何在ALV中为行分配颜色
(但是您不能同时具有单元格背景和字体颜色!)

使用x y'FFFFFFE0'update_style执行update_style。

 update_style可以是:

 '00000000'。 禁用任何颜色
 '00000011'。 白色字体
 '00000017'。  "红喜欢
 '00000013'。  "灰色字体
 '00000014'。  "黄色字体
 '00000015'。  "蓝色字体
 '00000016'。  "绿色字体
 '00000018'。  "橙色字体
 '00000011'。 黑色字体

 '0000000D'。  "背景深蓝色
 '0000000A'。  "背景荧光蓝色
 '00000005'。  "背景蓝色
 '00000003'。  "背景浅蓝色
 '00000000'。  "背景灰色
 '00000001'。  "背景浅灰色
 '00000004'。  " backgorund黄色
 '0000000C'。  "背景暗黄色
 '00000006'。  "背景绿色
 '0000000E'。  "背景深绿色
 '00000010'。  "背景深橙色
 '0000000F'。  "背景红色
 '00000007'。  "背景粉红色
 '00000008'。  "背景橙色
 '00000001'。  "背景标准



如果要处理可编辑的,粗体,斜体,下划线...属性

使用x y'FFFFFF9F''00000020'执行update_style。 设置为粗体
 使用x y'FFFFFF9F''00000040'执行update_style。  "未设置的粗体属性

 使用x y'FFFFF9FF''00000200'执行update_style。 下划线
 使用x y'FFFFF9FF''00000400'执行update_style。  "停止底层

 执行update_style使用x y'FFFFF57F''00000080'"斜体

 使用xy'FF9FFFFF''00200000'"热点执行update_style
 使用x y'FF9FFFFF''00400000'"执行update_style

 使用x y'F9E7FFFF''00080000'执行update_style
 使用x y'F9E7FFFF''00100000'"执行update_style 

对于对齐方式,update_mask为'DFFFF57F'
而update_style可以为:

数据alv_style_align_left_top(4)TYPE x VALUE'00000800'。
   数据alv_style_align_center_top(4)TYPE x VALUE'00001000'。
   数据alv_style_align_right_top(4)TYPE x VALUE'00001800'。
   数据alv_style_align_left_center(4)TYPE x VALUE'00002000'。
   数据alv_style_align_center_center(4)TYPE x VALUE'00002800'。
   数据alv_style_align_right_center(4)TYPE x VALUE'00003000'。
   数据alv_style_align_left_bottom(4)TYPE x VALUE'00003800'。
   数据alv_style_align_center_bottom(4)TYPE x VALUE'00004000'。
   数据alv_style_align_right_bottom(4)TYPE x VALUE'00004800'。


如果要处理边框,则必须使用以下命令修改s_style-style2:

'FFFBFFFF''00040000'"删除顶部边框
 'FFF7FFFF''00080000'"移除底部边框
 'FFFEFFFF''00010000'"删除左边框
 'FFFDFFFF''00020000'"删除右边框



在所有这些之后(甚至在set_table_for_first_display之后),您只需要调用:
我不使用FORMS而是METHODS,因为我编写了ZCL_GUI_ALV_GRID类,但是方法REFRESH可以是 程序中的表单。

方法刷新。
   数据ls_stable类型lvc_s_stbl。
   ls_stable-row ='X'。
   ls_stable-col ='X'。

   me-> set_frontend_layout(is_layout = me-> is_layout)。

   呼叫方法me-> refresh_table_display
   出口
   is_stable = ls_stable
 * i_soft_refresh ='X'"
   例外情况
   完成= 1
   其他= 2。
   ret =我。
 ENDMETHOD。



对我来说,x和y不是必填字段,因此:
如果要将属性设置为列(y未设置),可以遍历所有行

 ASSIGN mt_outtab-> *至。
   检查已分配。
   在<选项卡>分配<行>中环。
       update_style(x sy-tabix update_mask update_style)


或在要将属性设置为行(未设置x)时在目录上循环

我的循环-> ls_fcat中的get_frontend_fieldcatalog()
       update_style(ls_fcat-fieldname和update_mask update_style)
 


有关更多可能性,请检查链接
https://stackoverflow.com/questions/27000012/abap-alv-grid-merge-cells-and-style-formating-of-cells


西蒙(Simon)

一周热门 更多>