본문 바로가기
ABAP/소스코드

[SAP/Report] Table/Structure 의 필드 리스트 조회

by name_text 2023. 5. 7.

Table/Structure 의 필드 리스트 조회

DDIF_FIELDINFO_GET

SALV 를 이용한 간단한 리포트

 

테이블이나 구조의 필드 리스트를 조회할때 SE11, SE16N 같은 표준 트랜잭션을 많이 이용하고 있습니다.

표준 트랜잭션이 여러 많은 기능을 제공하고 데이터도 바로 조회할 수 있어서 편리하죠.

 

다만, 엑셀 작업을 하기 위해 필드 리스트를 복사 하거나 필드의 추가정보(변환루틴, 참조 필드 등)을 보려면 이것 저것 왔다 갔다 해야 하나보니 약간의 불편함이 있더라고요...

 

그래서, 별거 아니긴 하지만 SAP에서 제공하는 필드정보 조회 Function(DDIF_FIELDINFO_GET)과 SALV를 이용하여 아주 간단한 리포트를 만들어 봤습니다.

 

필드정보를 조회할 테이블/구조와 필드명 언어 입력
필드 리스트 조회 결과

#1. Report 소스코드

REPORT ZCMR9002.
  PARAMETERS: P_TABNAM TYPE DD02L-TABNAME MEMORY ID DTB OBLIGATORY,		"테이블/구조명
              P_LANGU  TYPE SY-LANGU DEFAULT SY-LANGU OBLIGATORY.		"필드내역의 언어
  DATA: GT_DFIES_TAB  TYPE STANDARD TABLE OF  DFIES.

START-OF-SELECTION.
  CLEAR GT_DFIES_TAB.
  "테이블/구조의 필드 정보 조회
  CALL FUNCTION 'DDIF_FIELDINFO_GET'
    EXPORTING
      TABNAME              = P_TABNAM
      LANGU                = P_LANGU
    TABLES
      DFIES_TAB            = GT_DFIES_TAB
    EXCEPTIONS
      NOT_FOUND            = 1
      INTERNAL_ERROR       = 2
      OTHERS               = 3
            .
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE 'S' 
    NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4 
    DISPLAY LIKE 'E'.
  ENDIF.
END-OF-SELECTION.
  IF GT_DFIES_TAB[] IS NOT INITIAL.
  	"SALV로 리포트 표시
    PERFORM CALL_SALV TABLES GT_DFIES_TAB.
  ENDIF.

*&---------------------------------------------------------------------*
*& Form CALL_SALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM CALL_SALV TABLES FT_ITAB.
  DATA : LR_SALV      TYPE REF TO CL_SALV_TABLE,
         LR_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS_LIST,
         LR_DISPLAY   TYPE REF TO CL_SALV_DISPLAY_SETTINGS,
         LR_LAYOUT    TYPE REF TO CL_SALV_LAYOUT,
         LS_PROGRAM   TYPE SALV_S_LAYOUT_KEY,
         LR_COLUMNS   TYPE REF TO CL_SALV_COLUMNS_TABLE,
         LR_COLUMN    TYPE REF TO CL_SALV_COLUMN_TABLE,
         LS_COLOR     TYPE LVC_S_COLO,
         LR_SELECTION TYPE REF TO CL_SALV_SELECTIONS,
         LR_SORTS     TYPE REF TO CL_SALV_SORTS,
         LR_AGGR      TYPE REF TO CL_SALV_AGGREGATIONS,
         LR_FILTER    TYPE REF TO CL_SALV_FILTERS,
         LR_EVENT_TAB TYPE REF TO CL_SALV_EVENTS_TABLE.

  DATA: LV_LVC_TITLE TYPE LVC_TITLE.
  SELECT
    DDLANGUAGE,
    DDTEXT
  FROM DD02T
  WHERE TABNAME EQ @P_TABNAM
    AND AS4LOCAL EQ 'A'
  INTO TABLE @DATA(LT_DD02T).
  IF SY-SUBRC EQ 0.
    SORT LT_DD02T BY DDLANGUAGE.
    READ TABLE LT_DD02T INTO DATA(LS_DD02T) WITH KEY 
                                            DDLANGUAGE = SY-LANGU BINARY SEARCH.
    IF SY-SUBRC NE 0.
      READ TABLE LT_DD02T INTO LS_DD02T WITH KEY DDLANGUAGE = 'E' BINARY SEARCH.
      IF SY-SUBRC NE 0.
        READ TABLE LT_DD02T INTO LS_DD02T INDEX 1.
      ENDIF.
    ENDIF.
    CONCATENATE P_TABNAM '-' LS_DD02T-DDTEXT INTO LV_LVC_TITLE SEPARATED BY SPACE.
  ENDIF.

  "ALV 생성
  CALL METHOD CL_SALV_TABLE=>FACTORY
    IMPORTING
      R_SALV_TABLE = LR_SALV
    CHANGING
      T_TABLE      = FT_ITAB[].

  "ALV 의 기능키 표시
  LR_FUNCTIONS = LR_SALV->GET_FUNCTIONS( ).
*  LR_FUNCTIONS->SET_DEFAULT( ).
  LR_FUNCTIONS->SET_ALL( ).

  "ALV 선택 모드 설정
  LR_SELECTION = LR_SALV->GET_SELECTIONS( ).
  LR_SELECTION->SET_SELECTION_MODE( IF_SALV_C_SELECTION_MODE=>ROW_COLUMN ).

  "ALV의 레이아웃 셋팅(줄무늬 패턴, 헤더 텍스트 등)
  LR_DISPLAY = LR_SALV->GET_DISPLAY_SETTINGS( ).
  LR_DISPLAY->SET_STRIPED_PATTERN( CL_SALV_DISPLAY_SETTINGS=>TRUE ).
  LR_DISPLAY->SET_LIST_HEADER( LV_LVC_TITLE ).

  "ALV의 레이아웃 저장 기능 활성화
  LR_LAYOUT = LR_SALV->GET_LAYOUT( ).
  LS_PROGRAM-REPORT = SY-REPID.
  LS_PROGRAM-HANDLE = '100'.
  LR_LAYOUT->SET_KEY( LS_PROGRAM ).
  LR_LAYOUT->SET_DEFAULT( ABAP_TRUE ).
  LR_LAYOUT->SET_SAVE_RESTRICTION( CL_SALV_LAYOUT=>RESTRICT_NONE ). 
  
  "ALV 열(필드카타로그) 설정
  LR_COLUMNS = LR_SALV->GET_COLUMNS( ).
  LR_COLUMNS->SET_OPTIMIZE( ABAP_TRUE ).    "열 너비 최적화

  "ALV 정렬
  LR_SORTS = LR_SALV->GET_SORTS( ).
  LR_SORTS->ADD_SORT( 'POSITION' ).

  "ALV 표시
  LR_SALV->DISPLAY( ).
ENDFORM.

 

댓글