본문 바로가기

SAP셀프스터디/삼성에서 ERP로 먹고사는 컨설턴트가 알려주는 ABAP of SAP

Part 1 기본 프로그램 - 01. Hello World는 사양합니다. (1/3)

최초 작성일: 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.