본문 바로가기
IT/SAP

ABAP-Module Pool and Report Program

by 명랑사회 2025. 1. 8.
반응형

1. Module Pool (Dialog Programming)

특징:

  • 대화형 프로그램: Module Pool은 사용자가 데이터를 입력하거나 상호작용할 수 있는 화면(UI)을 제공하는 프로그램입니다.
  • 트랜잭션 코드로 실행: Module Pool 프로그램은 특정 트랜잭션 코드로 실행됩니다.
  • 스크린(Screen): 화면(Screen)과 화면 흐름(Flow Logic)을 정의하여 사용자가 데이터를 입력하고 처리할 수 있는 인터페이스를 제공합니다.
  • Event-driven 방식: 사용자가 특정 동작(버튼 클릭, 필드 입력 등)을 하면, 해당 이벤트를 처리하는 코드가 실행됩니다.

주요 구성 요소:

  • Screens: SAP GUI에 표시되는 화면으로, 여러 화면 번호를 가질 수 있습니다.
  • PBO (Process Before Output): 화면이 표시되기 전에 실행되는 코드.
  • PAI (Process After Input): 사용자가 입력하거나 액션을 취한 후 실행되는 코드.
  • GUI STATUS: MENU BAR, STANDARD TOOLBAR, APPLICATION TOOLBAR를 포함한다.
  • Modules: PBO 및 PAI 내에서 호출되는 서브루틴처럼 동작하는 모듈.

예제:

1. 데이터베이스 테이블 생성

먼저, 데이터 저장을 위한 테이블을 생성합니다. 예를 들어, ZSTUDENT라는 테이블을 생성합니다.

ZSTUDENT 테이블 필드:

  • STUDENT_ID (CHAR 10)
  • STUDENT_NAME (CHAR 50)
  • AGE (NUM 3)

2. Module Pool 프로그램 생성

Step 1: 프로그램 생성

  1. SE80 → 새로운 프로그램을 생성합니다.
  2. 프로그램 유형을 Module Pool로 설정합니다.
  3. 프로그램 이름: ZMP_STUDENT.

Step 2: 스크린(Screen) 생성

  1. 화면(Screen) 번호: 100.
  2. 화면 제목: Student Data Entry.

3. 코드 예제

** 프로그램 선언 **
PROGRAM ZMP_STUDENT.

TABLES: ZSTUDENT.

DATA: gv_student_id   TYPE zstudent-student_id,
      gv_student_name TYPE zstudent-student_name,
      gv_age          TYPE zstudent-age.

* Screen Flow Logic에 필요한 Modules 선언
MODULE STATUS_100 OUTPUT.
MODULE USER_COMMAND_100 INPUT.

** 스크린 100 Flow Logic (PBO & PAI) **
PROCESS BEFORE OUTPUT.
  MODULE STATUS_100.

PROCESS AFTER INPUT.
  MODULE USER_COMMAND_100.

* PBO: 화면 초기 상태 설정
MODULE STATUS_100 OUTPUT.
  SET PF-STATUS 'SCREEN100'.  " GUI 상태 (필요 시 정의)
ENDMODULE.

* PAI: 버튼 클릭 등 이벤트 처리
MODULE USER_COMMAND_100 INPUT.
  CASE SY-UCOMM.
    WHEN 'SAVE'.
      " 입력 데이터 저장
      INSERT INTO ZSTUDENT VALUES (gv_student_id, gv_student_name, gv_age).
      MESSAGE 'Student data saved successfully' TYPE 'S'.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.​

4. 스크린 디자인

  1. Screen Painter를 사용하여 100번 스크린을 설계합니다.
  2. 필드 추가:
    • gv_student_id (Student ID)
    • gv_student_name (Student Name)
    • gv_age (Age)
  3. 버튼 추가:
    • 저장(Save): Function Code = SAVE.
    • 종료(Exit): Function Code = EXIT.

5. 실행 방법

  1. 트랜잭션 코드 생성 (SE93) → 프로그램 ZMP_STUDENT 연결.
  2. 트랜잭션 코드 실행 후, 학생 데이터를 입력하고 저장 버튼을 눌러 확인.

2. Report 프로그램

특징:

  • 출력 중심 프로그램: Report 프로그램은 데이터베이스에서 데이터를 검색(Query)하고 결과를 출력(리스트 형태)하는 데 사용됩니다.
  • 단순 실행: 트랜잭션 코드 없이 SE38 또는 SA38에서 실행 가능합니다.
  • 리스트 출력: 기본적으로 표 형식의 출력 결과를 생성합니다.
  • Event-driven 아님: 단순히 데이터를 검색하고 결과를 표시하며, 화면 상호작용은 제한적입니다.
  • Screen : 1000 번 스크린 자동생성

주요 구성 요소:

  • SELECT 문: 데이터베이스에서 데이터를 검색하기 위해 사용.
  • ALV (ABAP List Viewer): 데이터를 보기 좋은 표 형식으로 출력하기 위해 사용.
  • START-OF-SELECTION: 프로그램이 실행될 때 기본적으로 실행되는 이벤트 블록.

예제:

REPORT ZREP_STUDENT.

* ALV를 위한 데이터 선언
TABLES: ZSTUDENT.

DATA: gt_students TYPE TABLE OF zstudent, " 학생 데이터를 담을 내부 테이블
      gs_student  TYPE zstudent.        " 작업용 구조

* ALV 사용을 위한 추가 데이터 선언
DATA: gt_fieldcat TYPE lvc_t_fcat,     " ALV 필드 카탈로그
      gs_fieldcat TYPE lvc_s_fcat,
      alv_layout  TYPE lvc_s_layo.     " ALV 레이아웃 옵션

* 선택 화면에서 조건 입력
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_id   TYPE zstudent-student_id OBLIGATORY, " 학생 ID 조건
            p_name TYPE zstudent-student_name.          " 학생 이름 조건
SELECTION-SCREEN END OF BLOCK b1.

* 텍스트 요소
INITIALIZATION.
  text-001 = '학생 검색 조건'. " 선택 화면 제목

* START-OF-SELECTION: 데이터베이스에서 데이터 읽기
START-OF-SELECTION.

  SELECT * FROM zstudent
    INTO TABLE gt_students
    WHERE student_id = p_id
      AND ( student_name LIKE p_name OR p_name IS INITIAL ).

  IF sy-subrc <> 0.
    MESSAGE '조건에 맞는 데이터가 없습니다.' TYPE 'I'.
    EXIT.
  ENDIF.

* END-OF-SELECTION: ALV 출력
END-OF-SELECTION.

  PERFORM build_fieldcat. " 필드 카탈로그 생성
  alv_layout-zebra = 'X'. " ALV 줄무늬 표시

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_structure_name = 'ZSTUDENT'
      is_layout        = alv_layout
    TABLES
      t_outtab         = gt_students
      t_fieldcat       = gt_fieldcat
    EXCEPTIONS
      program_error    = 1
      others           = 2.

  IF sy-subrc <> 0.
    MESSAGE 'ALV 출력 중 오류 발생' TYPE 'E'.
  ENDIF.

* FORM: 필드 카탈로그 생성
FORM build_fieldcat.

  CLEAR gs_fieldcat.
  gs_fieldcat-fieldname = 'STUDENT_ID'.
  gs_fieldcat-seltext_m = '학생 ID'.
  APPEND gs_fieldcat TO gt_fieldcat.

  CLEAR gs_fieldcat.
  gs_fieldcat-fieldname = 'STUDENT_NAME'.
  gs_fieldcat-seltext_m = '학생 이름'.
  APPEND gs_fieldcat TO gt_fieldcat.

  CLEAR gs_fieldcat.
  gs_fieldcat-fieldname = 'AGE'.
  gs_fieldcat-seltext_m = '나이'.
  APPEND gs_fieldcat TO gt_fieldcat.

ENDFORM.

 


주요 차이점

항목Module PoolReport 프로그램

목적 사용자 인터페이스 제공 및 데이터 입력 처리 데이터 검색 및 결과 출력
실행 방식 트랜잭션 코드 필요 SE38/SA38에서 실행 가능
UI 구성 복잡한 화면 및 이벤트 처리 가능 단순 출력 화면 (리스트)
사용자 상호작용 강력한 사용자 상호작용 지원 제한적 (출력 중심)
복잡성 더 복잡하고 구조화된 방식 단순하고 빠르게 개발 가능

어떤 경우에 사용?

  • Module Pool: 복잡한 사용자 인터페이스, 데이터 입력 및 검증이 필요한 경우.
  • Report 프로그램: 단순히 데이터를 검색하고 분석 결과를 출력해야 하는 경우.
반응형