최초 작성일: 25.08.27
최종 작성일: 25.08.27

selection screen
화면 번호 : 1000번
비고 : SAP 정의
main screen
화면 번호 : 100번
비고: 사용자 정의
CBO 프로그램 짜는 과정(단계)
1) 변수 선언 : 프로그램에서 사용할 도구들을 정하고 이름을 지어주는 것
2) 조회화면 구성 : 어떤 항공 기종을 조회조건으로 줄것인지 정하는 화면
3) 데이터를 쌓아 놓는 창고인 테이블에서 조회조건에 해당하는 데이터를 가져와 준비하는 과정
4) 준비된 데이터를 결과화면에 출력

1. 변수선언
도구 : 테이블 하나, 클래스 2개
테이블은 데이터를 저장해 두는 곳
클래스는 실체가 아닌 개념이라 바로 가져다 쓸 수 없음
(예를 들어 특정되지 않은 가스버너와 냄비는 개념이고 그 가스버너와 냄비를 특정할떄 실체가 됨)

이 프로그램에서 CL_GUI_ALV_GRID 와 CL_GUI_CUSTOM_CONTAINER 라는 두개의 클래스를 활용하고
이 둘을 참조한 객체 2개를 만듬 ( 냄비 1에 해당되는 것이 'g_grid1' , 냄비라는 개념은 'cl_gui_alv_grid; 'cl_gui_alv_grid'라는 개념을 참조해서 냄비 1을 을만들어라 -> 이때 참조하라는 명령어가 ' TYPE REF TO' 임
테이블 선언
REPORT ZSAP01.
tables : saplane.
객체 선언
DATA : g_grid1 TYPE REF TO cl_gui_alv_grid.
DATA : g_container1 TYPE REF TO cl_gui_custom_container.
2. 조회화면 구성
'SELECTION - OPTION'라는 명령어를 입력하면, SAP가 미리 정의해놓은 1000번 화면이 바로 만들어짐
's_pltype'이라는 조회조건을 정의하는 데, 이것은 앞에서 선언해 놓은 ' saplane' 테이블의 'planetype'이라는 필드의 속성을 가져다 쓰겠다는 의미임.
SELECT-OPTIONS: s_pltype for saplane-planetype.






3. 데이터 준비
조회 화면에서 정한 조회조건에 맞게 데이터를 테이블에서 가져와 준비하는 단계
[데이터 조회 시작 이벤트]
START-OF-SELECTION.
SELECT * FROM saplane
WHERE planetype IN @s_pltype
INTO TABLE @DATA(gt_saplane).
@s_pltype -> select-options 에서 조회 조건
INTO TABLE @DATA(gt_saplane) -> 테이블로부터 쿼리한 데이터를 internal table인 gt_saplane 안에 넣는 것
4. 결과 화면 구성
4-1. 100번 화면(SCREEN) 만들기
CALL SCREEN 100.
| 조회화면 | 결과화면 | |
| 정의 | SAP 지정화면 | 사용자정의화면 |
| 화면번호 | 1000 (변경할수 없음) | 사용자가 정의 (보통 100번으로 지정하고 여러 개가 필요할 경우 100,200,300 등으로늘려감) |
| 호출 명령어 | SELECT-OPTIONS | CALL SCREEN |
100번 스크린생성
4-2. 흐름 로직 설정하기
PROCESS BEFORE OUTPUT.
* MODULE STATUS_0100.
*
PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0100.
| 조회화면(1000번) | 결과화면(100번) | ||
| 시작 구문 | START-OF-SELECTION | PROCESS BEFORE OUTPUT(PBO) | 화면에 결과를 나타내기 전에 할일 정의 |
| 종료 구문 | END-OF-SELECTION | PROCESS AFTER INPUT (PAI) | 결과화면에서 어떤 입력을 받은 수에 하는 일 정의 |


4-3. PBO 처리하기
PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
module pbo_0100.
PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.
MODULE pbo_0100 OUTPUT.
CREATE OBJECT g_container1
EXPORTING
container_name = 'CONTAINER'.
CREATE OBJECT g_grid1
EXPORTING
i_parent = g_container1.
CALL MEtHOD g_grid1->set_table_for_first_display
EXPORTING
i_structure_name = 'SAPLANE'
CHANGING
it_outtab = gt_saplane[].
ENDMODULE.


① GUI_STATUS_0100 : 기능키 3개 정의 (BACK, EXIT, SAVE)
② GUI_TITLE_0100 : 프로그램 제목 정의
③ PBO_0100 : 그리드 형태의 리토프 정의 ( ALV Grid)
CREATE OBJECT g_container1
EXPORTING
container_name = 'CONTAINER'.
레이아웃 정할때 CONTAINER 라는 이름으로 저 만큼의 영역을 정해서 저만큼만 보임
PBO_0100에서 g_container1 이라는 이름으로 그영역을 쓰겠다고 생성함

CREATE OBJECT g_grid1
EXPORTING
i_parent = g_container1.
g_container1 라는 영역 위에 올릴 alv grid를 생성하는 구문
g_grid1 라는 이름으로 g_container1 영역위에 alv grid를 생성하겠다는 뜻
여기 까지가 결과화면에 alv grid를 보여주기 직전까지 준비 완료
CALL MEtHOD g_grid1->set_table_for_first_display
EXPORTING
i_structure_name = 'SAPLANE'
CHANGING
it_outtab = gt_saplane[].
g_grid1를 쓸 수 있는 필살기가 여러 개 있는 데 -> 그 필살기를 메소드(method)
여러 method 중에 준비해 둔 데이터를alv grid에 뿌려주는 필살기가 'set_table_for_first_display' 임
뿌려줄 데이터 구조는 saplane에 맞추고 ( i_structure_name = 'saplane')
출력할 데이터는 'gt_saplane'이라는 이름을 가진 내부 테이블에서 가져와라 ( it_outtab = gt_saplane[])
PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
module pbo_0100.
PROCESS AFTER INPUT.
MODULE exit AT EXIT-COMMAND.'SAP셀프스터디 > 삼성에서 ERP로 먹고사는 컨설턴트가 알려주는 ABAP of SAP' 카테고리의 다른 글
| Part 1 기본 프로그램 - 02. ABAP의 T코스(4/4) - Docking (0) | 2025.09.02 |
|---|---|
| Part 1 기본 프로그램 - 02. ABAP의 T코스(3/4) - splitter (0) | 2025.09.02 |
| Part 1 기본 프로그램 - 02. ABAP의 T코스(2/4) (1) | 2025.09.02 |
| 객체 지향 프로그래밍 (2) | 2025.09.01 |
| Part 1 기본 프로그램 - 02. ABAP의 T코스(1/4) (0) | 2025.09.01 |