📌 목표 요약

사용자가 선택화면에서 값을 입력하기 전에,
프로그램이 마지막 사번(Employee Number) 을 조회해서 기본값이나 참고 정보를 제공하고 싶을 때
사용하는 블록이 바로 INITIALIZATION!


📚 개념 정리

✅ 1. INITIALIZATION 이벤트란?

  • Selection Screen이 보여지기 전에 한 번 실행되는 이벤트 블록.
  • 기본값 설정, 초기 세팅 작업, 선택화면에 표시할 데이터 준비 등에 자주 쓰임.
  • 프로그램이 실행되면 제일 먼저 실행됨.
  • ENDINITIALIZATION 같은 종료 구문은 없음 — 다음 블록이 나오면 끝남.

✅ 2. 예제 흐름 설명

REPORT z_screen_1.

TABLES: zemployees.    " 테이블 연결

DATA: wa_employee LIKE zemployees-employee.  " 마지막 사번 담을 변수

INITIALIZATION.

  SELECT * FROM zemployees.   " 테이블 전체에서 루프 돌면서
    wa_employee = zemployees-employee.  " 마지막 사번 계속 갱신
  ENDSELECT.

  WRITE: wa_employee.   " 마지막에 선택된 값(즉, 마지막 사번)
 
 

🧠 이 코드는 뭐하냐면?

  • zemployees 테이블에서 모든 레코드를 루프로 읽음.
  • 매번 wa_employee 에 현재 사번(employee number) 을 저장함.
  • 루프가 끝나면 가장 마지막에 읽힌 사번 = 테이블의 마지막 사번 이 됨.
  • 그 값을 사용해서 사용자에게 참고값으로 보여줄 수 있음.

🎯 이 코드의 핵심 포인트


요소 설명
INITIALIZATION 선택화면이 뜨기 전에 한 번 실행되는 블록
TABLES: zemployees. 테이블을 선언해서 SELECT 문 등에서 사용 가능하게 함
DATA: wa_employee LIKE zemployees-employee. 사번을 담을 변수 선언
SELECT * FROM zemployees. 테이블 전체 순회 (마지막 사번을 찾기 위해)
wa_employee = zemployees-employee. 루프 도는 동안 계속 값 갱신 (최종적으로 마지막 값이 저장됨)
WRITE: wa_employee. 테스트용 출력 (나중엔 선택화면에 활용)

✨ 추가 팁

  • 실제로는 이 마지막 사번(wa_employee)을 이용해서:
    • PARAMETERS p_empno DEFAULT wa_employee.
      처럼 선택화면에 기본값으로 세팅할 수 있음
  • 이렇게 하면 사용자는 이미 존재하는 가장 마지막 사번을 보고, 다음 사번을 유추하거나 참고할 수 있음

필요하면 이 사번을 기준으로:

  • 신규 사번 생성할 수도 있고
  • 유효성 검사할 수도 있고
  • 기본값으로 띄울 수도 있다!

📚 요약: AT SELECTION-SCREEN 이벤트


항목 설명
역할 사용자가 선택화면에서 "실행(Execute)" 버튼을 눌렀을 때, 입력값을 검증하는 이벤트
위치 INITIALIZATION 블록 다음, 본문 코드 이전
활용 사용자가 잘못된 값을 입력했을 경우 에러 메시지 출력하고, 선택화면을 다시 보여줌
형식 AT SELECTION-SCREEN ON <parameter>. 특정 파라미터에 대해 검사

 

🔎 실습 흐름 요약

  1. INITIALIZATION에서 마지막 사번(employee number) 을 DB에서 읽어서 wa_employee에 저장
  2. PARAMETERS 문으로 입력 필드 생성 (my_ee)
  3. AT SELECTION-SCREEN ON my_ee. 안에서
    • 사용자가 입력한 my_ee 값이 wa_employee보다 큰지 검사
    • 크면 메시지 출력 후, 다시 선택화면으로
REPORT z_screens_1.

TABLES: zemployees.

DATA: wa_empl LIKE zemployees-employee.

PARAMETERS: my_ee LIKE zemployees-employee.

INITIALIZATION.
  SELECT * FROM zemployees.
    wa_empl = zemployees-employee.
  ENDSELECT.

AT SELECTION-SCREEN ON my_ee.
  IF my_ee > wa_empl.
    MESSAGE '입력한 사번이 마지막 사번보다 큽니다!' TYPE 'E'.
  ENDIF.

START-OF-SELECTION.
  WRITE: / '입력한 사번: ', my_ee,
         / '마지막 사번: ', wa_empl.

💡 왜 START-OF-SELECTION을 써야 할까?

  • ABAP은 이벤트 기반 구조라서
  • PARAMETERS → INITIALIZATION → AT SELECTION-SCREEN 까지가 화면 입력 처리용
  • 실제 결과 출력은 START-OF-SELECTION 이후에 수행

📌 실행 흐름

  1. 프로그램 시작
  2. INITIALIZATION → 테이블에서 마지막 사번을 읽음
  3. 사용자가 my_ee에 값을 입력
  4. AT SELECTION-SCREEN → 값 검사
  5. START-OF-SELECTION → 입력 값 출력 ✅

항목 설명
PARAMETERS: 선택화면에 입력 필드를 만듬
my_ee 사용자로부터 입력받을 변수 이름 (내부적으로 사용됨)
LIKE zemployees-employee 이 변수의 데이터 타입을 zemployees 테이블의 employee 필드와 같게 지정
" 사용자 입력 파라미터 그냥 주석 (이 필드가 뭔지 설명)

 

+ Recent posts