인포마틱 블로그

[SAP] ABAP Subscreen (1) 구조와 기본 개념 / 정적 Subscreen 호출 방식 (고정된 서브스크린) 구현하기 본문

SAP/서브스크린 Subscreen

[SAP] ABAP Subscreen (1) 구조와 기본 개념 / 정적 Subscreen 호출 방식 (고정된 서브스크린) 구현하기

인포마틱 2025. 3. 21. 16:10

SAP GUI에서 데이터를 효과적으로 표시하고 사용자 입력을 처리하기 위해 다양한 UI 기술이 활용됩니다. 그중 Subscreen은 메인 화면 내에 작은 화면을 삽입하여 데이터를 표시하거나 입력받을 수 있는 강력한 기능입니다.

이번 글에서는 정적 Subscreen을 활용하여 하나의 화면에 서브스크린을 단순히 삽입하는 케이스를 중심으로 ABAP 다이얼로그 프로그래밍에서 어떻게 사용되는지 설명하겠습니다.

 

 


 

 

❓ Subscreen이란?

Subscreen(서브스크린)은 SAP ABAP 다이얼로그 프로그래밍에서 메인 화면(Screen 100) 내에서 특정 데이터를 독립적으로 표시할 수 있도록 설계된 작은 화면입니다. 서브스크린은 단독으로 실행되지 않고 반드시 메인 스크린 내에서 호출되어야 하며, 별도의 PBO/PAI(Process Before Output / Process After Input) 로직을 가질 수 있습니다.

 

✅ Subscreen의 특징

  • 메인 스크린 내에서 별도로 동작하지만, 부모 스크린에 종속됨.
  • 독립적인 PBO(Process Before Output) / PAI(Process After Input) 로직을 가짐.
  • 데이터를 다양한 형태로 표시할 수 있음 (예: 사용자 입력, 조회 결과 표시 등).
  • 메인 프로그램과 데이터를 공유하며, 특정 조건에 따라 다른 Subscreen을 동적으로 호출 가능.
  • OK_CODE 및 Application Toolbar부모 스크린에서 제어됨 (✔️서브스크린에서 직접 설정 불가).

 

🛠️ Subscreen이 사용되는 대표적인 예시

  • SAP 표준 트랜잭션에서 하단에 위치한 탭(Tab) 영역 → 예: ME21N의 항목 입력 영역
  • 조건에 따라 다르게 표시되는 입력 필드 그룹 → 예: 고객 정보 입력 시 ‘기업 고객’과 ‘개인 고객’에 따라 다른 입력 필드 제공
  • 동적 UI 구성 → 예: 특정 버튼을 클릭하면 추가 정보 영역이 나타나는 경우

 

 

 


🎯 정적 Subscreen 호출 방식 – 고정된 서브스크린 연결하기

가장 기본적인 Subscreen 사용 방식은, 부모 화면에서 항상 동일한 서브스크린을 고정적으로 호출하는 방법입니다. 이 방식은 구조가 단순하고 이해하기 쉬워서 Subscreen 개념을 처음 배우는 사람에게 적합합니다.

탭처럼 복잡한 구조 없이, 하나의 화면에 서브스크린을 단순히 삽입하는 형식으로 사용되며, 화면 전환이 필요하지 않은 상황에서 많이 사용됩니다.
SAP GUI에서 자주 볼 수 있는 기본 정보 섹션이나 조회 결과 요약 같은 UI 요소에 적합합니다.

 

 

1. Subscreen 설계하기

  • Screen 100: 조회 버튼을 눌러 데이터를 검색
  • Screen 200: 검색된 데이터 표시
  • Subscreen 0201: 항공사 정보 표시

사용자가 조회 버튼을 누르면 조건에 맞는 데이터가 메인 화면(Screen 200)에 표시되며, 동시에 Subscreen을 통해 항공사 정보도 표시됩니다.

 

2. Subscreen 구현하기

 

📌 데이터 준비 - TABLES 사용

SCARR 테이블에서 항공사 정보를 조회하기 위해 TABLES을 선언합니다.

 

데이터 조회 모듈 (Screen 100)

XXXXXTOP

TABLES SCARR.

 ✅ TABLES SCARR를 선언하면 SCARR 변수를 별도로 선언하지 않아도 사용 가능하며, SELECT SINGLE * INTO SCARR 구문에서 SCARR 구조체를 자동으로 매핑할 수 있습니다.

 ✅ HEADER LINE 있는 인터널 테이블은 이름이 동일하면 변수 이름과 구조 = 테이블 이름과 구조라는 특징이 있습니다. 따라서 생략이 가능하고 변수가 TABLES로 선언되는지 확인해봐야합니다.

 

XXXXXI01 (PAI)

MODULE user_command_0100 INPUT.
  SELECT SINGLE *
    FROM SCARR
    INTO SCARR
    WHERE CARRID = SDYN_CONN-CARRID.
ENDMODULE.

 

  데이터 표시 모듈 (Screen 200)

 ✔️ Tables에 잘 담기는지 확인합니다. (SCARR - Get from Dictonary)

 

 

3. Subscreen Area 생성하기

Screen 200에서 Subscreen Area를 추가하여 데이터를 표시합니다.

 

✔️ 좌측 툴바의 Subscreen Area를 활용합니다.

 

 ✔️ Subscreen 이름은 보통 SUB로 설정합니다.

 

 

✔️ 스크린 201 생성 (부모 스크린의 속성을 상속받음)

 

  Screen 201

  • Without Application Toolbar 설정
  • OK_CODE 설정 불가 (부모에서 상속받음)

 

✔️ Subscreen은 왼쪽 상단에 배치

 

 

📌 스크린 배치 주의사항

  • 서브스크린은 왼쪽 상단에 배치하는 것이 SAP 기본 규칙.
  • Subscreen Area를 이용하여 특정 데이터(항공사 정보)를 독립적으로 관리.

 

 

4.  Subscreen 선언 문법

1️⃣ 명확한 프로그램 이름을 지정하는 방법

PROCESS BEFORE OUTPUT.
	CALL SUBSCREEN 'SUBAREA'
		INCLUDING 'PROGRAM_NAME' 'DYNPRO_NUMBERS'
PROCESS AFTER INPUT.
	CALL SUBSCREEN 'SUBAREA'
  • 특정 프로그램(PROGRAM_NAME)과 화면 번호(DYNPRO_NUMBERS)를 명확하게 지정하는 방식입니다.
  • 장점: 가장 직관적인 방법이며, 프로그램과 화면을 명확하게 정의할 수 있습니다.
  • 주의할 점: 프로그램명이 하드코딩되어 있어 유지보수 시 프로그램 변경이 필요할 수 있습니다.

 

✔️ PAI에서 CALL SUBSCREEN을 사용하는 이유

  • 사용자가 입력한 데이터를 반영하려면 PAI에서도 명시적으로 호출해야 함.
  • Display 모드에서는 생략 가능하지만, 입력 값을 반영해야 하는 경우 반드시 필요.
  • 습관적으로 PAI에 CALL SUBSCREEN을 넣어주는 것이 좋은 코드 스타일.

 

2️⃣ 시스템 변수를 사용하는 방법

CALL SUBSCREEN SUB INCLUDING SY-CPROG 'DYNPRO_NUMBERS'.
  • SY-CPROG(현재 실행 중인 프로그램의 이름)을 활용하여 SUBSCREEN을 호출하는 방식입니다.
  • 장점: 현재 실행 중인 프로그램의 이름을 자동으로 가져오기 때문에 프로그램이 변경되더라도 수정할 필요가 없습니다.
  • 주의할 점: 실행 중인 프로그램이 아닌 다른 프로그램의 SUBSCREEN을 호출해야 하는 경우, 명확한 프로그램 이름을 지정하는 방법(1번)이 필요할 수 있습니다.

 

3️⃣ 글로벌 변수를 사용하는 방법

CALL SUBSCREEN SUB INCLUDING SY-CPROG GV_DYNNR.
  • 글로벌 변수(GV_DYNNR)를 사용하여 동적으로 SUBSCREEN을 설정하는 방식입니다.
  • 주의할 점:
    • 글로벌 변수는 자동으로 초기화되지 않으므로 값이 반드시 채워져 있어야 합니다.
    • 만약 GV_DYNNR에 값이 설정되지 않으면 기본값인 '0000'이 설정되며, 존재하지 않는 화면 번호로 인해 덤프(DUMP)가 발생할 수 있습니다.
    • 따라서 글로벌 변수를 사용할 경우 반드시 초기값을 설정해야 합니다.

 

글로벌 변수 사용 예제

DATA GV_DYNNR TYPE SY-DYNNR VALUE '0201'.
  • GV_DYNNR 변수는 SUBSCREEN 호출을 위한 화면 번호를 저장하는 역할을 합니다.
  • 초기값 설정 (VALUE '0201'): 초기값을 설정하지 않으면 '0000'이 할당되어 오류가 발생할 수 있습니다.

 

 

5. Subscreen 연결하기

Subscreen을 메인 스크린에 연결하려면 CALL SUBSCREEN 문을 사용합니다.

 

  Screen 200

PROCESS BEFORE OUTPUT.
 MODULE STATUS_0200. 
 MODULE MODIFY_SCREEN.
 MODULE SET_ICON. 

 CALL SUBSCREEN SUB INCLUDING 'SAPMZCARRIER1_07' '201'. " CALL SUBSCREEN PBO "

PROCESS AFTER INPUT.
 CALL SUBSCREEN SUB. " CALL SUBSCREEN PAI "
 MODULE USER_COMMAND_0200.

✅ CALL SUBSCREEN는 일반적으로 PBO는 아래쪽에 PAI는 위쪽에 선언합니다.

 

📌 PBO & PAI 실행 흐름

  • PBO에서 CALL SUBSCREEN을 호출하면 해당 Subscreen의 PBO가 실행됨 → 부모 스크린으로 돌아감.
  • PAI에서 CALL SUBSCREEN을 호출하면 서브스크린의 PAI가 실행됨 → 부모 스크린의 PAI로 돌아감.

 

 

6. T코드를 통해 작동 확인하기