[ABAP] ALV GRID를 사용하여 셀에 색상 지정(Indivisual Cell Color Settings For ALV GRID)

14907 단어 abapSAP
안녕하세요.
이번은 ALV의 셀에 색을 붙이기 위한 샘플 코드입니다.

"Excel의 조건부 서식처럼 조건을 충족하는 경우에만 색상을 변경하고 싶습니다."
「담당자가 일람을 보고, 요 대응・주의의 내용이 있는 개소에 색칠하고 싶다」
라고 하는 요건이 있었을 경우의 대응 사례가 될까 생각합니다.

아래의 SAP COMMUNITY 등 사이트의 샘플 코드를 수정한 것을 게재합니다.
누군가의 참고가 되면 다행입니다.

참고 링크처
htps : // 안수 rs. 음 p. 코 m / 쿠에 s 치온 s / 5936331 / 세루 - 코 r - 인 - 아 lvg 리 d ぢ sp ぁ y. HTML

※ABAP OO에서의 ALV 작성의 기사는 이쪽에 정리하고 있습니다.
[ABAP] ABAP OO에서 ALV 만들기 (Let's try codeing ALV in ABAP OO) (1/N)
[ABAP] ABAP OO에서 ALV 만들기 (Let's try codeing ALV in ABAP OO) (2/N)

사양


  • 색상은 규정된 색상만 사용할 수 있습니다(16색) → 프로그램: SHOWCOLO에서 볼 수 있습니다.
  • 목록 데이터의 내부 테이블에 항목의 색 정보에 대한 항목을 갖고 색 정보를 저장합니다
  • 색 정보는 테이블 데이터 형식으로 갖기 때문에 한 줄의 여러 항목에 각 조건으로 색칠 할 수 있습니다.

  • 프로그램: SHOWCOLO 실행 결과는 다음과 같습니다.
    이 중 "INTENSIFIED""INTENSIFIED OFF"의 16색만 사용할 수 있습니다.


    처리 흐름


  • 목록 데이터의 구조 정의. 이 때 색 정보를 설정하는 항목 (여기에서는 "CELLCOLOR")을 추가로 설정
  • 데이터 추출. 위의 색상 정보 항목이 있으므로 "INTO CORRESPONDING FIELDS OF ..."에서 추출 필요
  • FIELD CALALOG의 내부 테이블 작성
  • 색상 정보가있는 목록 데이터 항목의 항목 이름 설정
  • 색상 조건에 따라 데이터를 검색하고 색상 정보 (색상 항목, 색상, 강조 표시 여부) 설정
  • ALV 표시 용 범용 M이나 클래스 메소드 등으로 표시 (여기에서는 범용 M을 사용하고 있습니다)

  • 샘플 코드



    YTEST_ALV_CELL_COLOR
    *&---------------------------------------------------------------------*
    *& Report YTEST_ALV_CELL_COLOR
    *&---------------------------------------------------------------------*
    
    REPORT ytest_ALV_CELL_COLOR.
    
    TYPE-POOLS: slis.
    INCLUDE <icon>.
    
    *- Fieldcatalog
    DATA: it_fieldcat  TYPE lvc_t_fcat,
          it_fieldcat1 TYPE slis_t_fieldcat_alv..
    DATA: x_fieldcat  TYPE lvc_s_fcat.
    DATA: x_layout    TYPE lvc_s_layo.
    
    DATA: ls_cellcolor TYPE lvc_s_scol.
    DATA: l_index TYPE sy-tabix.
    DATA: l_pos TYPE i VALUE 1.
    
    
    TYPES: BEGIN OF typ_it_vbap,
             vbeln     TYPE vbap-vbeln,
             posnr     TYPE vbap-posnr,
             matnr     TYPE vbap-matnr,
             pstyv     TYPE vbap-pstyv,
             cellcolor TYPE lvc_t_scol, "セルの色情報用項目
           END OF typ_it_vbap,
           ttyp_it_vbap TYPE STANDARD TABLE OF typ_it_vbap.
     DATA: it_vbap TYPE ttyp_it_vbap.
    
    * 一覧データ抽出
    SELECT vbeln
           posnr
           matnr
           pstyv
      FROM vbap
      UP TO 20000 ROWS
      INTO CORRESPONDING FIELDS OF TABLE it_vbap. "CELLCOLORがあるためCORRESPONDING
    
    
    * FIELD CATALOG 作成
    CLEAR: l_pos.
    l_pos = l_pos + 1.
    x_fieldcat-seltext    = 'VBELN'.
    x_fieldcat-fieldname  = 'VBELN'.
    *x_fieldcat-tabname    = 'ITAB'. "?
    x_fieldcat-col_pos    = l_pos.
    x_fieldcat-outputlen  = '10'.
    APPEND x_fieldcat TO it_fieldcat.
    CLEAR x_fieldcat.
    
    l_pos = l_pos + 1.
    x_fieldcat-seltext    = 'POSNR'.
    x_fieldcat-fieldname  = 'POSNR'.
    *x_fieldcat-tabname    = 'ITAB'.
    x_fieldcat-col_pos    = l_pos.
    x_fieldcat-outputlen  = '5'.
    APPEND x_fieldcat TO it_fieldcat.
    CLEAR x_fieldcat.
    
    l_pos = l_pos + 1.
    x_fieldcat-seltext    = 'MATNR'.
    x_fieldcat-fieldname  = 'MATNR'.
    *x_fieldcat-tabname    = 'ITAB'.
    x_fieldcat-col_pos    = l_pos.
    x_fieldcat-outputlen  = '18'.
    APPEND x_fieldcat TO it_fieldcat.
    CLEAR x_fieldcat.
    
    l_pos = l_pos + 1.
    x_fieldcat-seltext   = 'PSTYV'.
    x_fieldcat-fieldname = 'PSTYV'.
    *x_fieldcat-tabname   = 'ITAB'.
    x_fieldcat-col_pos   = l_pos.
    x_fieldcat-outputlen = '4'.
    APPEND x_fieldcat TO it_fieldcat.
    CLEAR x_fieldcat.
    
    * 一覧データテーブルにある、色情報を格納している項目名を指定
    x_layout-ctab_fname = 'CELLCOLOR'.
    
    * 条件を満たす行のセルに色付け
    LOOP AT it_vbap ASSIGNING FIELD-SYMBOL(<fs_vbap>) .
      CLEAR ls_cellcolor.
      IF <fs_vbap>-pstyv       = 'XXXX'. "色を変える条件
        ls_cellcolor-fname     = 'PSTYV'. "色を変えたい項目
        ls_cellcolor-color-col = '6'.     "色
        ls_cellcolor-color-int = '1'.     "強調表示有無
        APPEND ls_cellcolor TO <fs_vbap>-cellcolor.
      ENDIF.
    ENDLOOP.
    
    * ALV DISPLAY
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
      EXPORTING
        i_callback_program = sy-repid
        is_layout_lvc      = x_layout
        it_fieldcat_lvc    = it_fieldcat
      TABLES
        t_outtab           = it_vbap[]
      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.
    

    좋은 웹페이지 즐겨찾기