Search
Duplicate
😄

인프라 & ALV 출력하기

가상 머신에 리눅스 서버 설치 오픈수세를 통한 SAP 서버 환경 구축

1. 가상머신(Virtual Machine)이란?

물리적으로 존재하는 컴퓨터가 아닌, 다른 컴퓨터가 만들어내는 가상의 컴퓨터를 의미한다.
개발자들이 가상 환경을 만들어 개발 및 테스트를 할 때 자주 사용함. 실제 컴퓨터처럼 운영체제를 설치하고 사용할 수 있다.
운영체제(OS): 컴퓨터 시스템의 자원을 효율적으로 관리하고, 사용자가 편리하게 컴퓨터를 사용할 수 있도록 환경을 제공하는 여러 프로그램의 모임.
예시: Windows, MacOS, Android, Linux 등
"깡통 컴퓨터"를 작동시키는 필수 소프트웨어라고 볼 수 있다.

2. 리눅스(Linux)란?

리눅스는 오픈 소스 운영체제로, 소스 코드가 공개되어 있고 누구나 무료로 사용할 수 있다.
서버용 운영체제로 많이 사용되며, 다양한 선택지(우분투, CentOS, 데비안, 레드햇, 오픈수세 등)가 있음. 같은 역할을 하는 프로그램이라도 편리성, 속도, 확장성, 가벼움 등 목적에 따라 여러 가지 종류가 있다.
ex) 감자, 오렌지 등 종자를 개량하고 이를 통해 다양한 완제품을 만드는 것에 비유할 수 있음.

3. 오픈수세(OpenSUSE)란?

오픈수세는 리눅스 배포판 중 하나로, YAST라는 설치 도구가 편리하게 제공됨.
리브레오피스, 파이어폭스 같은 기본 프로그램도 잘 설치되어 있다.
왜 오픈수세를 선택했는가?
SAP 설치 매뉴얼에 따라 설치함.(팩트)
SAP 애플리케이션들은 대부분 리눅스 기반에서 실행되며, 그 중 70%가 수세 리눅스 엔터프라이즈에서 실행됨. SAP HANA 배포의 90% 이상이 수세에서 이뤄짐.(기사 내용)

4. 설치 과정에서의 시행착오

최신 버전(15.6)을 설치하면 에러가 발생한다.
구글링을 통해 해결 방법을 찾았으나 복잡함.
운영체제나 애플리케이션은 호환성이 중요함. 당시 버전에 맞춰 설치하니 호환성 문제가 해결됨.
버전 15.4도 설치되지 않아 15.3으로 설치하였고, 성공적으로 작동함. 다운그레이드가 필요한 상황이었음.
설치 배포 매뉴얼에서도 15.0 버전을 사용함.

5. 데이터베이스(DB)란?

데이터베이스는 전자적으로 저장되고 체계적인 데이터 모음임. 여기에는 단어, 숫자, 이미지, 비디오 및 파일 등 모든 유형의 데이터가 포함될 수 있음. 데이터베이스 관리 시스템(DBMS)이라는 소프트웨어를 사용하여 데이터를 저장, 검색 및 편집할 수 있음.
데이터베이스 종류
오라클, MS SQL, MySQL, 마리아DB, PostgreSQL, DB2, SYBASE

6. 왜 SYBASE DB를 사용했는가?

SAP 설치 시 자동으로 설치됨.
2010년에 SAP에서 인수함.
라이선스 배포가 자유로워 무료로 사용할 수 있음. 그래서 갱신하라고 계속 파일 올려줌.
라이선스 갱신은 SYBASE.lic 파일로 관리됨.

7. SAP 시스템의 구성 요소

https://sangbeomkim.tistory.com/258
표현층
SAP GUI 설치 - 사용자가 화면을 통해 프로그램을 사용하게 됨.
네트워크
1.
오픈수세 방화벽 끄고 SSH 설정 - 통신 문제 해결
2.
hosts, hostname 파일 수정 - IP와 호스트 이름 매핑 작업
3.
Oracle VirtualBox 포트 포워딩 - SAP GUI 3200 포트 열기
4.
SAP GUI에 IP 세팅
응용층
SAP 서버 설치, 오픈수세 서버 설치 - ABAP이라는 개발 언어로 화면을 만드는 동작 처리
install.sh 실행
1.
사용자 계정(npladm, sapadm) 추가
2.
해당 계정들에 SAP 서버 설치
3.
su npladm - 특정 사용자 계정(npladm)에서만 설치되므로 해당 계정으로 로그인해야 서버에 접근 가능
데이터베이스층
SYBASE DB 설치
install.sh 실행
1.
데이터베이스 설치
2.
DB 계정 추가
3.
테이블 생성 및 데이터 입력

8. ABAP 프로그래밍 언어

데이터 타입: 용도에 따라 타입을 정의하며 3글자 이상으로 구성됨.
예: CHAR(문자), CUKY(통화 단위-KRW,EUR,USD등등), DATS(날짜), NUMC(숫자로 구성된 문자) 등
아밥 타입: 속성에 따라 타입을 정의하며 1글자로 구성됨.
예: C(문자), I(정수), D(날짜), T(시간), N(숫자로 구성된 문자), P(실수:소수점있는숫자) 등

9. SAP의 클라이언트(Client) 타입 - CLNT

CLNT클라이언트(Client) 타입을 나타내는 데이터 타입
데이터가 어떤 클라이언트에 속하는지를 구분하는 데 사용됨.
클라이언트는 SAP 시스템에서 독립적인 데이터 관리 단위를 의미하며, 다양한 비즈니스 시나리오에서 하나의 SAP 시스템 내 여러 개의 클라이언트를 운영할 수 있음.
CLNT 데이터 타입의 특징
CLNT 더블클릭하면 상세창이 뜬다 ABAP type 보면 C 문자형이다.
데이터 타입: C (문자형)
CLNT는 문자형 데이터 타입으로 정의되며, 일반적으로 3자리 숫자 또는 문자로 구성됨.
예를 들어, 001, A01과 같은 형식으로 사용될 수 있음.
용도
SAP 시스템 내에서 계열사 코드로 사용됨.
클라이언트별로 데이터를 분리하고 독립적으로 관리할 수 있게 함.
사용 예시
예를 들어, 삼성이라는 대기업이 여러 계열사를 보유한 경우, 각 계열사를 SAP 시스템 내에서 클라이언트 코드로 구분할 수 있음.
삼성전자: 001
삼성전기: 002
삼성반도체: 003
중소기업이나 중견기업의 경우에는 하나의 SAP 시스템에서 단일 클라이언트만 사용하기도 함.
각 기업의 운영 형태에 따라 클라이언트를 별도로 나누지 않고 하나의 클라이언트로 모든 데이터를 관리하는 경우도 많음.
계열사별로 시스템을 따로 운영할 수도 있음.
클라이언트 코드 사용의 장점
데이터 분리 및 독립성
클라이언트 코드를 통해 하나의 SAP 시스템 내 여러 조직이나 계열사의 데이터를 독립적으로 관리할 수 있음.
각 클라이언트는 독립적인 마스터 데이터와 사용자 데이터를 가질 수 있으며, 시스템 설정과 구성도 각 클라이언트에 따라 다르게 적용할 수 있음.
유연성
다양한 비즈니스 요구 사항에 따라 여러 개의 클라이언트를 운영할 수 있음.
예를 들어, 각 계열사나 지사의 운영 특성에 맞는 데이터를 분리하여 관리할 수 있으며, 필요에 따라 통합적인 데이터 분석도 가능함.
시스템 확장성
클라이언트를 추가하거나 변경하는 것만으로도 다양한 조직의 요구 사항을 반영할 수 있어 시스템의 확장성이 높아짐.
SAP의 MANDT 필드 - 클라이언트 관리 필드
MANDT는 SAP 시스템에서 클라이언트(Client) 필드로 사용되며, 데이터베이스 테이블에서 특정 클라이언트에 속한 데이터를 구분하는 데 중요한 역할을 함.
거의 모든 SAP 데이터베이스 테이블의 첫 번째 필드로 존재함.
1. MANDT 필드의 역할
클라이언트 구분 필드
MANDT 필드는 클라이언트를 구분하는 필드로, 각 테이블의 첫 번째 필드로 사용됨.
예를 들어, 테이블에 저장된 데이터가 특정 클라이언트(예: 001, 002 등)에 속하는지를 표시함.
SAP 시스템에서 클라이언트별로 데이터를 독립적으로 관리하는 데 필수적임.
클라이언트 통합 관리
SAP 시스템은 하나의 데이터베이스 테이블에서 여러 클라이언트의 데이터를 관리함.
MANDT 필드를 사용하여, 서로 다른 클라이언트에 속하는 데이터를 동일한 테이블에 저장하면서도, 데이터를 논리적으로 구분할 수 있음.
2. 데이터베이스 통합 관리 예시
SAP 시스템 내에서 하나의 테이블이 여러 클라이언트의 데이터를 관리할 수 있음.
예시
MANDT = '001' => 클라이언트 001에 속한 데이터
MANDT = '002' => 클라이언트 002에 속한 데이터
하나의 테이블에서 클라이언트별로 데이터를 나누어 관리할 수 있음.
계열사 통합 관리
예를 들어, 삼성 그룹의 여러 계열사(삼성전자, 삼성전기, 삼성반도체 등)를 하나의 SAP 시스템에서 관리할 때, 각각의 데이터를 클라이언트 코드(MANDT)로 구분하여 통합 관리할 수 있음.
계열사별로 독립적으로 데이터 관리를 하면서도, 필요 시 통합적인 데이터 분석도 가능해짐.
3. SQL문에서의 사용
SAP 시스템에서 데이터 조회 시, SQL문WHERE 조건절에 MANDT 필드를 사용하여 특정 클라이언트의 데이터를 조회함.
예시
SELECT * FROM 테이블명 WHERE MANDT = '001';
SQL
복사
위 SQL문은 클라이언트 001에 속한 데이터만 조회함.
클라이언트별로 데이터를 정확하게 필터링하여 조회할 수 있도록 도와줌.
4. MANDT 필드의 중요성
데이터 분리 및 보안
MANDT 필드를 통해 데이터를 클라이언트별로 분리하여 관리함으로써, 각 클라이언트의 데이터를 독립적으로 보호하고 관리할 수 있음.
서로 다른 비즈니스 유닛(계열사나 지사 등)의 데이터가 섞이지 않도록 보장함.
유연한 데이터 관리
클라이언트별로 데이터를 구분하여 저장함으로써, 시스템 운영 및 유지보수가 용이함.
다양한 비즈니스 요구 사항을 충족시키기 위해 같은 테이블 구조를 여러 클라이언트에 재사용할 수 있음.

10. SAP 데이터베이스 테이블 예시

SFLIGHT 테이블
INT4: 정수 타입 (아밥타입 I)
4바이트 크기의 정수를 저장하는 타입.
SPFLI 테이블
TIMS: 시간 타입 (HHMMSS) (아밥타입 T)
시간 데이터를 저장하는 타입으로, '시:분:초' 형식으로 저장됨.
INT1: 정수 타입 (아밥타입 b)
1바이트 크기의 정수를 저장하는 타입.
추가된 데이터 타입 설명
NUMC: 숫자로 구성된 문자 타입 (아밥타입 N)
숫자만으로 구성된 문자 데이터를 저장할 때 사용됨. 예: "0001", "20230916" 등.
DATS: 날짜 타입 (아밥타입 D)
날짜 데이터를 저장하는 타입으로, 기본적으로 YYYYMMDD 형식으로 저장됨. 예: "20230916"은 2023년 9월 16일을 의미함.
QUAN: 무게, 거리, 길이 등의 측정 가능한 타입 (아밥타입 P)
Internal Length: 데이터 타입의 내부 길이 (정수 자릿수)
소수점 이하 자릿수를 포함하는 숫자 데이터(실수)를 저장할 때 사용됨.
Decimal Places에 따라 소수점 이하 자릿수를 설정할 수 있음.
예: Decimal Places가 4로 설정된 경우, 소수점 4자리까지 표현 가능.
UNIT: 무게, 거리, 길이의 단위 타입 (아밥타입 C)
측정 단위를 저장하는 타입으로, 예를 들어 "KG", "CM", "MI" 등의 값이 포함될 수 있음.
CHAR 타입과 유사하게 문자 데이터가 포함됨.
CURR: 금액 타입 (아밥타입 P)
통화 단위를 포함한 금액 데이터를 저장할 때 사용됨.
CUKY(통화 단위) 필드와 함께 사용되며, 소수점 이하 자릿수는 통화에 따라 달라짐. 예를 들어, USD는 소수점 2자리까지 사용될 수 있음.
QUAN UNIT 무게 무게단위 CURR CUKY 금액 금액통화단위
항상 붙어다닌다.
그 외 자주 사용하는 타입들
ACCP: 회계 기간을 나타내며, 년도와 월(YYYYMM) 형식으로 저장.
DEC: 소수점이 있는 숫자(실수)를 저장하는 타입으로, 금액이나 비율 등의 데이터를 저장할 때 사용.
LANG: 언어 코드를 저장하여 SAP 시스템의 다국어 지원을 위한 데이터 타입.
STRING: 가변 길이의 긴 문자열 데이터를 저장하는 타입으로, 유연하게 텍스트 데이터를 처리할 때 사용.

SE11 - scarr

SE11은 SAP 시스템에서 사용하는 ABAP Dictionary(ABAP 사전)의 트랜잭션 코드.
se11를 검색
엥 없다 나옴..ㅎㅎ
다시 로그아웃하고 로그온 해서 들어와서 다시 쳐주면 인식된다
데이터베이스 테이블을 scarr라 해주고 Display 버튼 클릭
그러면 scarr라는 테이블의 데이터들이 보인다
contents 버튼을 클릭
테이블을 조회할 수 있는 화면으로 이동되고 저기서 실행버튼을 눌러준다
표 형태로 되어 있는데 이거를 양식을 바꿔줄려면
Settings → User Parameters..
ALV Grid Display로 변경
그러면 표에서 이렇게 엑셀 느낌형식으로 바뀜

SE11 - SBOOK

이번에는 SBOOK 테이블로 가본다.
처음보는 데이터 타입들이 보인다
contents 가서 실행시켜서 데이터들을 보면
근데 데이터 포맷을 보면 미국포맷에 맞춰진거라
날짜가 거꾸로 나오고 양식이 콤마(,) 로 나오고 있다.
system → User Profile → User Data
Decimal Notation을 두번째껄로 변경
Data Format을 YYYY.MM.DD 로 변경
변경 후에 로그오프하고 다시 로그온해주자
이제 날짜랑 무게값도 잘나온다.

SE11 - SFLIGHT

INT4 처음보는 타입

SE11 - SPFLI

INT1을 더블클릭해서 해당 Data Type 부분의 우측 버튼을 클릭하면
데이터 타입 정리표 팝업창이 뜬다
INT1 INT2 INT4 INT8 범위가 있다.
그 중에서
이렇게도 많이 사용한다

SE80 - 실습 → Z2WEEK_ALV00 생성 1

패키지 이름에 $가 포함된 경우, 이는 모듈을 선택하는 임시 패키지임을 나타냄. 현재는 개발 작업을 위해 임시 패키지를 사용하고 있는 상태임.
회사에서 쓰면 모듈별로 지정되어 있다.
구글에 이제
abap alv example
라고 검색해준다.
이분껄로 벤치마킹해서 공부해보도록 하자.
TABLES: ekko. TYPE-POOLS: slis. "ALV Declarations *Data Declaration *---------------- TYPES: BEGIN OF t_ekko, ebeln TYPE ekpo-ebeln, ebelp TYPE ekpo-ebelp, statu TYPE ekpo-statu, aedat TYPE ekpo-aedat, matnr TYPE ekpo-matnr, menge TYPE ekpo-menge, meins TYPE ekpo-meins, netpr TYPE ekpo-netpr, peinh TYPE ekpo-peinh, line_color(4) TYPE c, "Used to store row color attributes END OF t_ekko. DATA: it_ekko TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0, wa_ekko TYPE t_ekko. *ALV data declarations DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE, gd_tab_group TYPE slis_t_sp_group_alv, gd_layout TYPE slis_layout_alv, gd_repid LIKE sy-repid. DATA : t TYPE slis_t_sp_group_alv . ************************************************************************ *Start-of-selection. START-OF-SELECTION. PERFORM data_retrieval. PERFORM build_fieldcatalog. PERFORM build_layout. PERFORM display_alv_report. *&---------------------------------------------------------------------* *& Form BUILD_FIELDCATALOG *&---------------------------------------------------------------------* * Build Fieldcatalog for ALV Report *----------------------------------------------------------------------* FORM build_fieldcatalog. fieldcatalog-fieldname = 'EBELN'. fieldcatalog-seltext_m = 'Purchase Order'. fieldcatalog-col_pos = 0. fieldcatalog-outputlen = 10. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'EBELP'. fieldcatalog-seltext_m = 'PO Item'. fieldcatalog-col_pos = 1. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'STATU'. fieldcatalog-seltext_m = 'Status'. fieldcatalog-col_pos = 2. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'AEDAT'. fieldcatalog-seltext_m = 'Item change date'. fieldcatalog-col_pos = 3. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'MATNR'. fieldcatalog-seltext_m = 'Material Number'. fieldcatalog-col_pos = 4. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'MENGE'. fieldcatalog-seltext_m = 'PO quantity'. fieldcatalog-col_pos = 5. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'MEINS'. fieldcatalog-seltext_m = 'Order Unit'. fieldcatalog-col_pos = 6. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'NETPR'. fieldcatalog-seltext_m = 'Net Price'. fieldcatalog-col_pos = 7. fieldcatalog-outputlen = 15. fieldcatalog-datatype = 'CURR'. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'PEINH'. fieldcatalog-seltext_m = 'Price Unit'. fieldcatalog-col_pos = 8. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. ENDFORM. " BUILD_FIELDCATALOG *&---------------------------------------------------------------------* *& Form BUILD_LAYOUT *&---------------------------------------------------------------------* * Build layout for ALV grid report *----------------------------------------------------------------------* FORM build_layout. gd_layout-no_input = 'X'. gd_layout-colwidth_optimize = 'X'. gd_layout-zebra = 'X'. * gd_layout-info_fieldname = 'LINE_COLOR'. * gd_layout-def_status = 'A'. ENDFORM. " BUILD_LAYOUT *&---------------------------------------------------------------------* *& Form DISPLAY_ALV_REPORT *&---------------------------------------------------------------------* * Display report using ALV grid *----------------------------------------------------------------------* FORM display_alv_report. gd_repid = sy-repid. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = gd_repid is_layout = gd_layout it_fieldcat = fieldcatalog[] i_save = 'X' TABLES t_outtab = it_ekko EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. ENDFORM. " DISPLAY_ALV_REPORT *&---------------------------------------------------------------------* *& Form DATA_RETRIEVAL *&---------------------------------------------------------------------* * Retrieve data form EKPO table and populate itab it_ekko *----------------------------------------------------------------------* FORM data_retrieval. DATA: ld_color(1) TYPE c. SELECT ebeln ebelp statu aedat matnr menge meins netpr peinh UP TO 10 ROWS FROM ekpo INTO TABLE it_ekko. ENDFORM. " DATA_RETRIEVAL
ABAP
복사
복사해서 붙여넣어주자
ekko는 구매 테이블이라 내장되어 있지 않다.
그래서 아까 사용한 scarr 테이블로 사용해줄거다.
TYPE POOLS 타입의 묶음 용도에 따라서 타입을 묶어놨다. SLIS ALV 옵션을 넣어주기 위한 타입의 묶음이다.
slis를 더블클릭해주자

SAP ABAP의 데이터 구조와 선언 방법

SAP ABAP의 데이터 구조와 선언 방법

SAP ABAP에서 데이터는 필드, , 테이블 세 가지 주요 구조로 관리됨.

1. 데이터 구조의 기본 구성 요소

필드 (Field)
하나의 값만 들어가는 공간을 의미함.
필드는 데이터의 가장 작은 단위로, 테이블의 열(Column)과 유사함.
행 (Row)
여러 개의 필드들이 모여서 하나의 행을 구성함.
행은 테이블의 한 줄(Row)로, 여러 필드의 값을 포함하는 데이터 단위임.
테이블 (Table)
여러 개의 행들이 모여서 하나의 테이블을 구성함.
테이블은 데이터의 집합으로, 여러 행(Row)이 들어가는 구조임.

2. 데이터 구조의 예시

필드 예시
A --- 10
Plain Text
복사
하나의 값만을 가지는 필드
행 예시
A B C ------------- 10 30 40 ---> 한 줄이 행
Plain Text
복사
여러 필드가 모여 하나의 행을 구성
테이블 예시
A B C ------------ 10 30 40 20 10 30 44 33 11 22 33 11
Plain Text
복사
여러 행들이 모여 하나의 테이블을 구성

3. 선언 방법

type 오른쪽에 있는 구조를 왼쪽으로 복사한다
필드 선언
1.
ABAP 타입 또는 데이터 타입으로 선언
2.
- (하이픈)가 붙으면 필드로 선언됨. 구조 아래 필드를 선언할 때 사용함.
행 선언
1.
Structure로 선언된 구조는 행을 의미함.
더블클릭해서 타고들어가서
2.
begin of ... end of 구문으로 묶여 있는 경우 행을 선언하는 것임.
테이블 선언
1.
Table로 선언된 구조는 테이블을 의미함.
2.
Occurs가 붙은 경우 무조건 테이블로 선언됨.
3.
TABLE OF가 붙은 경우 테이블을 의미함.

4. 코드 예시

types: begin of slis_fieldcat_main. include type slis_fieldcat_main0. include type slis_fieldcat_main1. types: end of slis_fieldcat_main.
ABAP
복사
include type은 항상 .으로 끝남.
ABAP에서는 모든 실행 구문과 선언 구문이 반드시 .으로 끝나야 함.

5. ABAP의 기타 선언 규칙

LIKE: 데이터 타입과 아밥 타입을 직접 사용할 수 없음. 이미 선언된 구조와 같은 형태로만 사용 가능함.
예: LIKE는 기존에 정의된 데이터 구조를 참조할 때 사용함.
주석 처리 및 해제
컨트롤 + 쉼표 (,): 주석 처리
컨트롤 + 마침표 (.): 주석 해제

SE80 - 실습 → Z2WEEK_ALV00 생성 2

새창을 띄어서 SE11 검색 후 scarr 테이블 컬럼들을 같이 띄어서 본다
*Data Declaration *---------------- TYPES: BEGIN OF t_scarr, mandt TYPE scarr-mandt, carrid TYPE scarr-carrid, carrname TYPE scarr-carrname, currcode TYPE scarr-currcode, url TYPE scarr-url, END OF t_scarr.
ABAP
복사
밑에 코드도 scarr에 맞춰서 바꿔준다.
DATA: it_scarr TYPE STANDARD TABLE OF t_scarr INITIAL SIZE 0, wa_scarr TYPE t_scarr.
ABAP
복사
t_scarr 의 행 구조를 복사해서 it_scarr 테이블로 만든다.
START-OF-SELECTION.
ABAP
복사
위로 전역변수 선언 구역이고 밑으로 이제 실행동작.

1. data_retrieval 수정

더블클릭해서
FORM data_retrieval. DATA: ld_color(1) TYPE c. SELECT ebeln ebelp statu aedat matnr menge meins netpr peinh UP TO 10 ROWS FROM ekpo INTO TABLE it_ekko. ENDFORM.
ABAP
복사
FORM 과 ENDFORM에 묶여 있는데 이게 다 서브루틴이다.
그리고 SELECT 하는 문인데 scarr 필드에 있는 5개 필드를 it_scarr에 넣어달라고 만들어줘야 한다.
변경해주자.
scarr 필드에 맞게 바꿔주자
FORM data_retrieval. DATA: ld_color(1) TYPE c. SELECT mandt carrid carrname currcode url * UP TO 10 ROWS 데이터베이스에서 최대 10개의 행(Row)만을 선택하도록 제한하는 의미 FROM scarr INTO TABLE it_scarr. ENDFORM.
ABAP
복사
ctrl + ,(쉼표) 누르면 주석 처리 가능
ctrl + .(마침표) 는 주석 해제

2. build_fieldcatalog 수정

*&---------------------------------------------------------------------* *& Form BUILD_FIELDCATALOG *&---------------------------------------------------------------------* * Build Fieldcatalog for ALV Report *----------------------------------------------------------------------* FORM build_fieldcatalog. fieldcatalog-fieldname = 'EBELN'. fieldcatalog-seltext_m = 'Purchase Order'. fieldcatalog-col_pos = 0. fieldcatalog-outputlen = 10. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'EBELP'. fieldcatalog-seltext_m = 'PO Item'. fieldcatalog-col_pos = 1. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'STATU'. fieldcatalog-seltext_m = 'Status'. fieldcatalog-col_pos = 2. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'AEDAT'. fieldcatalog-seltext_m = 'Item change date'. fieldcatalog-col_pos = 3. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'MATNR'. fieldcatalog-seltext_m = 'Material Number'. fieldcatalog-col_pos = 4. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'MENGE'. fieldcatalog-seltext_m = 'PO quantity'. fieldcatalog-col_pos = 5. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'MEINS'. fieldcatalog-seltext_m = 'Order Unit'. fieldcatalog-col_pos = 6. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'NETPR'. fieldcatalog-seltext_m = 'Net Price'. fieldcatalog-col_pos = 7. fieldcatalog-outputlen = 15. fieldcatalog-datatype = 'CURR'. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'PEINH'. fieldcatalog-seltext_m = 'Price Unit'. fieldcatalog-col_pos = 8. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. ENDFORM. " BUILD_FIELDCATALOG
ABAP
복사
기존 코드가 이렇게 되어 있는데 이걸 어떻게 바꾸냐면
이렇게 맞춰서 바꿔 주면 된다
*&---------------------------------------------------------------------* *& Form BUILD_FIELDCATALOG *&---------------------------------------------------------------------* * Build Fieldcatalog for ALV Report *----------------------------------------------------------------------* FORM build_fieldcatalog. fieldcatalog-fieldname = 'MANDT'. fieldcatalog-seltext_m = 'Client'. fieldcatalog-col_pos = 0. fieldcatalog-outputlen = 10. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'CARRID'. fieldcatalog-seltext_m = 'Airline Code'. fieldcatalog-col_pos = 1. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'CARRNAME'. fieldcatalog-seltext_m = 'Airline name'. fieldcatalog-col_pos = 2. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'CURRCODE'. fieldcatalog-seltext_m = 'Airline name'. fieldcatalog-col_pos = 3. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'CURRCODE'. fieldcatalog-seltext_m = 'Local currency of airline'. fieldcatalog-col_pos = 4. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. fieldcatalog-fieldname = 'URL'. fieldcatalog-seltext_m = 'Airline URL'. fieldcatalog-col_pos = 5. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. ENDFORM.
ABAP
복사

3. display_alv_report 수정

기존 소스가
FORM display_alv_report. gd_repid = sy-repid. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = gd_repid is_layout = gd_layout it_fieldcat = fieldcatalog[] i_save = 'X' TABLES t_outtab = it_ekko EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. ENDFORM.
ABAP
복사
이걸 변경해서
FORM display_alv_report. gd_repid = sy-repid. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = gd_repid is_layout = gd_layout it_fieldcat = fieldcatalog[] i_save = 'X' TABLES t_outtab = it_scarr EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. ENDFORM.
ABAP
복사
테이블명 만 바꿔주면되다
이제 저장하고 활성화 버튼 클릭 하고 출력버튼 클릭해주면된다
출력화면