简单函数ALV示例+设置某单元格格式实战练习

简单粗暴直接上代码

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.
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值