본문 바로가기

Easy Abap 2.0

[3주차] Chapter 12 Report Program Part1

1. Overview

 

ABAP 프로그래밍의 기본이 되는 Type-1 Program을 흔히 Report Program. Executable Program 등 이라 한다.

데이터베이스에서 원하는 데이터를 추출하고 해당 데이터를 정보로 활용할 수 있는 구조로 변경하여

리포트(report)형식으로 조회한다.

 

<리포트 프로그램 Flow>

  1. START
  2. Initialization을 만남
  3. SELECTION-SCREEN에서 사용자의 입력 사항에 따라 해당하는 엔트리를 읽음
  4. 읽은 엔트리의 데이터를 가공하여 결과를 보여줌

 

2. 프로그램 생성

<프로그램 생성 순서>

 

① T-CODE : SE80 트랜잭션을 실행하여 개발 패키지 ZABAP(각자 명명한 것이 다를 수 있음)을 선택한 후

마우스 오른쪽 버튼을 클릭하여 [Create]-> [Program]을 선택한다.

 

② 프로그램 이름을 입력한다

 

③ 프로그램 Type은 'Executable program' 으로 선택한 후 저장한다

 

<프로그램 속성(attribute)>

 

① Type(유형)

유형 이름 설명
Executive Program (1) T-CODE 없이 SE38에서 직접 실행 가능
SELECTION SCREEN과 Output List로 구성
Logical DB 사용 가능
Module Pool (M) Screen Painter Screen (M)
Screen module Processing
T-code나 Menu function에 의해서만 실행됨
Include (I) 다음 프로그램에서 Include로 호출되는 내장형 프로그램
Subroutine/ (S) External PERFORM 구문에서 호출해서
사용 가능한 FORM 문을 구성
기타 유형 F~K는 Program Attribute에서 변경할 수 없으며
각각의 Builder에서 관리함.

 

② Status(상태)

 

프로그램 상태에 따라 특정 Utility 사용 불가

 

예시) 시스템 프로그램을 선택하면 Debug 불가

 

③ Authorization Group (권한 그룹)

 

프로그램 실행/수정과 관련된 권한 그룹 할당.
보안 관련 프로그램이면 권한 그룹 세팅 필요.

 

④ Logical database : Type-1인 경우만 선택

 

LDB를 사용하여 프로그램을 구현한다.

사용 빈도가 높은 테이블의 데이터를 조회하기 위해 JOIN이 자주 사용되고,

조회 조건이 유사한 경우를 하나의 패키지로 생성하여 재사용할 수 있도록 해주는 것이 LDB이다.

 

 

3. 프로그램 구조(선언)

Report 프로그램은 다음과 같이 크게 3가지 구조로 분류할 수 있다.

 

1) 데이터 선언부와 조회 선택 화면(SELECTION SCREEN) -1번

2) 실행 시점까지의 Event -2번

3) 데이터를 뿌려주는 List Event -3번

 

 

[1] 프로그램 선언문

 

프로그램을 선언하는 구문에는 REPORT <프로그램 이름> 의 기본 구조에 추가 옵션들이 존재한다.

 

1) 프로그램 List Heading 지정

 

프로그램을 실행한 리스트 화면에 프로그램 이름을 기본 Heading으로 사용할 지 결정하게 된다.

사용자가 원하는 Heading을 넣으려면 List Process 이벤트의
TOP-OF-PAGE에서 스크립트를 추가하면 된다. 

 

2) LIne- Size

 

Output List의 넓이를 지정한다.

넓이를 0으로 설정하거나, Line-Size 구문을 삭제하면 표준 길이를 사용하게 된다.

 

3) Message ID

 

ABAP 프로그램에서 사용할 Message Id를 선언한다.

 

[2] DATA 선언

 

프로그램에서 사용하게 될 테이블과 데이터를 선언하게 된다.

복잡한 프로그램에서는 INCLUDE(프로그램 이름) TOP 구문에 포함된다.

INCLDUE 프로그램은 모듈 풀 프로그램에서 주로 사용된다.

 

[3] SELECTION SCREEN

 

프로그램의 조회 조건을 입력할 수 있는 SELECTION SCREEN을 생성하는 부분이다.

Report 프로그램이 실행되면, SELECTION SCREEN이 자동으로 생성된다.

SELECTION SCREEN은 사용자와 상호 작용을 하기 위한 INPUT 필드와 같이

선택 조건을 입력할 수 있는 화면을 제공한다.

 

3.1) PARAMETERS(파라미터)

 

PARAMETERS는 사용자가 값을 입력하도록 INPUT 필드를 정의한다.

PARAMETER 변수와 같이 TYPE을 정의하지 않으면 기본 CHAR 1자리 TYPE이 정의된다.

PARAMETERS에 입력된 값은 데이터를 조회하는 SELECT 구문의 조건 등에 사용된다.

파라미터는 1개의 값만 입력받을 수 있으며, 체크박스로 보이는 것과 같은 다양한 옵션을 추가할 수 있다.

 

<파라미터 옵션>

구문 옵션
DEFAULT  'A', 기본 값을 세팅함
TYPE CHAR10. Data Type을 정의함
LENGTH n, TYPE C, N, X or P에만 적용되며, 길이를 정의함
DECIMALS dec 소수점 자리를 지정함
LIKE g 오브젝트와 같은 데이터 타입 선언
MODIF ID modid screen-group을 지정하여,
그룹별로 화면 속성을 제어하기 위함
NO=DISPLAY 화면에 보이지 않음
UPPER/LOWER CASE 대소문자를 구별함
OBLIGATORY 필수 필드로 지정함,
화면 필드에는 물음표(?)가 표시됨
AS CHECKBOX 체크 박스로 표현함
RADIOBUTTON GROUP radi 라디오 버튼으로 표현함
두 개 이상의 필드를 Radio Group으로 선언하여야 함
VISIBLE LENGTH vlen 필드의 일부 길이까지만 화면에 보이게 설정함
VALUE CHECK 테이블의 필드 속성을 상속받아 
Check Table 값을 체크할 수 있음(외부 키)
LIKE (g)  파라미터를 동적으로 선언할 수 있음.
실행 시에 g는 ABAP DIctionary에 존재하는 
오브젝트가 할당되어야 함.
AS LISTBOX ABAP Dictionary 필드의 Input Help와 연결되면
LIST BOX로 보임
USER-COMMAND ucom 체크 박스와 라디오 버트에만 적용.
라디오 버튼을 클릭하면 USER COMMAND를 수행함
AS SEARCH PATTERN LDB에서 사용하며 Search Help의 키값으로
인터널 테이블을 구성함
VALUE-REQUEST LDB에서 F4 VALUE HELP를 추가할 수 있도록 함
HELP-REQUEST VAULE-REQUEST와 유사하며, 필드 HELP를 생성함

 

3.2) SELECT-OPTIONS

 

PARAMETERS가 하나의 값만 입력받을 수 있는 INPUT 필드인 반면에,
SELECT-OPTIONS은 2개의 INPUT 필드를 통해 다양한 조건 값(selection criteria)을 입력받을 수 있다.

RANGE 변수와 같은 구조(Internal Table)를 가지고 있다.

SELECT-OPTIONS은 FOR 구문과 항상 병행하여야하며, 이때 FOR 구문 다음에 올 수 있는 값은

TABLES로 선언된 테이블 필드명이나 DATA로 선언된 변수이어야 한다.

 

<SELECT-OPTIONS 옵션>

구문 발생
DEFAULT g 기본 값을 세팅함
DEFAULT g...
OPTIOIN op...
SIGN s
OPTION과 SIGN을 지정함
OPTION : EQ(같다), BT(사이값), NB(사이값 제외), GE(이상),
                 GT(초과), LT(미만), NE(같지 않다)
SIGN : Inclusive(I), Exclusive(E)
DEFAULT g TO h SELECT-OPTION의 LOW 값에서 HIGH 값을 지정
구간 값(between)을 지정함
DEFAULT g TO h...
OPTION op...
SIGN s
앞의 두 구문을 조합한 것으로 OPTION은 BT와 NB만 가능.
MEMORY ID pid  MEMORY 파라미터 지정
MATCHCODE OBJECT mobj 4.0 이후 버전은 SEARCH HELP를 사용함.
mobj에 Search Help명을 입력하게 되면 
Possible Entry가 할당됨.
NO-DISPLAY 화면에 보이지 않음
UPPER CASE/ LOWER CASE 대소문자를 구별함(case-sensitive)
OBLIGATORY 필수 필드로 지정함.
화면 필드에는 물음표(?)가 표시됨
NO-EXTENSION 버튼을 제거함
NO INTERVALS HIGH 값을 제거함
VISIBLE LENGTH vlen 필드의 일부 길이까지만 화면에 보이게 설정함
NO DATABASE SELECTIION LDB에 사용되는 옵션으로 일반 리포트에서는
아무런 기능을 하지 않음
VALUE-REQUEST LDB(DBldbSEL include)에서 F4 VALUE HELP를 
추가 할수 있도록 함
HELP-REQUEST VALUE-REQUEST와 유사하며,
필드 HELP를 생성함.

 

3.3) SELECTION-SCREEN

 

구문  발생
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN END OF LINE.
파라미터를 여러 개 묶어서 한 라인으로 생성.
라인에서 SELECT-OPTIONS,
SELECTTION-SCREEN SKIP n 구문 사용할 수 없음.
SELECTION-SCREEN SKIP n. 빈 라인을 n개 삽입함
SELECTION-SCREEN ULINE. Under line을 추가함

SELECTION-SCREEN ULINE /1(10) : New라인

위치

SELECTION-SCREEN ULINE POS_LOW(10)
: POS_LOW는 파라미터 위치에서 시작


SELECTION-SCREEN ULINE POS_HIGH(10)
: POS_HIGH는 리포트 라인 길이 끝에서 시작
SELECTION-SCREEN POSITION pos. SELECTION-SCREEN BEGIN OF LINE.
블록 안에서 파라미터의 위치를 지정함
SELECTION-SCREEN COMMENT fmt name. 파라미터에 대한 내역을 지정.
Fmt는 /pos(len), pos(len) or (len)을 의미

SELECTION-SCREEN COMMENT 1(10) text-1 
FOR FIELD p_1.
SELECTION-SCREEN PUSHBUTTON fmt name
USER COMMAND ucom.
화면에 버튼을 추가하여 클릭하면
AT SELECTION-SCREEN에서 SSCRFIELDS-UCOMM에
저장됨.
SELECTION-SCREEN BEGIN OF BLOCK block.
SELECTION-SCREEN END OF BLOCK block.
PARAMETERS, SELECT-OPTIONS 등 블록 형성.

WITH FRAME : 프레임을 추가함

TITLE tile : 프레임의 TITLE을 추가함.

NO INTERVALS : 블록 안에 SELECT-OPTIONS
                              LOW값만 보임.
SELECTION-SCREEN FUNCTION KEY n. FUNCTION KEY를 추가함.

TABLES : SSCRFIELDS. 구문이 선언되어야함.

FUNCTION KEY 내역은 INITIALIZATION에서
MOVE 'FUNCTION KEY1' TO SSCRFIELDS-FUNCTXT_01.

FUNCTION KEY를 클릭하면
AT SELECTION-SCREEN에서 SSCRFIELDS-UCOMM에
저장됨.

 

[4] MESSAGE ID

 

ABAP 프로그램 화면 하단에 Message를 보여주려면 리포트 선언 첫 문장에 MESSAGE-ID를 기술해야 한다.

 

<Message Type>

TYPE 설명
E 메시지 바.
사용자 입력 값에 대해 체크를 했을 때
뿌려주는 에러 메시지이다.
W 메시지 바.
Enter를 누르면 다음 프로세스로 넘어간다.
어떤 화면의 로직을 멈추고 경고 메시지 형태로 출력한다.
I 팝업 윈도우.
Enter를 누르면 다음 프로세스를 수행한다.
S 성공 메시지.
A 팝업 윈도우.
<STOP> 이라는 버튼이 윈도우 창 안에 있다.
<STOP> 을 누르면 프로그램(세션)이 종료한다.
X Short Dump라고도 함.
Dump 화면과 함께 프로그램을 종료한다.