SAP에서 ABAP Program을 개발할 때 Standard 테이블이든, CBO 테이블이든 테이블을 많이 사용하게 됩니다.
따라서 이미 개발된 ABAP 프로그램을 분석하거나 이해하려고 할 때 프로그램에서 사용된 테이블이 무엇인지 아는 것이 무척 중요합니다.
프로그램 소스가 길지 않다면 약간의 화면 스크롤로 프로그램을 분석하는데 어려움이 없지만 이런 프로그램을 극히 드물고, 대부분 프로그램이 서브루틴이나 Function 모듈을 호출하는 등의 매우 복잡하게 개발되어져 있습니다. 이렇게 복잡한 프로그램에서 사용 중인 Table 리스트를 정리하는 것은 무척 어려운 일이 될 수 있습니다.
하지만 SAP 시스템에서는 특정 ABAP Program에서 사용 된 Table을 관리하는 별도의 테이블을 가지고 있습니다.
이번 글에서는 SAP ABAP 프로그램에서 사용 중인 Table 리스트 확인 방법 3가지에 대해 알아보겠습니다.
이번 글과 연관이 될 수 있는 SAP에서 특정 프로그램(트랜잭션)에서 사용 된 모든 테이블을 찾는 방법(SAT활용) 포스팅 글도 참고해 보시기 바랍니다.
Function 모듈 GET_TABLES 사용 방법
1. ABAP Program에서 사용 중인 Table 리스트를 확인하는 첫 번째 방법으로 ‘GET_TABLES’ Function 모듈을 사용하는 방법입니다.
2. Function 모듈을 실행하기 위해 T-CODE ‘SE37′(Function Builder)를 실행하고 Function Module에 ‘GET_TABLES‘를 입력하고 ‘Execute‘ 버튼을 실행해 줍니다.
3. 그럼 아래 화면으로 넘어오게 됩니다.
4. Import 매개변수 PROGNAME에 Table 리스트를 확인할 ABAP 프로그램을 입력하고 실행 버튼을 클릭해 줍니다.
5. PROGNAME에 ‘ZMM0010’을 입력하고 실행했을 때 아래 화면과 같이 123 엔트리가 결과로 나오는 것을 확인할 수 있습니다. 즉, 123개의 Table(Structure 포함)이 존재함을 알 수 있습니다.
6. 상세 리스트를 확인하기 위해 결과 엔트리를 클릭해 줍니다.
7. 결과 Table 리스트를 보면 실제 데이터가 존재하는 Transparenet table(트랜스패런트테이블)도 있지만 Structure(구조), Pooled table, Cluster table, View structure 등이 함께 존재하는 것을 확인할 수 있습니다.
- 실제 프로그램 목적에 의해 사용된 테이블도 있지만 프로그램이 실행될 때 사용되는 시스템 테이블이나 Function 모듈 등이 호출되었을 때 사용된 테이블도 함께 존재합니다.
8. 따라서 테이블 목록에서 실제 프로그램에 사용되는 테이블을 확인하는 추가 작업이 필요할 수 있습니다.
ABAP Dictionary의 D010TAB 테이블에서 직접 조회 방법
1. 앞 단락에서 Function 모듈을 사용하여 ABAP Program에서 사용 중인 Table 리스트를 확인했다면 이번에는 테이블에서 직접 리스트를 확인하는 방법입니다.
2. 사실 앞에서 설명한 Function 모듈의 소스를 보면 D010TAB 테이블을 SELECT 해 오는 정말 간단한 프로그램임을 알 수 있습니다.
3. T-CODE ‘SE11′(ABAP Dictionary) 또는 ‘SE16′(데이터브라우저)를 실행해서 Database table에 ‘D010TAB‘을 테이블 조회 화면으로 넘어옵니다.
4. 아래 화면에서 화살표로 표시한 ‘내용‘ 아이콘을 클릭합니다.
5. MASTER 필드에 Table 리스트를 확인할 ABAP Program을 입력하고 실행 버튼을 클릭합니다.
6. 앞 단락의 Function 모듈에서와 동일한 결과를 얻을 수 있습니다.
직접 프로그램을 개발해서 ABAP Program에서 사용중인 Table 리스트 조회
1. 앞 단락에서 Function 모듈을 사용하거나 직접 Database Table에서 리스트를 가져올 때 실제 테이블 이외에 Structure(구조) 등이 포함되어 결과적으로 리스트의 엔트리 수가 많은 단점이 있었습니다.
2. 그래서 프로그램에서 사용 중인 테이블 이름이 있는 ‘D010TAB‘ 테이블과 SAP 테이블에 대한 정의를 가진 ‘DD02L‘ 테이블 2개를 활용해서 직접 프로그램으로 개발해서 ABAP Program에서 사용 중인 Table 리스트를 조회하는 프로그램을 만들어 보겠습니다.
3. 먼저 프로그램 실행 결과 화면부터 보도록 하겠습니다.
- ABAP/4 주 프로그램에는 조회할 ABAP Program을 입력합니다.
- Table category에는 테이블 유형을 입력합니다. 테이블 유형은 아래와 같습니다.
- TRANSP : 트랜스패런트 테이블(Transparent Tables)
- INTTAB : 구조(Structure)
- CLUSTER : 클러스터 테이블(Cluster table)
- POOL : 풀 테이블(Pooled table)
- VIEW : 일반 뷰 구조(Generated view structure)
- APPEND : 추가 구조(Append Structure)
4. 프로그램과 테이블 유형을 입력하고 실행합니다.
5. 실행 결과 ZMM0010 프로그램에서 사용 되는 트랜스패런트 테이블만 리스트로 가져옵니다.
6. 위 ABAP 프로그램의 소스는 아래와 같습니다.
REPORT YMM0001. TABLES: D010TAB, DD02L. DATA : BEGIN OF IT_TAB OCCURS 0, MASTER LIKE D010TAB-MASTER, TABNAME LIKE D010TAB-TABNAME, END OF IT_TAB. SELECT-OPTIONS : S_PROG FOR D010TAB-MASTER, S_TABCLS FOR DD02L-TABCLASS. *— INITIALIZATION. INITIALIZATION. S_TABCLS-SIGN = ‘I’. S_TABCLS-OPTION = ‘EQ’. S_TABCLS-LOW = ‘TRANSP’. APPEND S_TABCLS. *— START-OF-SELECTION. START-OF-SELECTION. SELECT A~MASTER A~TABNAME INTO CORRESPONDING FIELDS OF TABLE IT_TAB FROM D010TAB AS A INNER JOIN DD02L AS B ON A~TABNAME = B~TABNAME WHERE A~MASTER IN S_PROG AND B~TABCLASS IN S_TABCLS AND B~AS4LOCAL = ‘A’. LOOP AT IT_TAB. WRITE:/ IT_TAB-MASTER, IT_TAB-TABNAME. ENDLOOP. |
- DD02L-TABCLASS : Table category(테이블 유형)를 지정합니다.
- DD02L-AS4LOCAL : 테이블의 활성화 상태를 나타냅니다. ‘A'(활성화 상태)
- INITIALIZATION.에서 테이블 유형을 ‘TRANSP’ – 트랜스패런트 테이블(Transparent Tables)만 지정해 주었습니다.
- BSEG와 같은 클러스터 테이블을 포함하고자 할 경우 테이블 유형을 추가해서 실행하면 됩니다.
마무리
ABAP 프로그램을 분석하고 이해하는데 있어 사용하는 Table의 목록을 확인하는 것은 가장 기본이라고 할 수 있습니다.
달리 말하면 ABAP Program에서 사용 중인 Database table만 확인이 되면 해당 프로그램의 개발 목적이 어느 정도 파악된다고 볼 수도 있습니다.
※ 함께 읽으면 도움이 될 만한 다른 포스팅 글입니다.
- ABAP SELECT 문에서 동적으로 테이블 지정 방법(동적 필드 지정 포함)
- ABAP Dictionary의 테이블유지보수생성기로 테이블 유지보수 다이얼로그를 생성하고 활용하는 방법
- ABAP Dictionary에서 테이블 인덱스(Index)를 생성하고 활성화 하는 방법
- SAP 데이터베이스 테이블을 직접 업데이트하는 방법(SE16N_INTERFACE)
- ABAP 튜닝을 위해 READ TABLE의 BINARY SEARCH를 사용하는 방법
- ABAP에서 인덱스(Index)를 사용하여 실행 시간을 단축 시키는 방법 – 튜닝(Tuning) 가이드
♥ 이 글이 도움이 되었기를 바랍니다. ^-^
댓글로 흔적을 남겨 주세요.