본문 바로가기
- 레포트 출력하기

간단한 레포트 프로그램 만들기, 흐름 이해하기.

by 아기와나 SAP 2024. 1. 16.
728x90
반응형

안녕하세요. 오늘은 레포트 프로그램만들기 실습 1단계입니다.

 

이번에는 간단한 레포트 프로그램을 처음부터 같이 만들어보는 시간을 가져보도록 하겠습니다.

 

개발 흐름을 잡는 단계이므로, 흐름을 이해하는 것을 집중적으로 공부해보겠습니다.

 

사람마다 소스코드 스타일이 다 다릅니다. 본인의 스타일이 있으시면 그대로 진행하셔도 좋습니다.

저는 보편적으로 많이 보이는 코드를 활용하겠습니다.

 

 

 


 

메인프로그램 전체 생성하기.

프로그램 메인

 

먼저, 프로그램 하나 생성 후, 메인 프로그램에서 위처럼 따라서 코딩해주세요.

우리가 실습 할 프로그램은 4단계로 구성됩니다.

 

INCLUDE, INITIALIZATION, START-OF-SELECTION, END-OF-SELECTION.

 

이 순서대로 코딩을 해보겠습니다.

 

 

이미지를 클릭하면 잘 보이니, 이미지를 클릭하여 봐주세요.


 

[ 1. 인클루드(INCLUDE)문 생성하기 ]. 

 

저의 경우 인클루드 문은 총 6개를 사용합니다.

TOP 인클루드  전역 변수 선언
SEL 인클루드  조회조건문 선언 ( PARAMETERS, SELECT-OPTIONS )
CLS 인클루드  로컬 클래스 코딩
PBO 인클루드  스크린의 PBO 모듈  
PAI 인클루드  스크린의 PAI 모듈
F01 인클루드  PERFORM문 ( = FORM 문 )을 Assign함.

 

이번 실습에서 CLS 인클루드는 사용하지 않습니다.

 

위 흐름대로 인클루드문을 생성하고 코딩을 해보겠습니다.

 


(1-1) TOP INCLUDE문에 전역변수 선언하기.

TOP INCLUDE에 전역 변수 생성

 

변수 네이밍 룰 전역변수의 네이밍 룰은 GT, GS, GV입니다.
즉,  Global Table, Global Structure, Global Variable의 약자입니다.

 

 

이후 변수는 아래와 같이 선언 합니다.

순서는 상관 없고 제가 임의대로 지정한 것입니다. 저 변수들이 선언되기만 하면 됩니다.

[ 변수 목적 ] [ 코드 예시 ]
1. ALV에 뿌려 줄 데이터를 담고 있는
   전역 변수(인터널테이블) 선언
위 코드엔 gt_list로 선언됨.
2. ALV) ALV GRID 전역 변수 선언  위 코드엔 go_alv_grid로 선언됨.
3. ALV) 컨테이너 전역 변수 선언  위 코드엔 go_custom_container로 선언됨.
4. ALV) 필드카탈로그 전역 변수 선언  위 코드엔 gt_fieldcat , gs_fieldcat로 선언됨. 
5. ALV) layout 변수 선언  위 코드엔 gs_layout 로 선언됨.
6. ALV) sort 변수 선언 위 이미지엔 없지만, [ data: gt_sort type lvc_t_sort. ] 로 선언해줄 것.

 

 

 

[ Include문( = Include 프로그램 )은 왜 사용하는가? ]

https://arartexixi.tistory.com/51

 

프로그램 생성 시, Include를 왜 사용하는가?

안녕하십니까. 이번에는 프로그램 생성 시 사용하는 Include문을 왜 사용하는지 간단히 알아보겠습니다. 인클루드문은 아래와 같이 프로그램을 생성하는데 있어 맨 처음 선언하게 됩니다. 먼저,

arartexixi.tistory.com

 


(1-2) SEL INCLUDE문에 조회조건 화면 생성하기.

 

조회조건

 

 

[SEL INCLUDE]

SEL INCLUDE

 

이번엔 SEL INCLUDE에 조회조건 코딩을 해주겠습니다.

 

SEL INCLUDE SELECTION-SCREEN의 약자로 'SEL'로 쓰이며, 셀 인클루드엔 우리가 일반적으로 봤던 조회조건 화면을 그려주는 작업을 합니다.

 

** 인클루드 프로그램의 명칭은 개발자마다 다르기때문에, 구문으로 구분하는게 확실합니다.

 

 

 

 

[PARAMETERS와 SELECT-OPTIONS]

PARAMETERS  단일 조회조건을 그려주는 명령어
SELECT-OPTIONS 다중 조회조건을 그려주는 명령어.

 

→ PARAMETERS와 SELECT-OPTIONS 명령어를 통해 조회조건을 그리게 되면, SAP에서 자동적으로 조회조건 화면인 스크린 1000번을 생성하게 됩니다.

 

 

[SELECTION-SCREEN BEGIN OF BLOCK 구문]

SELECTION-SCREEN BEGIN OF BLOCK은 아래와 같이 조회조건을 묶어주는 큰 상자를 만드는 기능입니다.

 

 

 

[ SEL INCLUDE에서 자주 발생하는 오류 ]

만약 SELECT-OPTIONS로직 넣고 아래와 같은 오류가 발생한다면, TOP INCLUDE에 SELECT-OPTIONS가 참조하고 있는 테이블을 명시해줘야 오류가 해결됩니다.

TOP INCLUDE로 가서 TABLES: SFLIGHT를 넣어줍니다.

 

SELECTION SCREEN ERROR 해결 방법

 

 

[정리]

1. 조회조건을 그리는 SEL 인클루드. SEL은 SELECTION-SCREEN의 약자
2. 조회조건은 PARAMETERS, SELECT-OPTIONS 구문을 통해 생성되며, 해당 구문을 통해 스크린 1000번이 자동 생성된다.
3. 조회조건에 대한 텍스트는 상단의 이동 -> 텍스트요소 -> 선택텍스트(SELECTION TEXT)에서 직접 수정한다.
4. SELECT-OPTIONS에 대한 설명은 https://arartexixi.tistory.com/17 참조

 

 

 

https://arartexixi.tistory.com/17

 

ABAP RANGE 타입 (SIGN, OPTION, LOW, HIGH, SELECT-OPTIONS)

안녕하세요. 오늘은 RANGE TYPE에 대해 알아보는 시간을 갖도록 하겠습니다. RANGE TYPE은 말그대로 특정 범위를 정해놓은 타입입니다. LOW와 HIGH에는 조건 값이 들어가게 되고 SIGN, OPTION에는 LOW, HIGH에

arartexixi.tistory.com

 


 

[ 2. INITIALIZATION ].

 

 

 

이번엔 INITIALIZATION을 보겠습니다.

 

조회조건 화면( 스크린 1000번 )이 사용자에게 보여지기 전에 먼저 수행됩니다.

따라서, 조회조건의 초기값 세팅할 때 사용됩니다. 사용 경우는 더 있지만, 일단 조회조건 초기 값 세팅할 때 사용된다고 인지합시다.

 

저는 예시에 PERFORM문을 사용하였습니다.

PERFORM문은 소스코드 모듈화 측면에서 대표적인 구문이라고 할 수 있습니다.

소스를 정리할 수 있고, 함수처럼 특정 조건 값을 받고 결과를 리턴해줄 수 있습니다.

 

그러한 활용성을 배제하고, INITIALIZATION쪽에서 사용하는 PERFORM문은 대부분 소스코드 정리용입니다.

 

PERFORM문은 꼭 F01 인클루드에 저장해주도록 합니다.

 

 

 

 


[ 3. START-OF-SELECTION ].

 

 

 

START-OF-SELECTION에는 조회조건에 입력된 값을 활용하여, 조회조건에 맞는 데이터를 처리하기 위한 이벤트입니다.

 

우리가 SEL INCLUDE쪽에서 PARAMETERS와 SELECT-OPTIONS를 사용하여 조회조건 화면(스크린 1000번)을 만든다고 했죠?

이때, 스크린 1000번에 실행버튼(F8)키가 자동적으로 생성됩니다.

아래 스크린샷을 보시면, 실행버튼이 보이죠? 저걸 누르게되면 START-OF-SELECTION 이벤트가 수행되며 로직이 실행됩니다.

 

 

우리는 SFLIGHT 테이블에서 조회조건에 맞는 값을 쿼리문을 통하여 가져오도록 하겠습니다.

PERFORM문을 통해 만든 로직을 꼭! F01 또는 FORM01 INCLUDE에 맵핑시키도록 합시다.

 

[ 4. END-OF-SELECTION과 CALL SCREEN ].

이제 사용자가 조회하고자 하는 조회조건, 그리고 조회하고자하는 데이터 추출까지 하였습니다.

그럼 아래 캡처화면 처럼 ALV를 통해 사용자에게 데이터를 보여줘야겠죠??

ALV GRID

 

START-OF-SELECTION이 끝나고 실행되는 END-OF-SELECTION 이벤트에 CALL SCREEN XXX 구문을 넣어 스크린을 만들어보겠습니다.

 

저는 스크린 번호를 100번으로 만들겠습니다.

 

아래 스크린샷을 보고 따라하세요. 왔다갔다 헷갈릴 수 있으니 잘 보셔야 합니다.

순서는 1~13까지 순서대로 진행되니 순차적으로 하시면 됩니다.

 

[1]

순서 1

 

→ 먼저 스크린 100번을 생성하고 [속성] 탭에 스크린 100번에 대한 명칭을 지정합니다.

 

 

[2]

순서 2

 

→ 위에 명칭을 설정한 스크린 100번의 [속성] 탭 옆에 보면, [흐름로직]이라는 탭이 있습니다.

     해당 탭으로 가서 MODULE STATUS_0100로직의 주석을 풀고 PBO INCLUDE에 Assign해줍니다.

 

[3]

순서 3

 

MODULE STATUS_0100안으로 들어와보겠습니다.

    안에 들어가면, 'SET PF-STATUS''SET TITLEBAR'위에 명칭을 설정한 스크린 100번의 [속성] 탭 옆에 보면,

    [흐름로직]이라는 탭이 있습니다.

     해당 탭으로 가서 'SET PF-STATUS' 로직의 주석을 풀고, 명칭은 'STATUS_100'으로 해줍시다.

 

[4]

순서 4

   'STATUS_100'으로 들어가볼까요? 그럼 위와 같은 화면이 나옵니다.

      여기서 하는 것은 ALV에 보여줄 버튼을 생성하는 것과, 기존에 제공받는 스탠다드의 버튼을 사용할 수 있도록 활성화       하는 것입니다.

 

      우리가 뒤로가기, 나가기, 취소하기 버튼에 각각 'BACK', 'EXIT', 'CANC'이라는 코드를 넣어준 행위이며, 코드를 넣어   줌으로써 각각 뒤로가기, 나가기, 취소하기 버튼을 눌렀을 때 각각 BACK, EXIT, CANC이라는 EVENT TRIGGER 코드를 발생시킴으로써 뒤로가기, 나가기, 취소하기를 위한 코딩을 넣을 수 있게 된 것입니다.

 

자동적으로 뒤로가기, 나가기, 저장하기가 되는 것이 아니라 코딩을 통해서 가능한 것입니다. 

 

 

특히, 기능키 쪽에 뒤로가기, 나가기, 취소하기 버튼의 경우엔 기능유형을 'E'로 지정해줍시다.

이 뜻은 해당 버튼은 'EXIT-COMMAND' 즉, 현재 화면 및 해당 프로그램에서 빠져나가기 위한 버튼으로 SAP에서 인식을 할 수 있어 편리합니다.

무엇인가 EXIT 즉, 나가는 기능을 위해서 SAP에서 별도로 관리할 수 있도록 제공해주는 것이니 일단 암기합시다^^

       

 

      

 

 

 

[5]

순서 5

 

STATUS_100창을 닫고 다시 뒤로가서 MODULE STATUS_0100으로 돌아와보겠습니다.

    안에 들어가면, 'SET PF-STATUS' 'SET TITLEBAR' 명령어가 보이는 MODULE STATUS_0100의 최초 화면이

    보일 것입니다.

 

이번에는 'SET TITLEBAR' 명령어로 가서, 'TITLE_100' 이라는 이름을 부여하고 더블클릭 해보겠습니다.

해당 화면은 ALV에 표시 할 프로그램의 명칭을 지정해주는 곳입니다.

 

스크린 100의 PBO 모듈인 'MODULE STATUS_0100'에서는 스크린 100에 대한 STATUS와 TITLEBAR를 지정해줍니다.

 

 들어갔다 나왔다해서 헷갈리시겠지만, 지금까지 여러분들은 스크린 100번의 PBO모듈 ' MODULE STATUS_0100'을 통해 ALV에 필요한 뒤로가기, 나가기, 취소하기 버튼 활성화와 ALV에 보여줄 프로그램 명을 세팅하였습니다.

 

[6]

 

순서 6

 

이제 스크린 100번에 PBO 모듈인 'STATUS_0100'에서 기본 세팅을 마치고, 컨테이너를 그려보겠습니다.

 

[레이아웃]버튼을 클릭하게 되면, 스크린페인터라고하는 것이 나옵니다.

 

그중, 왼쪽 메뉴바중 맨 아래에서 두번째 버튼을 클릭 후에 드래그하여 그려줍니다.

이후 단계는 바로 아래 7번에서 진행되므로 아직 스크린 페인터를 끄지 마세요.

 

[7]

순서 7

 

 

이후, 저희가 그린 컨테이너를 더블클릭을 해주면, 팝업창이 하나 나옵니다.

명칭은 여러분 자유이나, 기억해두도록 합시다. 저는 일단 CON1이라고 컨테이너의 이름을 지정하였습니다.

 

 

[ ALV 구조 내용 이해 ]

우린 스크린 100번을 생성하였고, MODULE status_0100을 통해 STATUS와 TITLEBAR를 세팅하였습니다.

이후 레이아웃버튼을 클릭하여 컨테이너를 그렸습니다.

 

나중에 프로젝트가서 코딩을 보면 아시겠지만, DOCKING CONTAINER라는 것을 통해 Default screen을 주면, 굳이 컨테이너를 그릴 필요 없습니다.

하지만, 우리는 alv의 구조를 이해하기 위해 CUSTOM CONTAINER를 TOP INCLUDE에 전역변수로 생성하였으며, 직접 컨테이너를 그린 것입니다.

말그대로 '커스텀' 컨테이너입니다. 우리가 커스텀한 컨테이너인 것이죠.

 

 

→ 우리가 스크린 100을 만들었죠? 위에 보시면, ALV구조 중 스크린은 가장 큰 부분입니다.

 

그중, PBO, PAI부분으로 나뉘며 PBO 하단에 CONTAINER가 있고 ALV가 존재합니다.

ALV를 사용자에게 뿌려주기 위해선 일단 'CONTAINER'를 그려야 할 수 있는 것입니다.

이유를 아시겠죠??

 

 

 

[8]

순서 8

 

 

스크린 100번의 로직을 보면, PROCESS BEFORE OUTPUTPROCESS AFTER INPUT이 있습니다.

 

우리는 지금 PROCESS BEFORE OUTPUT 즉, PBO쪽 세팅을 하고 있는 것이며 컨테이너까지 그렸습니다.

 

제 ALV 로직을 넣어 컨테이너와 ALV를 연결시켜주고 사용자에게 보여주면 됩니다.

 

PBO의 'MODULE STATUS_0100' 밑에 새로운 모듈 'MAKE_ALV_100'을 코딩하고 더블클릭하여 생성합니다.

꼭 PBO INCLUDE에 맵핑합시다.

 

 

[9]

순서 9

 

→ 로직 전체적인 틀을 보면, 우리가 TOP INCLUDE에 선언한 ALV GRID 변수를 IS INITIAL 체크를 해줍니다.

일단 이 취지는, ALV GRID가 한번 생성되면, 리프레시만 시키겠다는 의도입니다.

 

따라서, ALV에 화면이 변경되더라도 다시 생성하는 것이 아니라 리프레시를 시켜 변경된 화면을 사용자에게 보여주겠다는 의도입니다.

 

CONTAINER 객체 생성 로직에보면, container_name에 'CON1'을 넣어줬죠??

아까 '7'번 스크린샷에서, 커스텀 컨테이너를 그리고 그 이름을 CON1으로 지정했습니다. 그 이름을 넣어줍니다.

 

 

 

[10]

순서 10

→ 필드카탈로그를 그대로 따라해봅시다.

 

[11]

순서 11

→ 레이아웃, SORT 코딩을 그대로 따라해봅시다.

 

[12]

순서 12

 

→ ALV호출 코딩을 그대로 따라해봅시다. SET_TABLE_FOR_FIRST_DISPLAY 메소드를 통해 사용자에게 우리가 설정한 ALV를 보여주게 됩니다.

 

 

[13]

 

 

→ 이번에는 스크린 100번 메인 코딩화면으로 다시 돌아와보겠습니다.

     이제 아까 우리가 PBO MODULE인 'MODULE STATUS_0100'의 'SET PF-STATUS   STATUS_100'에서 세팅한 뒤로가기, 나가기, 취소하기 버튼에 대한 로직을 넣을 차례입니다.

 

뒤로가기, 나가기, 취소하기 버튼같은 경우는, 사용자가 직접 마우스로 클릭을 하게되죠?? 이런경우에는 Process After Input. 즉, PAI쪽에 액션에 대한 코딩을 하게 됩니다.

 

위 처럼 MODULE exit AT EXIT-COMMAND 로직을 넣고, exit이라는 명칭을 더블클릭하여 PAI INCLUDE에 Assign해줍니다.

 

저의경우엔 뒤로가기, 나가기 취소하기 버튼 모두 leave to screen 0. 즉, 뒤로가기 기능만 코딩해놓았지만, 

각각 다르게 해놓아도 됩니다. 아래 예시를 들어놓았으니 참고 바랍니다.

 

 

 

[안내사항]

저의 경우 막 들어오신분들 눈높이에 맞춰 글을 작성하고 있습니다.

이 점을 꼭 참고 부탁드립니다.

 

또한, 짬내서 쓰다보니.. 전체적인 글 검증이 어렵습니다. 오타나 잘못된 정보가 있을 땐 꼭 말씀부탁드립니다 ㅠㅠ

 

감사합니다.

728x90
반응형