Search
Duplicate
✏️

SPFLI 테이블 실습 2

SPFLI 테이블 실습 2

SPFLI 테이블가지고 연습
1.
fltime이 정수 타입으로 나오게 변경
field catalog를 찾아보기
edit_mask
2.
distance 필드도 소수점이 안나오게 변경
3.
다양한 레이아웃 옵션, field catalog option 옵션 사용해보기
안 넣어본거 테스트 한번 해보기
4.
scarr 테이블에서 긴 컬럼 제목 다 나오게 currode 필드
5.
서브토탈 사용해보기
a.
PRICE 토탈 서브 토탈(CARRID CONNID 기준)
b.
CURRENCY 필드에 녹색 넣어보기

실습

SPFLI 테이블 ZTEST 변경 전 전체 소스
SPFLI 테이블 ZTEST 변경 후 전체 소스

1. fltime이 정수 타입으로 변경 2. distance 필드도 소수점이 안나오게 변경

변경 후 출력 사진
fieldcatalog-fieldname = 'FLTIME'. fieldcatalog-seltext_m = 'Flight time'. fieldcatalog-col_pos = 3. fieldcatalog-edit_mask = '____'. " 정수형으로 포맷 변경/_가 몇개인지에 따른 자릿수 APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. " ....중간에 다른 소스들 fieldcatalog-fieldname = 'DISTANCE'. fieldcatalog-seltext_m = 'Distance'. fieldcatalog-col_pos = 6. fieldcatalog-decimals_out = '0'. " 소수점 삭제 APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog.
ABAP
복사

3. 다양한 레이아웃 옵션, field catalog option 옵션 사용해보기

필드 카탈로그의 다양한 옵션 정리 소스

* 필드 카탈로그 설정 CLEAR fieldcatalog. * 필드 이름 설정 fieldcatalog-fieldname = 'CARRID'. " 필드의 이름을 'CARRID'로 설정 * 필드 설명(중간 길이 텍스트) 설정 fieldcatalog-seltext_m = 'Airline Code'. " 필드의 중간 길이 선택 텍스트(제목)를 'Airline Code'로 설정 * 필드 데이터 타입 설정 (문자형) fieldcatalog-datatype = 'CHAR'. " 필드의 데이터 타입을 문자형(CHAR)으로 설정 * 필드 내부 데이터 타입 설정 (문자형) fieldcatalog-inttype = 'C'. " 필드의 내부 데이터 타입을 문자형으로 설정하여 선행 0을 유지 * 출력 길이 설정 fieldcatalog-outputlen = 10. " 필드의 출력 길이를 10으로 설정 * 소수점 자리수 설정 fieldcatalog-decimals = 2. " 소수점 자리수를 2자리로 설정 * 출력 마스크 설정 (네 자리 숫자로 출력) fieldcatalog-edit_mask = '____'. " 필드 값의 포맷을 네 자리 숫자로 정의 * 선행 0 유지 여부 설정 fieldcatalog-lzero = 'X'. " 선행 0을 유지하도록 설정 * 출력 여부 설정 (출력하지 않음) fieldcatalog-no_out = 'X'. " 해당 필드를 출력하지 않도록 설정 * 정렬 설정 (오른쪽 정렬) fieldcatalog-just = 'R'. " 필드의 정렬을 오른쪽 정렬로 설정 * 키 필드 설정 fieldcatalog-key = 'X'. " 필드를 키 필드로 설정 * 핫스팟 설정 (클릭 가능) fieldcatalog-hotspot = 'X'. " 필드를 핫스팟으로 설정하여 클릭 가능하게 설정 * 체크박스 설정 fieldcatalog-checkbox = 'X'. " 필드를 체크박스로 설정 * 색상 설정 (색상 코드 5번으로 변경) fieldcatalog-color = '5'. " 필드의 색상을 변경 (색상 코드 5) * 출력 위치 설정 (2번째 열에 출력) fieldcatalog-col_pos = 2. " 필드를 2번째 위치에 출력 * 필드가 속한 내부 테이블 이름 설정 fieldcatalog-tabname = 'IT_SPFLI'. " 필드가 'IT_SPFLI' 테이블에 속한다고 설정 * 툴팁 설정 (마우스 오버 시 툴팁 표시) fieldcatalog-tooltip = 'This is Airline Code'. " 마우스를 올렸을 때 툴팁으로 'This is Airline Code' 표시 * 필드를 아이콘으로 설정 fieldcatalog-icon = 'X'. " 필드를 아이콘으로 설정 * 집계 필드로 설정 (합계 계산) fieldcatalog-do_sum = 'X'. " 필드를 합계를 계산하는 필드로 설정 * 필드 고정 여부 설정 fieldcatalog-fixed = 'X'. " 필드를 고정된 위치에 출력하도록 설정 * 필드 카탈로그에 추가 APPEND fieldcatalog TO fieldcatalog. * 필드 카탈로그 클리어 (다음 필드를 위해 초기화) CLEAR fieldcatalog.
ABAP
복사

1) fieldcatalog-key 키 필드로 설정

fieldcatalog-fieldname = 'MANDT'. fieldcatalog-seltext_m = 'Client'. fieldcatalog-col_pos = 0. fieldcatalog-outputlen = 10. fieldcatalog-key = 'X'. " 키 필드로 설정 APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog.
ABAP
복사

2) fieldcatalog-hotspot 클릭 가능 / fieldcatalog-just 정렬

fieldcatalog-fieldname = 'CARRID'. fieldcatalog-seltext_m = 'Airline Code'. fieldcatalog-col_pos = 1. fieldcatalog-hotspot = 'X'. " 클릭 가능하게 설정 fieldcatalog-just = 'L'. " 왼쪽 정렬 fieldcatalog-tooltip = 'Airline Identifier'. " 툴팁 설정 APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog.
ABAP
복사
커서 갖다대면 클릭 커서로 변경
fieldcatalog-fieldname = 'FLTIME'. fieldcatalog-seltext_m = 'Flight time'. fieldcatalog-col_pos = 3. fieldcatalog-edit_mask = '____'. " 정수형으로 포맷 변경 _4번 fieldcatalog-just = 'R'. " 오른쪽 정렬 APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog.
ABAP
복사

3) fieldcatalog-lzero

fieldcatalog-fieldname = 'CONNID'. fieldcatalog-seltext_m = 'Airline name'. fieldcatalog-col_pos = 2. fieldcatalog-inttype = 'C'. " 문자 타입으로 설정하여 앞의 0 유지 fieldcatalog-lzero = 'X'. " 선행 0 유지 APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog.
ABAP
복사
엥 근데 전이랑 큰 변화가 없어보여유!
fieldcatalog-lzero = 'X' 설정을 적용하지 않아도 선행 0이 이미 나오고 있던 이유
해당 필드의 데이터 타입 때문.
CONNID 필드가 NUMC (숫자로 구성된 문자형) 타입인 경우
기본적으로 선행 0이 자동으로 유지되는 특징이 있다.
NUMC는 숫자로 이루어진 문자형 데이터 타입이기 때문에, 숫자처럼 보이지만 실제로는 문자형 데이터로 다뤄짐. 문자형 데이터에서는 선행 0이 중요한 정보로 간주되기 때문에 따로 lzero 옵션을 주지 않아도 선행 0이 유지된 상태로 출력된다..
굳이 lzero = 'X' 설정을 추가하지 않더라도 기본적으로 선행 0이 유지된다!
fieldcatalog-inttype = 'C'. " 문자 타입으로 설정하여 앞의 0 유지
ABAP
복사
NUMC 타입의 필드는 별도의 설정 없이도 자동으로 선행 0이 유지된다한다..
즉, 현재 상황에서는 fieldcatalog-lzero = 'X'가 굳이 필요하지 않다고 볼 수 있음 ㅎㅎ
아 근데 그래서 선행 0 유지가 무슨말인데??????????
값이 00123이라면 lzero = 'X' 설정 시 출력될 값은 00123
반대로 lzero = ''로 설정하면 출력될 값은 123 (앞의 0이 사라짐). fieldcatalog-lzero = 'X' 이면 0을 유지해서 출력되도록 할 수 있음.

4. scarr 테이블에서 긴 컬럼 제목 다 나오게 currode 필드

컬럼명이 길어서 그런지 해당 컬럼명이 짤려서 나옴
fieldcatalog-fieldname = 'CURRCODE'. fieldcatalog-seltext_l = 'Local currency of airline'. "seltext_m에서 seltext_l로 변경해서 컬럼명 전체 노출 fieldcatalog-col_pos = 4. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog.
ABAP
복사
짠- 이제 전체 컬럼명 노출

5. 서브토탈 - SPFLI 테이블로 해보기.

기존꺼 안에서 처리해본거
전체소스

색상 입히기 - 녹색

fieldcatalog-fieldname = 'DISTANCE'. fieldcatalog-seltext_m = 'Distance'. fieldcatalog-col_pos = 6. fieldcatalog-decimals_out = '0'. "소수점 삭제 fieldcatalog-emphasize = 'C300'. " 녹색 강조 APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog.
ABAP
복사

서브토탈 sort 처리

* Sort 설정 DATA: it_sort TYPE slis_t_sortinfo_alv WITH HEADER LINE. * 중간소스... *&---------------------------------------------------------------------* *& Form BUILD_SORT *&---------------------------------------------------------------------* * Set sort conditions *----------------------------------------------------------------------* FORM build_sort. it_sort-fieldname = 'CARRID'. " 첫 번째 정렬 기준 it_sort-up = 'X'. " 오름차순 정렬 it_sort-subtot = 'X'. " 서브토탈 사용 APPEND it_sort TO it_sort. CLEAR it_sort. it_sort-fieldname = 'CONNID'. " 두 번째 정렬 기준 it_sort-up = 'X'. " 오름차순 정렬 it_sort-subtot = 'X'. " 서브토탈 사용 APPEND it_sort TO it_sort. ENDFORM. " BUILD_SORT * 중간 소스 .. 등등 *&---------------------------------------------------------------------* *& 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[] it_sort = it_sort[] " 정렬 추가 i_save = 'X' TABLES t_outtab = it_SPFLI 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
ABAP
복사
별짓을 다 해본거…ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
근데 0000값을 안보여주고 싶은데 잘안됨….
전체소스

do-sum | 서브 토탈

" 거리 필드 설정 (출력 순서 6번째, 서브토탈 및 합계에 사용) fieldcatalog-fieldname = 'DISTANCE'. fieldcatalog-seltext_m = 'Distance'. fieldcatalog-col_pos = 6. fieldcatalog-decimals_out = '0'. fieldcatalog-emphasize = 'C300'. " 녹색 강조 (강조 컬러 사용) fieldcatalog-do_sum = 'X'. " 합계 표시 (DISTANCE 필드에 서브토탈 및 총합 표시) APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. " 중간 소스 ... *&---------------------------------------------------------------------* *& Form BUILD_SORT *&---------------------------------------------------------------------* * Set sort conditions *----------------------------------------------------------------------* FORM build_sort. " 첫 번째 정렬 기준: 항공사 코드(CARRID) 기준으로 정렬 it_sort-fieldname = 'CARRID'. " 첫 번째 정렬 기준 it_sort-up = 'X'. " 오름차순 정렬 it_sort-subtot = 'X'. " 서브토탈 사용 APPEND it_sort TO it_sort. " 두 번째 정렬 기준: 항공편 연결 코드(CONNID) 기준으로 정렬 CLEAR it_sort. it_sort-fieldname = 'CONNID'. " 두 번째 정렬 기준 it_sort-up = 'X'. " 오름차순 정렬 it_sort-subtot = 'X'. " 서브토탈 사용 APPEND it_sort TO it_sort. ENDFORM. " BUILD_SORT " 중간 소스.... *&---------------------------------------------------------------------* *& Form BUILD_LAYOUT *&---------------------------------------------------------------------* * Build layout for ALV grid report *----------------------------------------------------------------------* FORM build_layout. " ALV 레이아웃 설정 gd_layout-no_input = 'X'. gd_layout-colwidth_optimize = 'X'. gd_layout-zebra = 'X'. gd_layout-totals_before_items = ' '. " 서브토탈을 데이터 아래에 표시 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[] it_sort = it_sort[] " 정렬 추가 i_save = 'X' TABLES t_outtab = it_SPFLI 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
ABAP
복사