ABAP 随笔入门简单 ALV 附单元格颜色控制

作者:SAPTAB 约 5 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, 开发
ABAP 随笔入门简单 ALV 附单元格颜色控制 - 封面图
ABAP 随笔入门简单 ALV 附单元格颜色控制 - 封面图

原创 Tab Zhu [ SAP TAB ](javascript:void\(0\);)

**点击蓝字关注我们**

富强 民主 文明 和谐

自由 平等 公正 法制

爱国 敬业 诚信 友善

_**01** _

**入门简单那ALV**

**不念过** **去**

**START**

**不畏将来**

今天写一个简单的ALV报表吧,仅显示的那种,这是前两天刚入门的ABAP小伙伴的小考题,

需求是这样的:

需求描述:

1\. 选择屏幕为:

勾选时,才显示 销售凭证的选项

ABAP 随笔入门简单 ALV 附单元格颜色控制 - 封面图
ABAP 随笔入门简单 ALV 附单元格颜色控制 - 封面图

2\. 展示订单,行项目,订单类型,物料号等信息的 ALV 展示

3\. 单击销售订单跳转到 VA03 查询页面

4\. 当订单数目小于 10 时,用红色标注

ALV效果如下

ABAP 随笔入门简单 ALV 附单元格颜色控制 - 封面图
ABAP 随笔入门简单 ALV 附单元格颜色控制 - 封面图

代码如下所示:

*&\---------------------------------------------------------------------* *& Report ZALV_SIMPLE *&\---------------------------------------------------------------------* *& *&\---------------------------------------------------------------------* REPORT zalv_simple. TABLES : vbak .

TYPES : BEGIN OF gty_data ,

vbeln TYPE vbak \- vbeln ,

posnr TYPE vbap \- posnr ,

auart TYPE vbak \- auart ,

matnr TYPE vbap \- matnr ,

maktx TYPE makt \- maktx ,

kwmeng TYPE vbap \- kwmeng ,

scol TYPE lvc_t_scol , "用来控制单元格颜色

END OF gty_data .

DATA gs_fieldcat TYPE lvc_s_fcat .

DATA gt_fieldcat TYPE lvc_t_fcat .

DATA gs_layout TYPE lvc_s_layo .

DATA gs_data TYPE gty_data .

DATA gt_data TYPE TABLE OF gty_data .

PARAMETERS p_auart TYPE vbak \- auart .

PARAMETERS p_vkorg TYPE vbak \- vkorg .

SELECT-OPTIONS : s_erdat FOR vbak \- erdat .

PARAMETERS p_cbox AS CHECKBOX USER-COMMAND uc1 .

SELECT-OPTIONS : s_vbeln FOR vbak \- vbeln MODIF ID md1 .

INITIALIZATION .

AT SELECTION-SCREEN OUTPUT .

LOOP AT SCREEN . IF screen \- name = 'P_AUART' OR screen \- name = 'P_VKORG' .

screen \- required = '2' .

MODIFY SCREEN . ENDIF . IF screen \- group1 = 'MD1' . IF p_cbox EQ 'X' .

screen \- active = '1' .

ELSE .

screen \- active = '0' .

ENDIF . MODIFY SCREEN . ENDIF . ENDLOOP .

START-OF-SELECTION .

IF p_auart IS INITIAL OR p_vkorg IS INITIAL .

MESSAGE '请输入必填项' TYPE 'S' DISPLAY LIKE 'E' .

RETURN .

ENDIF .

PERFORM frm_get_data .

*&\-----------------------------------------------------------------*

*& Form FRM_GET_DATA

*&\-----------------------------------------------------------------*

*& text

*&\-----------------------------------------------------------------*

*& \--> p1 text

*& <\-- p2 text

*&\-----------------------------------------------------------------*

FORM frm_get_data .

DATA ls_scol TYPE lvc_s_scol . "控制颜色的结构

IF p_cbox IS INITIAL .

CLEAR s_vbeln[] .

ENDIF .

"抓取销售订单,行项目,类型,物料,物料描述,订单数量

SELECT a ~ vbeln , b ~ posnr , a ~ auart , b ~ matnr , c ~

maktx , b ~ kwmeng INTO TABLE @ DATA ( lt_data )

FROM vbak AS a

INNER JOIN vbap AS b ON b ~ vbeln = a ~ vbeln

INNER JOIN makt AS c ON c ~ matnr = b ~ matnr

WHERE a ~ auart = @p_auart

AND a ~ vkorg = @p_vkorg

AND a ~ erdat IN @s_erdat

AND a ~ vbeln IN @s_vbeln

AND c ~ spras = @sy \- langu .

IF sy \- subrc EQ 0 .

MOVE-CORRESPONDING lt_data[] TO gt_data[] .

LOOP AT gt_data ASSIGNING FIELD \- SYMBOL ( <fs> ) WHERE kwmeng < 10

.

CLEAR ls_scol .

ls_scol \- fname = 'KWMENG' . ls_scol \- color \- col = '6' . "6:为红色 1:强化 0:颜色为背景 ls_scol \- color \- int = '1' . "6:为红色 1:强化 0:颜色为背景 ls_scol \- color \- inv = '0' . "6:为红色 1:强化 0:颜色为背景 APPEND ls_scol TO <fs> \- scol . ENDLOOP .

gs_layout \- sel_mode = 'D' . "模式

gs_layout \- zebra = 'X' . "ALV表格按斑马线条纹显示

gs_layout \- cwidth_opt = 'X' . "将ALV字段宽度设置为最优化

gs_layout \- ctab_fname = 'SCOL' . "ALV控制:带有复杂单元格颜色编码的字段名称

PERFORM frm_build_cat .

PERFORM frm_display .

ENDIF . ENDFORM .

*&\-----------------------------------------------------------------*

*& Form FRM_BUILD_CAT

*&\-----------------------------------------------------------------*

*& text

*&\-----------------------------------------------------------------*

*& \--> p1 text

*& <\-- p2 text

*&\-----------------------------------------------------------------*

FORM frm_build_cat . DATA lv_pos TYPE i .

DATA ls_fieldcat LIKE LINE OF gt_fieldcat .

DEFINE %%append_fieldcat .

lv_pos = lv_pos + 1 . ls_fieldcat \- col_pos = lv_pos . ls_fieldcat \- fieldname = &1 . "字段名 ls_fieldcat \- coltext = &2 . "文本 ls_fieldcat \- key = &3 . "关键字 ls_fieldcat \- ref_table = &4 . "参考的表 ls_fieldcat \- ref_field = &5 . "参考的字段 APPEND ls_fieldcat TO gt_fieldcat .

CLEAR ls_fieldcat .

END-OF-DEFINITION .

%%append_fieldcat

'VBELN' '' 'X' 'VBAK' 'VBELN' ,

'POSNR' '' 'X' 'VBAP' 'POSNR' ,

'AUART' '' '' 'VBAK' 'AUART' ,

'MATNR' '' '' 'VBAP' 'MATNR' ,

'MAKTX' '' '' 'MAKT' 'MAKTX' ,

'KWMENG' '' '' 'VBAP' 'KWMENG' .

READ TABLE gt_fieldcat ASSIGNING FIELD \- SYMBOL ( <fs> ) INDEX 1 .

IF sy \- subrc EQ 0 .

<fs> \- hotspot = 'X' . "激活热点,单机跳转功能

ENDIF .
ENDFORM .

*&\----------------------------------------------------------------*

*& Form FRM_DISPLAY

*&\----------------------------------------------------------------*

*& text

*&\----------------------------------------------------------------*

*& \--> p1 text

*& <\-- p2 text

*&\----------------------------------------------------------------*

FORM frm_display .

"调用FM 显示报表

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'

EXPORTING

• I_INTERFACE_CHECK = ' '

• I_BYPASSING_BUFFER =

• I_BUFFER_ACTIVE =

i_callback_program = sy \- repid

i_callback_pf_status_set = 'FRM_SET_STATUS' "状态栏form

i_callback_user_command = 'FRM_ALV_USER_COMMAND' "用户命令form

• I_CALLBACK_TOP_OF_PAGE = ' '

• I_CALLBACK_HTML_TOP_OF_PAGE = ' '

• I_CALLBACK_HTML_END_OF_LIST = ' '

• I_STRUCTURE_NAME =

• I_BACKGROUND_ID = ' '

• I_GRID_TITLE =

• I_GRID_SETTINGS =

is_layout_lvc = gs_layout

it_fieldcat_lvc = gt_fieldcat

• IT_EXCLUDING =

• IT_SPECIAL_GROUPS_LVC =

• IT_SORT_LVC =

• IT_FILTER_LVC =

• IT_HYPERLINK =

• IS_SEL_HIDE =

• I_DEFAULT = 'X'

• I_SAVE = ' '

• IS_VARIANT =

• IT_EVENTS =

• IT_EVENT_EXIT =

• IS_PRINT_LVC =

• IS_REPREP_ID_LVC =

• I_SCREEN_START_COLUMN = 0

• I_SCREEN_START_LINE = 0

• I_SCREEN_END_COLUMN = 0

• I_SCREEN_END_LINE = 0

• I_HTML_HEIGHT_TOP =

• I_HTML_HEIGHT_END =

• IT_ALV_GRAPHICS =

• IT_EXCEPT_QINFO_LVC =

• IR_SALV_FULLSCREEN_ADAPTER =

• IMPORTING

• E_EXIT_CAUSED_BY_CALLER =

• ES_EXIT_CAUSED_BY_USER =

TABLES

t_outtab = gt_data

• EXCEPTIONS

• PROGRAM_ERROR = 1

• OTHERS = 2

.

IF sy \- subrc <> 0 .

• Implement suitable error handling here

ENDIF . ENDFORM . "状态 FORM frm_set_status USING p_extab TYPE slis_t_extab .

SET PF-STATUS 'ZSTANDARD_FULLSCREEN' . "se41 从程序saplkkbl

状态STANDARD_FULLSCREEN 复制即可

ENDFORM . " frm_set_status

"command

FORM frm_alv_user_command USING p_ucomm TYPE sy \- ucomm

p_rs_selfield TYPE slis_selfield .

CASE p_ucomm .

WHEN '&IC1' . "单击

READ TABLE gt_data INTO DATA ( ls_data ) INDEX p_rs_selfield \-

tabindex .

IF sy \- subrc EQ 0 AND p_rs_selfield \- fieldname = 'VBELN' .

"跳转画面

SET PARAMETER ID : 'AUN' FIELD ls_data \- vbeln .

CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN . ENDIF .

WHEN OTHERS .

ENDCASE . ENDFORM .

---

**不念过** **去**

**END**

**不畏将来**

ABAP 随笔入门简单 ALV 附单元格颜色控制 - 封面图
ABAP 随笔入门简单 ALV 附单元格颜色控制 - 封面图

**SAP ABAP TAB**

微信号 : TAB_JXZHU

后台回复'ABAP'免费领取学习资料

长按二维码关注我们

SAPTAB

关于作者:SAPTAB

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「ABAP随笔入门简单ALV附单元格颜色控制.md」整理生成,仅用于内部技术分享与学习交流。