SAP/ABAP 코드

(ABAP 코드) 필드카탈로그 / 테이블 색/스타일

haramang 2022. 2. 11. 16:15

* 필드카탈로그 생성
  PERFORM FIELDCATALOG_MERGE USING 'ZINTERN31' 'GT_FCAT1'.
  PERFORM FIELDCATALOG_MERGE USING 'ZINTERN32' 'GT_FCAT2'.
  PERFORM FIELDCATALOG_MERGE USING 'ZINTERN33' 'GT_FCAT3'.

FORM fieldcatalog_merge  USING PV_TABLE PV_FCAT.


  ASSIGN (PV_FCAT) TO <FS_T_FCAT>.

  " Field catalog createa from dictionary
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      I_STRUCTURE_NAME       = PV_TABLE
    CHANGING
      CT_FIELDCAT            = <FS_T_FCAT>
    EXCEPTIONS
      INCONSISTENT_INTERFACE = 1
      PROGRAM_ERROR          = 2
      OTHERS                 = 3.

  IF SY-SUBRC NE 0.
    MESSAGE S000 WITH TEXT-M02 DISPLAY LIKE 'E'.  " Field Catalog can not be created
    LEAVE TO SCREEN 0.
  ENDIF.

ENDFORM.


* 필드카탈로그 필드 설정
  PERFORM FIELD_SETTING_CALL USING 'GT_FCAT1'.
  PERFORM FIELD_SETTING_CALL USING 'GT_FCAT2'.
  PERFORM FIELD_SETTING_CALL USING 'GT_FCAT3'.

FORM field_setting_call  USING    PV_FCAT.

  ASSIGN (PV_FCAT) TO <FS_T_FCAT>.

  LOOP AT <FS_T_FCAT> ASSIGNING <FS_S_FCAT>.
    <FS_S_FCAT>-COLDDICTXT = 'M'.

    CASE PV_FCAT.
      WHEN 'GT_FCAT1'.
        CASE <FS_S_FCAT>-FIELDNAME.
          WHEN 'BUKRS'.
            <FS_S_FCAT>-KEY = 'X'.

          WHEN 'BELNR'.
            <FS_S_FCAT>-KEY = 'X'.
            <FS_S_FCAT>-HOTSPOT = 'X'.

          WHEN 'GJAHR'.
            <FS_S_FCAT>-KEY = 'X'.

          WHEN 'STBLG'.
            <FS_S_FCAT>-HOTSPOT = 'X'.

        ENDCASE.
      WHEN 'GT_FCAT2'.
        CASE <FS_S_FCAT>-FIELDNAME.
          WHEN 'BUKRS'.
            <FS_S_FCAT>-KEY = 'X'.

          WHEN 'BELNR'.
            <FS_S_FCAT>-KEY = 'X'.
            <FS_S_FCAT>-HOTSPOT = 'X'.

          WHEN 'GJAHR'.
            <FS_S_FCAT>-KEY = 'X'.

          WHEN 'AUGBL'.
            <FS_S_FCAT>-HOTSPOT = 'X'.

          WHEN 'DMBTR'.
            <FS_S_FCAT>-DO_SUM = 'X'.

          WHEN 'WRBTR'.
            <FS_S_FCAT>-DO_SUM = 'X'.

        ENDCASE.
      WHEN 'GT_FCAT3'.
        CASE <FS_S_FCAT>-FIELDNAME.
          WHEN 'BUKRS'.
            <FS_S_FCAT>-KEY = 'X'.

          WHEN 'BELNR'.
            <FS_S_FCAT>-KEY = 'X'.
            <FS_S_FCAT>-HOTSPOT = 'X'.

          WHEN 'GJAHR'.
            <FS_S_FCAT>-KEY = 'X'.

          WHEN 'AUGBL'.
            <FS_S_FCAT>-HOTSPOT = 'X'.

        ENDCASE.
    ENDCASE.
  ENDLOOP.

ENDFORM.




FORM set_styl_col_table .


* 테이블 색, 스타일 세팅
  PERFORM SET_COL_STYLE     USING 'GS_DISP1'
                                  'GT_DISP1'
                                  'GS_FCAT1'
                                  'GT_FCAT1'.

ENDFORM.




FORM set_col_style  USING    VALUE(PS_TAB)
                             VALUE(PT_TAB)
                             VALUE(PS_FCAT)
                             VALUE(PT_FCAT).


  DATA: LS_STYL TYPE LVC_S_STYL,
        LT_STYL TYPE LVC_T_STYL,
        LS_SCOL TYPE LVC_S_SCOL,
        LT_SCOL TYPE LVC_T_SCOL.

  DATA: LT_TAB TYPE REF TO DATA,
        LS_TAB TYPE REF TO DATA.

  FIELD-SYMBOLS: <FS_T_SCOL> TYPE LVC_T_SCOL,
                 <FS_T_STYL> TYPE LVC_T_STYL.

  ASSIGN (PS_FCAT) TO <FS_S_FCAT>.
  ASSIGN (PT_FCAT) TO <FS_T_FCAT>.
  ASSIGN (PS_TAB) TO <FS_S_TAB>.
  ASSIGN (PT_TAB) TO <FS_T_TAB>.

  IF <FS_S_TAB> IS ASSIGNED AND
     <FS_T_TAB> IS ASSIGNED AND
     <FS_S_FCAT> IS ASSIGNED AND
     <FS_T_FCAT> IS ASSIGNED.

    LOOP AT <FS_T_TAB> ASSIGNING <FS_S_TAB>.
      LOOP AT <FS_T_FCAT> ASSIGNING <FS_S_FCAT>.
        CASE <FS_S_FCAT>-FIELDNAME.
          WHEN 'BUKRS'.
            LS_STYL-FIELDNAME = <FS_S_FCAT>-FIELDNAME.
            LS_STYL-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
            LS_SCOL-FNAME = <FS_S_FCAT>-FIELDNAME.
            LS_SCOL-COLOR-COL = 5.
            LS_SCOL-COLOR-INT = 0.
            LS_SCOL-COLOR-INV = 0.

          WHEN OTHERS.
            CONTINUE.

        ENDCASE.

        INSERT LS_STYL INTO TABLE LT_STYL.
        INSERT LS_SCOL INTO TABLE LT_SCOL.
      ENDLOOP.

      ASSIGN COMPONENT 'CELLSCOL' OF STRUCTURE <FS_S_TAB> TO <FS_T_SCOL>.
      ASSIGN COMPONENT 'CELLSTYL' OF STRUCTURE <FS_S_TAB> TO <FS_T_STYL>.

      IF <FS_T_SCOL> IS ASSIGNED AND
         <FS_T_STYL> IS ASSIGNED.
        INSERT LINES OF LT_STYL INTO TABLE <FS_T_STYL>.
        INSERT LINES OF LT_SCOL INTO TABLE <FS_T_SCOL>.

        UNASSIGN: <FS_T_STYL>, <FS_T_SCOL>.
      ENDIF.

      CLEAR: LS_STYL, LS_SCOL.
      CLEAR: LT_STYL[], LT_SCOL[].

    ENDLOOP.
  ELSE.
    MESSAGE S000 WITH '필드 카탈로그 생성 중 에러가 발생하였습니다.' DISPLAY LIKE 'E'.
    LEAVE TO SCREEN 0.

  ENDIF.

ENDFORM.