Search
🥴

9. ABAP EXCEL 프로그램 디버깅

ABAP EXCEL 프로그램

CALL SCREEN 100 이라고 나와있는 애들이 모듈 풀 프로그램이라고 한다
100을 더블클릭하면
이렇게 모듈이라고 나온다

모듈 풀 프로그램 정리

1. 모듈 풀 프로그램이란?

모듈 풀 프로그램(Module Pool Program)은 화면(SCREEN)을 생성하고 관리하는 SAP 프로그램이다. CALL SCREEN 100 같은 구문이 포함되면 모듈 풀 프로그램으로, INCLUDE 문을 통해 여러 모듈을 관리하는 방식으로 구성된다.

2. INCLUDE 문의 역할과 목적

INCLUDE 문은 소스를 묶어 재사용하거나, 소스를 정리하기 위해 사용한다.
TOP: 데이터 선언부 및 전역변수 (위에 선언한 부분 데이터 선언부)
SEL: 조회 화면 선언부 및 전역변수(검색 조회화면 선언부)
C01: 클래스 선언부
F01: PERFORM 구문 모음
I01: INPUT 관련 동작 (버튼 입력 시 동작)
O01: OUTPUT 관련 동작 (출력할 때 동작, 예: ALV)
INCLUDE는 순서대로 작성해야 한다.
예를 들어, TOP에 선언된 변수를 SEL에서 사용할 수 있다.
따라서 TOP이 가장 먼저 오고 이후에 다른 INCLUDE가 위치해야 한다.
(TOP 선언부 ⇒ SEL 선언부 ⇒ C01 선언부(TOP과 SEL에서 사용한거))
(F01 PERFORM(C01에서 선언한 클래스도 사용) ⇒ I01/O01 에서도 PERFORM 구문에서 쓰인다.

* CALL SCREEN 구문이 들어가면 IO1, O01이 들어간다

3. 프로세스와 모듈

모듈 풀 프로그램에는 PROCESS BEFORE OUTPUT (PBO)PROCESS AFTER INPUT (PAI)가 존재한다.
PBO: 출력 전에 수행할 동작을 지정 (예: 버튼 및 타이틀바 설정, ALV 출력)
MODULE STATUS_0100.: 버튼 툴바와 타이틀바 설정
MODULE SET_ALV_0100.: ALV 데이터 출력
PAI: 입력 후에 수행할 동작을 지정 (예: 버튼 클릭 시 동작)
MODULE USER_COMMAND_0100.: BACK, CANCEL, EXIT 등의 버튼 기능 정의
MODULE SAVE_DATA.: 데이터 저장
MODULE EDIT_DATA.: 데이터 편집

모듈 풀 프로그램은 항상 CALL SCREEN 부분을 봐야한다.

ALV를 출력하는게 있다면 어떤걸 출력하는지 봐보자 (분석하는 방법)
r1이 X면 GT_ZSC 를 출력하고 r2가 X면 GT_ZSCARR를 출력
GT_ZSC가 어디서 왔는디 볼려면 더블클릭하고
TOP에서 쓰여져 있는걸 발견. 그럼 다시 더블 클릭하면
여기저기에서 쓰여졌다고 딱 나온다.
이 부분을 더블클릭하면
아 그럼 이 파일 위치에서 APPEND 해서 쌓아주고 있구나 라고 파악할 수 있다.
일반적으로 분석하는 방법
PERFORM 구문을 파악하면 된다
TOP
OLE2_OBJECT가 엑셀 매크로 돌릴 때 필요한.
엑셀 매크로 돌릴때 필요한 구조.
조회화면에서 구성되는 부분을 채울 때 필요함.
버튼 추가하는 용도.
버튼에 아이콘을 넣는 용도
엑셀을 다운해서 받아오는 경로를 만드는 부분
동기화해서 여기서 매크로를 돌릴 때 필요한 구조들
출력하는 부분
업로드 출력할 때 들어가는 구조
전체 조회할 때 필요한 구조(엑셀 업로드할 때 필요한)
SEL
한칸이 있는데
128길이의 문자가 선언. 128자리 칸이 생성.
심지어 도움말 창에도 파일명은 도움말이 없음
근데 실행하면 도움말이 있다.
그건 도움말을 넣는 소스가 있어서 그렇다!
다시 SEL파일로 돌아와서 해당 부분을 보면 첫번째 버튼을 만든거다.
상단의 첫번째 버튼을 말한다
그래서 F01 가면 아이콘 만드는 부분이 있다.
그래서 보면 FUNCTXT_01에 넣어주는걸 볼 수 있음.
그래서 아까 테이블에 5가지 버튼 관련 컬럼이 정해져 있었다.
INITIALIZATION에서 처음 출력할때 조회화면에서 뭔가 구성하는 부분이 정해짐.(버튼 구성)
화면에서 뭐를 누르면 SELECTION-SCREEN 을 탄다.
그리고 해당 조회화면에서 SAMPLE 다운관련 정의가 저 박스안에 정의되어 있음.
그래서 ACT_FUNCTION_KEY를 누르면 F01파일에 작동하는 소스가 보여진다.
첫번째 버튼은 FC01로 작동하고 누르면 엑셀을 다운하라
해당 부분은 파일이름을 마음대로 바꿔서 사용해도 된다.

4. 모듈 풀 프로그램의 구성 순서

1.
REPORT: 메인 프로그램에서 중복된 부분을 제거하고 구조화한다.
2.
인클루드 생성: _ 앞에 프로그램 이름을 붙여 본인 프로그램에 맞게 수정한다.
3.
스크린 생성: 메인 화면에서 CALL SCREEN 100 구문을 통해 화면을 생성한다.
4.
스크린 설정: Layout을 이용하여 화면을 디자인하고, 버튼과 콘트롤을 추가한다.
5.
Flow Logic 설정: Flow Logic 탭에서 PBO와 PAI의 동작을 작성한다.
6.
Function Key와 Title 설정: SET PF-STATUSSET TITLEBAR를 설정하여 버튼과 타이틀바를 구성한다.

5. SAP 시스템 변수와 ICON 사용

아이콘 코드는 4자리로 설정하고 ICON 테이블NAME 필드를 활용하여 아이콘을 설정한다.
SSCRFIELDS-FUNCTXT: 시스템 필드 중 FUNCTXT는 함수 키 텍스트를 설정하는데 사용된다. 문자열로 선언하여 아이콘과 텍스트를 정의할 수 있다.
G_FUNCTION_KEY-ICON_ID = ICON_XLS. G_FUNCTION_KEY-ICON_TEXT = 'SAMPLE다운'. G_FUNCTION_KEY-TEXT = 'SAMPLE다운'. SSCRFIELDS-FUNCTXT_01 = G_FUNCTION_KEY.
ABAP
복사

6. 엑셀 기능과 OLE2_OBJECT

OLE(Object Linking and Embedding)를 이용해 Excel 파일을 조작할 수 있다.
OLE2_OBJECT 타입으로 Excel 객체를 생성하여 다양한 Excel 기능을 인수인계 받을 수 있다.
엑셀 객체 생성 및 활성화
CREATE OBJECT GO_APPLICATION 'Excel.Application'. SET PROPERTY OF GO_APPLICATION 'Visible' = 1.
ABAP
복사
워크북과 시트 생성 및 저장
CALL METHOD OF GO_APPLICATION 'Workbooks' = GO_WBOOK. CALL METHOD OF GO_WBOOK 'Add'.
ABAP
복사
데이터 입력 셀에 데이터를 넣는 것은 PERFORM 구문을 사용해 개별 셀에 데이터를 작성할 수 있다.
PERFORM FILL_CELL USING GO_APPLICATION 01: 01 'MANDT', 02 'CARRID', 03 'CARRNAME'.
ABAP
복사
파일 경로 설정 및 저장
CONCATENATE GV_DIRECTORY '\' P_LS_KEY_OBJID '.xlsx' INTO GV_PATH. CALL METHOD OF GO_WBOOK 'SaveAs' EXPORTING #1 = GV_PATH.
ABAP
복사

7. 참조 문서

SAP 아이콘 코드 리스트 등은 아래 링크에서 확인할 수 있다.
이 정리를 통해 모듈 풀 프로그램의 구조와 각 단계에서 사용되는 모듈 및 인클루드 파일의 역할을 이해할 수 있다. SAP 시스템에서는 프로그램 유지보수성과 재사용성을 높이기 위해 이러한 구조를 적극 활용한다.

디버깅해보자

조회화면 전에 실행하는 부분에 디버깅해보자
싱글스탭 한번 눌러주고
TEXT는 마우스 올릴때 옆에 뜨는 글들
싱글 스탭 한번 누르니까
아이콘이 들어왔다. 보면 4자리로 잡혀있는데
다시 디버깅 화면으로가서 해당 마우스 올려보면 @J2@ 이렇게 뜬다. 실제 들어간 코드다.
아이콘을 볼 수 있는 테이블들이 있다.
se11로 가서
조회하면
와…
보면 NAME부분을 넣으면 아이콘을 자동 인식하게 되어 있다
그래서 C 4로 선언하고 ICON 테이블의 NAME 필드를 넣어주면 아이콘으로 인식!
아니면 아까 @J2@ 이렇게 넣어줘도 인식한다.
그치만 NAME 필드로 넣어주면 유추가 가능하다.
STRUCTURE가 아니라 필드다
그래서 한번 더 싱글스탭해서 보면
필드에 스트런처 한 행을 넣고 있다.
한줄로 합쳐져서 들어간다. 만자열로 선언되어야 들어간다!
SEL파일 가서
3의 버튼을 추가해주자
F01파일가서
노트 아이콘이 생성된걸 볼 수 있다!
버튼을 눌렀을 때 이벤트가 발생하는 부분에 디버깅을 해보자
이 화면에 있는 버튼을 누르면 다 작동한다
상단의 저장버튼을 눌러보면
싱글스탭 한번 누르면 해당 위치로 이동되는데
SSCRFIELDS-UCOMM 에 SSCRFIELDS는 조회화면 시스템 변수고 거기에 있는 UCOMM 필드에 펑션 코드가 들어갈거다 라는 뜻이다.
SY-UCOMM도 같은 값을 받아온다
그래서 저장버튼의 코드는 SPOS로 받아온거다.
조회화면에서 실행버튼을 하면 ONLI의 값을 받아온다.
그럼 아까 note 아이콘 넣어준건 무슨 값으로 받아올까
* 엑셀 다운 PERFORM DOWNLOAD_EXCEL_SMPL USING LS_KEY-OBJID.
ABAP
복사
LS_KEY-OBJID라는 변수를 PERFORM 구문 안에서도 사용하겠다 라는 뜻
로컬변수를 받아와서 거기서만 인식되는걸 PERFORM구문안에서도 사용하게 하기 위해 사용
보면 새로운 로컬변수를 받아옴(파일제목을 새로받아옴)
= LS_KEY-OBJID를 p_ls_key_objid 로컬변수로 새로 받아옴
클래스를 인수인계 해준다. 라는 뜻
TOP파일가면
선언되어 있다
OBJFILE TYPE REF TO CL_GUI_FRONTEND_SERVICES.
ABAP
복사
CL_GUI_FRONTEND_SERVICES 클래스를 사용하다는 것을 인수인계 받을거다…라는 뜻
수 많은 메서드들이 있다.
이걸 사용할 수 있는 권한을 가진다.
아직 아무것도 없던 OBJFILE이
넘어가니까
바뀐다.
보면 모든 메서드를 사용할 수 있게 바뀐거다
이제 클래스가 일하지 않고 OBJFILE이 대신 일을 한다.
더블 클릭하면
어떻게 사용하라는 소스랑 Signature누르면 더 사용방법이 잘 나온다.
→(화살표) 이게 대신 일을 하고 있다는 뜻
두번째 사용되는 메소드도 클래스 설명가서 참고해서 보면된다
이렇게 선택창이 뜨고
CREATE OBJECT GO_APPLICATION 'Excel.Application'.
ABAP
복사
이것도 TOP에 선언되었던 OLE2_OBJECT의 구조를 가져오면 엑셀의 기능을 인수인계 받을 수 있는 상태가 된거다.
* 엑셀 애플리케이션 객체를 생성하고 실행 상태로 설정 SET PROPERTY OF GO_APPLICATION 'Visible' = 1. " 엑셀 화면을 보이도록 설정 * 워크북 설정 및 OPEN CALL METHOD OF GO_APPLICATION 'Workbooks' = GO_WBOOK. " 엑셀 워크북 객체 생성 CALL METHOD OF GO_WBOOK 'Add'. " 새로운 워크북 추가 * 첫 번째 시트를 선택하여 활성화 CALL METHOD OF GO_APPLICATION 'Worksheets' = GO_SHEET " 워크시트 객체 생성 EXPORTING #1 = 1. " 첫 번째 시트를 선택 CALL METHOD OF GO_SHEET 'Activate'. " 선택한 시트를 활성화 SET PROPERTY OF GO_SHEET 'Name' = 'ZSCARR'. " 시트 이름을 'ZSCARR'로 설정 GET PROPERTY OF GO_APPLICATION 'ActiveWorkbook' = GO_WBOOK. " 활성화된 워크북 객체 가져오기 * 데이터 입력 - FILL_CELL을 통해 개별 셀에 데이터를 입력 PERFORM FILL_CELL USING GO_APPLICATION 01: 01 'MANDT', " 첫 번째 셀에 'MANDT' 입력 02 'CARRID', " 두 번째 셀에 'CARRID' 입력 03 'CARRNAME', " 세 번째 셀에 'CARRNAME' 입력 04 'CURRCODE', " 네 번째 셀에 'CURRCODE' 입력 05 'URL'. " 다섯 번째 셀에 'URL' 입력 * 파일 경로 설정 - 파일을 저장할 디렉터리와 파일명 설정 CONCATENATE GV_DIRECTORY '\' P_LS_KEY_OBJID '.xlsx' INTO GV_PATH. " 경로와 파일명을 결합하여 파일 경로 생성 * 실행 파일 저장 - 설정된 경로에 엑셀 파일 저장 CALL METHOD OF GO_WBOOK 'SaveAs' EXPORTING #1 = GV_PATH. " 생성된 파일을 지정된 경로에 저장 IF SY-SUBRC = 0. " 문제 없으면 정상 다운 MESSAGE '엑셀정상다운' TYPE 'S'. ELSE. MESSAGE '엑셀다운에러' TYPE 'S'. ENDIF. ENDFORM.
ABAP
복사