简单粗暴直接上代码
TABLES:ekko,
ekpo.
TYPES: BEGIN OF ty_alv,
status TYPE char4,
bukrs TYPE ekko-bukrs,
butxt TYPE t001-butxt,
lifnr TYPE ekko-lifnr,
name1 TYPE lfa1-name1,
txz01 TYPE ekpo-txz01,
netpr TYPE ekpo-netpr,
waers TYPE ekko-waers,
wkurs TYPE ekko-wkurs,
bsart TYPE ekko-bsart,
bedat TYPE ekko-bedat,
cellcolor TYPE lvc_t_scol,
END OF ty_alv.
DATA:gt_alv TYPE STANDARD TABLE OF ty_alv,
lt_alv_sum TYPE STANDARD TABLE OF ty_alv,
ls_alv_sum TYPE ty_alv,
ls_alv TYPE ty_alv,
ls_alv_tmp TYPE ty_alv,
l_netpr TYPE ekpo-netpr,
ls_cellcolor TYPE lvc_s_scol,
lv_index TYPE sy-tabix.
TYPES:BEGIN OF ty_t001,
butxt TYPE t001-butxt,
bukrs TYPE t001-bukrs,
END OF ty_t001.
DATA:lt_t001 TYPE STANDARD TABLE OF ty_t001.
TYPES:BEGIN OF ty_lfa1,
name1 TYPE lfa1-name1,
lifnr TYPE lfa1-lifnr,
END OF ty_lfa1.
DATA:lt_lfa1 TYPE STANDARD TABLE OF ty_lfa1.
SELECTION-SCREEN BEGIN OF BLOCK bk WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: s_bukrs FOR ekko-bukrs,
s_bsart FOR ekko-bsart,
s_bedat FOR ekko-bedat,
s_lifnr FOR ekko-lifnr.
SELECTION-SCREEN END OF BLOCK bk.
INITIALIZATION.
START-OF-SELECTION.
PERFORM frm_get_data.
PERFORM frm_show_alv.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_data .
SELECT ekko~lifnr
ekpo~txz01
ekpo~netpr
ekko~waers
ekko~wkurs
ekko~bukrs
ekko~bsart
ekko~bedat
INTO CORRESPONDING FIELDS OF TABLE gt_alv
FROM ekko INNER JOIN ekpo ON ekko~ebeln = ekpo~ebeln
WHERE ekko~bukrs IN s_bukrs
AND ekko~bsart IN s_bsart
AND ekko~bedat IN s_bedat
AND ekko~lifnr IN s_lifnr.
IF gt_alv IS NOT INITIAL.
SELECT bukrs
butxt
FROM t001
INTO CORRESPONDING FIELDS OF TABLE lt_t001
FOR ALL ENTRIES IN gt_alv
WHERE bukrs = gt_alv-bukrs.
ENDIF.
IF gt_alv IS NOT INITIAL.
SELECT
name1
lifnr
FROM lfa1
INTO CORRESPONDING FIELDS OF TABLE lt_lfa1
FOR ALL ENTRIES IN gt_alv
WHERE lifnr = gt_alv-lifnr.
ENDIF.
CLEAR ls_alv.
SORT gt_alv BY bukrs txz01 lifnr.
LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<lfs_alv>).
ls_alv-bukrs = <lfs_alv>-bukrs.
ls_alv-lifnr = <lfs_alv>-lifnr.
ls_alv-txz01 = <lfs_alv>-txz01.
ls_alv-waers = <lfs_alv>-waers.
ls_alv-wkurs = <lfs_alv>-wkurs.
READ TABLE lt_t001 INTO DATA(ls_t001) WITH KEY bukrs = <lfs_alv>-bukrs.
IF sy-subrc = 0.
<lfs_alv>-butxt = ls_t001-butxt.
ENDIF.
READ TABLE lt_lfa1 INTO DATA(ls_lfa1) WITH KEY lifnr = <lfs_alv>-lifnr.
IF sy-subrc = 0.
<lfs_alv>-name1 = ls_lfa1-name1.
ENDIF.
ls_alv-netpr = <lfs_alv>-netpr.
CLEAR: ls_alv,ls_t001,ls_lfa1.
ENDLOOP.
LOOP AT gt_alv INTO ls_alv.
ls_alv_tmp = ls_alv.
l_netpr = l_netpr + ls_alv-netpr.
AT END OF txz01.
ls_alv_tmp-netpr = l_netpr.
IF ls_alv_tmp-netpr <= 10000 AND ls_alv_tmp-netpr > 0.
ls_alv_tmp-status = icon_led_green.
ELSEIF ls_alv_tmp-netpr > 10000 AND ls_alv_tmp-netpr <= 20000.
ls_alv_tmp-status = icon_led_yellow.
ELSEIF ls_alv_tmp-netpr > 20000.
ls_alv_tmp-status = icon_led_red.
ENDIF.
APPEND ls_alv_tmp TO lt_alv_sum.
CLEAR:l_netpr,
ls_alv_tmp.
ENDAT.
ENDLOOP.
*设置单元格颜色
*--- Set Cell colors
* COL = 1 to 7,
* INT = 1 = Intensified on, 0 = Intensified off
* INV = 1 = Text Color, 0 = Background Color
LOOP AT lt_alv_sum INTO ls_alv_sum.
lv_index = sy-tabix.
IF ls_alv_sum-netpr => 1000.
ls_cellcolor-fname = 'NAME1'.
ls_cellcolor-color-col = '7'.
ls_cellcolor-color-int = '1'.
ls_cellcolor-color-inv = '0'.
APPEND ls_cellcolor TO ls_alv_sum-cellcolor.
CLEAR ls_cellcolor.
MODIFY lt_alv_sum FROM ls_alv_sum INDEX lv_index TRANSPORTING cellcolor.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SHOW_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_show_alv .
DATA:lt_fieldcat TYPE lvc_t_fcat,
ls_layout TYPE lvc_s_layo,
ls_fieldcat TYPE lvc_s_fcat,
lt_sort TYPE lvc_t_sort,
ls_sort TYPE lvc_s_sort.
ls_layout-zebra = abap_on. "斑马线显示,颜色隔行交替显示
ls_layout-cwidth_opt = abap_on. "ALV网格(单元格)宽度设置为自动最优化,按输出内容宽度自动调整
ls_layout-ctab_fname = 'CELLCOLOR'.
* ls_layout-info_fname = 'COLOR'.
DEFINE add_fieldcat.
ls_fieldcat-fieldname = &1.
ls_fieldcat-coltext = &2.
ls_fieldcat-just = &3.
ls_fieldcat-outputlen = &4.
ls_fieldcat-do_sum = &5.
ls_fieldcat-qfieldname = &6.
ls_fieldcat-ref_table = &7.
ls_fieldcat-ref_field = &8.
ls_fieldcat-edit = &9.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
END-OF-DEFINITION.
add_fieldcat 'STATUS' '状态' '' '' '' '' '' '' ''.
add_fieldcat 'BUKRS' '公司代码' '' '' '' '' 'EKKO' 'BUKRS' 'X' .
add_fieldcat 'BUTXT' '公司名称' '' '' '' '' 'T001' 'BUTXT' '' .
add_fieldcat 'LIFNR' '供应商账户号' '' '' '' '' 'EKKO' 'LIFNR' '' .
add_fieldcat 'NAME1' '供应商名称' '' '' '' '' 'LFA1' 'NAME1' '' .
add_fieldcat 'TXZ01' '短文本' '' '' '' '' 'EKPO' 'TXZ01' '' .
add_fieldcat 'NETPR' '金额' '' '' '' '' 'EKPO' 'NETPR' ''.
add_fieldcat 'WAERS' '货币码' '' '' '' '' 'EKKO' 'WAERS' '' .
add_fieldcat 'WKURS' '汇率' '' '' '' '' 'EKKO' 'WKURS' '' .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
* I_CALLBACK_PF_STATUS_SET = 'FRM_PF_STATUS'
i_callback_user_command = 'FRM_USER_COMMAND'
is_layout_lvc = ls_layout
it_fieldcat_lvc = lt_fieldcat
* IT_SORT_LVC = LT_SORT
TABLES
t_outtab = lt_alv_sum
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.