기본적인 ABAP Programming 개발 순서부터 SD의 최종 종착지인 매출까지 (물론 세금계산서 등등도 있지만..) 프로그램을 완성시켜보려한다.
이번 글에서는 이전 글에서 만들어놓은 프로그램을 구성하려면 어떤 부분부터 고민해야하는지 같이 해보려고한다.
프로그램을 만드는 방법은 하단의 링크를 통해 확인하면 된다.
✔ ABAP 프로그램 만들기 - 구성
프로그램 코드
하기의 코드를 복사하여 사용하여도 된다.
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& [SD] 매출조회 프로그램
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
* MESSAGE-ID : 경고, 알림 등이 나올 때 사용할 멘트들을 정의 ( sabapdocu : sap에 사전정의된 메세지 그룹 )
*----------------------------------------------------------------------*
Report ZSDR0001T MESSAGE-ID sabapdocu.
*----------------------------------------------------------------------*
* 1. INCLUDE.
* 각각의 역할별로 소스코드를 분리 ( 모듈화 )
* TOP : 전역변수, 테이블 등 선언
* SCR : SELECTION SCREEN(조회조건) 만들기
* CLS : Toolbar, f4 등 user command, 로컬 클래스 정의
* O : Process Before Output 화면이 나오기전 화면 구성을 위한 이벤트
* I : Process After Input 화면이 나온 후 입력되는 F3(뒤로가기) 등 액션 이벤트
* F : 위에 선언된 로직 외에 모든 프로세스 PERFORM문 정의
*----------------------------------------------------------------------*
INCLUDE ZSDR0001T_TOP . " Global Data
INCLUDE ZSDR0001T_SCR. " SELECTION screen
INCLUDE ZSDR0001T_CLS. " CLASS LCL_EVENT_HEAD DEFINITION
INCLUDE ZSDR0001T_O01 . " PBO-Modules
INCLUDE ZSDR0001T_I01 . " PAI-Modules
INCLUDE ZSDR0001T_F01 . " FORM-Routines
*----------------------------------------------------------------------*
* 2. INITIALIZATION.
* 프로그램이 실행되기 전 즉, SELECTION Screen이 보여지기 전 실행된다.
* Default 값, 유저정보 등을 가져오는데 사용
*----------------------------------------------------------------------*
INITIALIZATION.
PERFORM initialization.
*----------------------------------------------------------------------*
* 3. SELECTION-SCREEN
* 조회조건 화면에서 사용자의 액션에 따라 값, 화면 제어를 한다.
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN OUTPUT
* 사용자가 조회조건에서 버튼을 클릭 했을때 동작하는 구문이다.
* 예시로 Radio Button A를 눌렀을 때 특정 필드를 숨긴다거나 하는 LAYOUT을 제어할 수 있다.
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN.
* 사용자가 특정필드에 값을 입력했을 때 동작하는 구문이다.
* 타 영업팀, 부서 등 권한이 없는 데이터를 사용자가 조회하는 것을 방지 할 수 있다.
**---------------------------------------------------------------------*
AT SELECTION-SCREEN.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN ON VALUE-REQUEST FOR
* ABAP 자체에서 제공해주는 Possible Entry 대신 사용자가 정의한 내역을 보이게 설정할 수 있다.
**---------------------------------------------------------------------*
*----------------------------------------------------------------------*
* 4. START-OF-SELECTION.
* 사용자가 입력한 조회조건을 기준으로 데이터를 호출해온다.
*----------------------------------------------------------------------*
START-OF-SELECTION.
*----------------------------------------------------------------------*
* 5. END-OF-SELECTION.
* 4번단계가 종료되었을 때, 해당 단계를 거쳐 Screen을 호출한다.
*----------------------------------------------------------------------*
END-OF-SELECTION.
INCLUDE
코드에도 기재하였듯이 INCLUDE문에는 각각의 역할을 담아두고 있다.
역할
종류 | 역할 |
TOP | 전역변수, 테이블 등을 선언한다. (gv, gt와 같은 형식으로 되어있는 변수들의 집합) |
SCR | Selection Screen(조회조건)을 만든다. (입력값, 선택값 등) |
CLS | Toolbar, f4 등 user command, 로컬 클래스등을 정의한다. |
O01 | Process Before Output 화면이 나오기전 화면 구성을 위한 이벤트 |
I01 | Process After Input 화면이 나온 후 입력되는 F3(뒤로가기) 등 액션 이벤트 |
F01 | 위에 선언된 로직 외에 모든 프로세스 PERFORM문 정의 |
개발 전 데이터 정의
프로그램을 개발하기 위해서는 내가 어떤 데이터를 가져와서 어떻게 뿌려줄 것인가에 대한 목적이 있어야한다.
우리가 지금 개발하려는 것은 매출데이터를 조회하는 프로그램이다.
매출이 발생하는 순서는 간략하게 아래와 같다.
주문이 있어야 납품을 할 수 있고 납품이 되어야 빌링이 될 수 있다.
그렇다면 우린 주문을 기반으로 빌링까지 된 문서를 찾으면 된다.
아래는 관련된 테이블이다.
판매문서 헤더 / 품목
빌링문서 헤더 / 품목
총 4가지의 테이블을 구성해보았다.
각각의 테이블 구조를 보면 VBELN은 판매문서의 경우 판매문서번호 빌링문서의 경우 빌링문서의 번호를 뜻하고 있다.
테이블의 목적에 따라 해당 필드가 의미하는 바가 다른 점을 유의해야한다.
그래서 빌링문서 테이블에서는 판매문서번호를 연결해주는 필드가 있다 그게 바로 AUBEL 필드이다.
VBELN과 AUBEL 2개의 필드로 4개의 테이블이 연결되는데,
품목 테이블의 경우에는 헤더와 다르게 제품이 여러개가 있을 수 있다.
그래서 품목을 구분지어주는 필드 값이 POSNR과 AUPOS이다.
해당 필드를 활용하여 품목테이블을 연결해주면 된다.
데이터 사전 조회
위에 정리한 테이블들을 활용하여 쿼리를 만들면 아래와 같이 된다.
해당 쿼리를 입력하는 방법은 아래에서 확인하면 된다.
그런데 저렇게 쿼리를 치고 실행을 하게되면 시스템에 있는 모든 주문과 매출을 조회하는 것이기 때문에 데이터 조회의 양이 엄청날 것으로 예상이 된다.
양이 많다는 것은 프로그램 속도저하로 이루어진다.
그래서 조회를 하기전에 최소한의 정보는 입력을 해주어야 하겠다라고 생각하였다.
세부 정보는 각자 구분할 수 있겠지만 최대 조회 날짜는 제한을 두어야겠다 생각이 들었다.
- 본 글에서는 조금 더 축소하기 위해 거래처번호까지 조회조건에 거는 방식으로 처리할 예정이다.
그렇다면 현재까지 프로그램의 목표는 해당 거래처의 특정일자의 매출 조회 프로그램인것이다.
자 그럼 마지막으로는 가져올 필드를 정의해야한다.
위의 사진에는 * 로 전체조회를 하였는데, 테이블 4개의 모든 필드를 가져오겠다는 의미이다.
간단한 매출조회 프로그램이니 거래처, 매출일자, 제품코드, 수량, 매출 정도를 보여주면 좋을 것 같다.
해당 필드들을 테이블에서 찾아보니 아래와 같이 조회가 되었다.
맨 마지막 select 컬럼에 salse가 총 매출인데, 공급가액 + 세액을 하여서 산출 한 값이다.
최종결과 화면이다.
우리는 이제 이 결과 화면을 어떻게 화면에 뿌릴 것인지 고민해보고 만들어 볼 예정이다.
'SAP > ABAP' 카테고리의 다른 글
[ABAP/SD] 매출조회 프로그램 만들기(4) (0) | 2024.11.07 |
---|---|
[ABAP/SD] 매출조회 프로그램 만들기(3) (0) | 2024.11.04 |
[ABAP/SD] 매출조회 프로그램 만들기(1) (1) | 2024.10.18 |
[SAP/ABAP] ST04 - SqlEditor 쿼리 실행 (1) | 2024.10.08 |
<ABAP> cx_sy_conversion_no_num 에러 (1) | 2024.09.30 |