ABAP Select Option 예시 복습
SELECTION-SCREEN BEGIN OF BLOCK part8 WITH FRAME TITLE text-008.
SELECT-OPTIONS s_carrid FOR spfli-carrid.
SELECTION-SCREEN END OF BLOCK part8.
ABAP
복사
기존 소스에 이어서 넣으면 에러가 저번에 났었다. 이유는
셀렉트 옵션은 테이블을 미리 정의해주지 않으면 데이터를 가져올 수 없다.
TABLES spfli.
SELECTION-SCREEN BEGIN OF BLOCK part8 WITH FRAME TITLE text-008.
SELECT-OPTIONS s_carrid FOR spfli-carrid.
SELECTION-SCREEN END OF BLOCK part8.
ABAP
복사
두 개 이상의 셀렉트 옵션을 선언하는 예시
SELECTION-SCREEN BEGIN OF BLOCK part8 WITH FRAME TITLE text-008.
SELECT-OPTIONS s_carrid FOR spfli-carrid.
SELECT-OPTIONS s_fltype FOR spfli-fltype.
SELECTION-SCREEN END OF BLOCK part8.
ABAP
복사
조회 화면의 위치는 보통 데이터 선언부 마지막에 START-OF-SELECTION 구문의 앞에 위치한다.
START-OF-SELECTION 앞에 있는 선언부는 전역 변수로, 구문 전체에서 인식된다.
반면에 PERFORM 구문 안에서 선언한 변수들은 로컬 변수로, 해당 구문 내에서만 인식된다.
셀렉트 옵션 조건 예시
SELECTION-SCREEN BEGIN OF BLOCK part1 WITH FRAME TITLE text-001.
SELECT-OPTIONS s_carrid FOR scarr-carrid.
SELECTION-SCREEN END OF BLOCK part1.
ABAP
복사
여기 조회에서 조건을 줄려면 셀렉트 옵션에서 IN 구문을 사용하여 조건을 설정할 수 있다.
셀렉트 옵션에 빈 값을 넣으면 전체 조회가 가능하다.
SELECT mandt carrid carrname currcode url
FROM scarr
INTO TABLE it_scarr
WHERE carrid IN s_carrid.
ABAP
복사
파라미터를 사용하는 경우 단일 조건을 설정할 수 있으며, 빈 값을 넣으면 조회되지 않는다.
= 등호를 사용
PARAMETERS p_carrid TYPE scarr-carrid.
SELECT mandt carrid carrname currcode url
FROM scarr
INTO TABLE it_scarr
WHERE carrid = p_carrid.
ABAP
복사
구조를 보기 위해 셀렉트 구문에 디버깅 버튼을 넣어주자
실행해서 멀티플 셀렉션 버튼 클릭해주고
이 창에서는 특정 필드에 대해 여러 값을 선택하거나 제외할 수 있도록 도와준다.
1.
Select Single Values (단일 값 선택)
•
이 탭에서는 사용자가 특정 필드의 단일 값을 여러 개 입력할 수 있다.
•
예를 들어, CARRID(항공사 코드) 필드에 대해 여러 개의 항공사 코드를 입력하고자 할 때 사용.
2.
Select Ranges (범위 선택)
•
이 탭에서는 값의 범위를 지정하여 데이터를 필터링할 수 있다.
•
예를 들어, 항공사 코드가 AA에서 ZZ 사이의 항공사만 선택하고 싶을 때 사용할 수 있다.
3.
Exclude Single Values (단일 값 제외)
•
이 탭에서는 선택하고자 하는 값들 중 특정 값을 제외하고 싶을 때 사용한다.
•
예를 들어, CARRID 필드에서 특정 항공사 코드(A, B 등)를 제외하고 다른 모든 항공사 코드를 선택하고자 할 때 사용.
4.
Exclude Ranges (범위 제외)
•
이 탭에서는 값의 범위를 제외하고 싶을 때 사용한다.
•
예를 들어, 항공사 코드가 AA에서 ZZ 사이의 항공사는 제외하고 나머지 항공사 코드를 선택하고자 할 때 사용할 수 있다.
이러고 COPY버튼 클릭해서 실행시켜주면
근데 이 구조가 HEADER LINE의 fieldcatalog하고 똑같다
셀렉트 옵션 구조
•
SIGN: I(Include) 또는 E(Exclude)
•
OPTION: EQ(Equal), BT(Between), 등
•
LOW, HIGH: 조건의 범위에 해당하는 값들
S_CARRID의 행 구조를 먼저 보자. 더블클릭 후 들어오면
그 다음에 S_CARRID[] 테이블 구조를 보러가보자
정확히는
AA 포함
>> AA
AB 에서 부터 AZ 까지
>> AA , AB, AC, AF, AZ
AB 제외
>> AA , AC, AF, AZ
AC 에서 AF 제거
>> AA , AZ
결과값은
AA , AZ
INITIALIZATION
여기서 사용자 편하게 조회하게 애초에 할 수 없을까?
SELECT-OPTIONS s_carrid FOR scarr-carrid DEFAULT 'AA'.
ABAP
복사
이렇게 디폴트로 넣을 수도 있지만…이렇게 말고 다른방법으로 고고.
자동완성
INI까지만 쳐도 자동 완성된다.
그럴떄 탭치면 알아서 쳐짐.
INITIALIZATION 구문은 조회 화면이 실행되기 전에 초기값을 설정하는 데 사용된다.
디버깅해도 조회화면 실행전에 작동하는걸 볼 수 있다.
예를 들어, 특정 범위의 값을 초기화할 수 있다.
INITIALIZATION.
s_carrid-sign = 'I'.
s_carrid-option = 'EQ'.
s_carrid-low = 'AA'.
s_carrid-high = ''.
APPEND s_carrid TO s_carrid.
CLEAR s_carrid.
s_carrid-sign = 'I'.
s_carrid-option = 'BT'.
s_carrid-low = 'AB'.
s_carrid-high = 'AZ'.
APPEND s_carrid TO s_carrid.
CLEAR s_carrid.
s_carrid-sign = 'E'.
s_carrid-option = 'EQ'.
s_carrid-low = 'AB'.
s_carrid-high = ''.
APPEND s_carrid TO s_carrid.
CLEAR s_carrid.
s_carrid-sign = 'E'.
s_carrid-option = 'BT'.
s_carrid-low = 'AC'.
s_carrid-high = 'AF'.
APPEND s_carrid TO s_carrid.
CLEAR s_carrid.
ABAP
복사
필드 카탈로그랑 걍 구조가 비슷함. 참고해서 만들면 됨.
이제 조회화면 가서 멀티플 셀렉션 버튼 누르면
알아서 박혀있다.
그리고 잠깐 주석처리
INITIALIZATION.
* s_carrid-sign = 'I'.
* s_carrid-option = 'EQ'.
* s_carrid-low = 'AA'.
* s_carrid-high = ''.
* APPEND s_carrid TO s_carrid.
* CLEAR s_carrid.
*
* s_carrid-sign = 'I'.
* s_carrid-option = 'BT'.
* s_carrid-low = 'AB'.
* s_carrid-high = 'AZ'.
* APPEND s_carrid TO s_carrid.
* CLEAR s_carrid.
*
* s_carrid-sign = 'E'.
* s_carrid-option = 'EQ'.
* s_carrid-low = 'AB'.
* s_carrid-high = ''.
* APPEND s_carrid TO s_carrid.
* CLEAR s_carrid.
*
* s_carrid-sign = 'E'.
* s_carrid-option = 'BT'.
* s_carrid-low = 'AC'.
* s_carrid-high = 'AF'.
* APPEND s_carrid TO s_carrid.
* CLEAR s_carrid.
ABAP
복사
조회화면 마저 완성해보기
SELECTION-SCREEN BEGIN OF BLOCK part1 WITH FRAME TITLE text-001.
SELECT-OPTIONS s_carrid FOR scarr-carrid.
SELECT-OPTIONS s_cname FOR scarr-carrname.
SELECT-OPTIONS s_code FOR scarr-currcode.
SELECT-OPTIONS s_url FOR scarr-url.
PARAMETERS NUM TYPE I.
*PARAMETERS p_carrid TYPE scarr-carrid OBLIGATORY DEFAULT 'AA'.
SELECTION-SCREEN END OF BLOCK part1.
ABAP
복사
여기서 한칸씩 떨어트려보자.
SELECTION-SCREEN SKIP.
ABAP
복사
SELECTION-SCREEN BEGIN OF BLOCK part1 WITH FRAME TITLE text-001.
SELECT-OPTIONS s_carrid FOR scarr-carrid.
SELECTION-SCREEN SKIP.
SELECT-OPTIONS s_cname FOR scarr-carrname.
SELECT-OPTIONS s_code FOR scarr-currcode.
SELECT-OPTIONS s_url FOR scarr-url.
SELECTION-SCREEN SKIP.
PARAMETERS NUM TYPE I.
*PARAMETERS p_carrid TYPE scarr-carrid OBLIGATORY DEFAULT 'AA'.
SELECTION-SCREEN END OF BLOCK part1.
ABAP
복사
명칭을 바꿔주자. Text Elemets 가서
적용 후 조회화면 가서 보면
여기서
하면 NUM까지 출력 해줄 수 있다.
소스로 도움말 넣기.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_cname-low.
* s_cname-low = 'American Airlines'.
TYPES : BEGIN OF abc,
carrname type scarr-carrname,
END of abc.
DATA: IT_F4HELP3 TYPE TABLE OF abc.
SELECT CARRNAME FROM SCARR
INTO TABLE IT_F4HELP3.
DATA: IT_RETURN_TAB TYPE ddshretval OCCURS 0 WITH HEADER LINE .
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'CARRNAME'
VALUE_ORG = 'S'
DYNPROFIELD = 's_cname-low'
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
CALLBACK_FORM = 'CALL_BACK2'
CALLBACK_PROGRAM = SY-REPID
TABLES
VALUE_TAB = IT_F4HELP3
RETURN_TAB = IT_RETURN_TAB
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_cname-high.
* s_cname-high = 'American Airlines'.
TYPES : BEGIN OF abc,
carrname type scarr-carrname,
END of abc.
DATA: IT_F4HELP3 TYPE TABLE OF abc.
SELECT CARRNAME FROM SCARR
INTO TABLE IT_F4HELP3.
DATA: IT_RETURN_TAB TYPE ddshretval OCCURS 0 WITH HEADER LINE .
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'CARRNAME'
VALUE_ORG = 'S'
DYNPROFIELD = 's_cname-high'
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
CALLBACK_FORM = 'CALL_BACK2'
CALLBACK_PROGRAM = SY-REPID
TABLES
VALUE_TAB = IT_F4HELP3
RETURN_TAB = IT_RETURN_TAB
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
*&---------------------------------------------------------------------*
*& Form call_back2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->RECORD_TAB text
* -->SHLP_TOP text
* -->CALLCONTROL text
*----------------------------------------------------------------------*
FORM CALL_BACK2 TABLES RECORD_TAB STRUCTURE SEAHLPRES
CHANGING SHLP_TOP TYPE SHLP_DESCR
CALLCONTROL LIKE DDSHF4CTRL.
SHLP_TOP-INTDESCR-DIALOGTYPE = 'A'. "A 100개 이상이면 다이알로그 조회, D 즉시조회, C 다이알로그 조회
ENDFORM. "call_back
************************************************************************
ABAP
복사
를 START-OF-SELECTION. 위에 넣어주자
기존에는 도움말이 안나옴.
현재
AT SELECTION-SCREEN
AT SELECTION-SCREEN 구문은 셀렉트 옵션에 도움말을 제공하는 데 사용된다.
VALUE-REQUEST 이벤트를 통해 사용자에게 값 선택 도움말을 제공할 수 있다.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_cname-low.
* s_cname-low = 'American Airlines'.
ABAP
복사
•
low 앞 필드
•
high 뒷 필드
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'CARRNAME'
VALUE_ORG = 'S'
DYNPROFIELD = 's_cname-low'
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
CALLBACK_FORM = 'CALL_BACK2'
TABLES
VALUE_TAB = it_f4help3
RETURN_TAB = it_return_tab
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
ABAP
복사
함수 모듈 F4IF_INT_TABLE_VALUE_REQUEST를 사용하여 도움말을 출력해준다.
코드 설명
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_cname-low.
* s_cname-low 필드에 대한 F4 도움말 기능 설정 (하단의 'CALL FUNCTION' 함수로 호출)
* F4 도움말 요청 시 'American Airlines' 같은 값을 입력할 수 있도록 도움말 화면을 제공한다.
TYPES : BEGIN OF abc,
carrname TYPE scarr-carrname, " SCARR 테이블의 CARRNAME 필드를 사용하여 ABC 구조체 선언
END OF abc.
DATA: IT_F4HELP3 TYPE TABLE OF abc. " ABC 구조체 타입의 내부 테이블 선언 (F4 도움말에 사용될 데이터 저장)
" SCARR 테이블에서 CARRNAME 필드를 조회하여 IT_F4HELP3 내부 테이블에 저장
SELECT CARRNAME FROM SCARR
INTO TABLE IT_F4HELP3.
" F4 도움말 반환 테이블 선언
DATA: IT_RETURN_TAB TYPE ddshretval OCCURS 0 WITH HEADER LINE.
" F4 도움말 화면을 호출하는 함수
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'CARRNAME' " 도움말 선택 시 반환할 필드 (CARRNAME 필드 반환)
VALUE_ORG = 'S' " 구조화된 리스트로 값을 제공/ S는 structred 구조화된 리스트로 받아서 선택해서 넣으니까 S를 많이 씀. C는 cell by cell
DYNPROFIELD = 's_cname-low' " 도움말 값이 들어갈 필드 / 반환해서 넣어줄 필드.
DYNPPROG = SY-REPID " 현재 프로그램 ID
DYNPNR = SY-DYNNR " 현재 화면 번호
CALLBACK_FORM = 'CALL_BACK2' " 도움말 콜백 폼 (PERFORM CALL_BACK2 구문 실행) >> 도움말 옵션 넣어줄려고 쓴다.
CALLBACK_PROGRAM = SY-REPID " 현재 프로그램에 대한 콜백 폼 실행
TABLES
VALUE_TAB = IT_F4HELP3 " 도움말 데이터를 담고 있는 테이블
RETURN_TAB = IT_RETURN_TAB " 도움말 선택 시 반환되는 데이터를 담는 테이블
EXCEPTIONS
PARAMETER_ERROR = 1 " 매개변수 오류 발생 시 예외 처리
NO_VALUES_FOUND = 2 " 값이 없을 때 예외 처리
OTHERS = 3. " 기타 예외 처리
"AT SELECTION-SCREEN ON VALUE-REQUEST FOR 구문: s_cname-high 필드에 대한 F4 도움말 설정
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_cname-high.
* s_cname-high 필드에 대해 F4 도움말 설정 (상위와 동일한 로직)
TYPES : BEGIN OF abc,
carrname TYPE scarr-carrname, " SCARR 테이블의 CARRNAME 필드를 사용하여 ABC 구조체 선언
END OF abc.
DATA: IT_F4HELP3 TYPE TABLE OF abc. " ABC 구조체 타입의 내부 테이블 선언
" SCARR 테이블에서 CARRNAME 필드를 조회하여 IT_F4HELP3 내부 테이블에 저장
SELECT CARRNAME FROM SCARR
INTO TABLE IT_F4HELP3.
" F4 도움말 반환 테이블 선언
DATA: IT_RETURN_TAB TYPE ddshretval OCCURS 0 WITH HEADER LINE.
" F4 도움말 화면을 호출하는 함수
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'CARRNAME' " 도움말 선택 시 반환할 필드 (CARRNAME 필드 반환)
VALUE_ORG = 'S' " 구조화된 리스트로 값을 제공
DYNPROFIELD = 's_cname-high' " 도움말 값이 들어갈 필드
DYNPPROG = SY-REPID " 현재 프로그램 ID
DYNPNR = SY-DYNNR " 현재 화면 번호
CALLBACK_FORM = 'CALL_BACK2' " 도움말 콜백 폼 (PERFORM CALL_BACK2 구문 실행)
CALLBACK_PROGRAM = SY-REPID " 현재 프로그램에 대한 콜백 폼 실행
TABLES
VALUE_TAB = IT_F4HELP3 " 도움말 데이터를 담고 있는 테이블
RETURN_TAB = IT_RETURN_TAB " 도움말 선택 시 반환되는 데이터를 담는 테이블
EXCEPTIONS
PARAMETER_ERROR = 1 " 매개변수 오류 발생 시 예외 처리
NO_VALUES_FOUND = 2 " 값이 없을 때 예외 처리
OTHERS = 3. " 기타 예외 처리
*&---------------------------------------------------------------------*
*& Form call_back2
*&---------------------------------------------------------------------*
* 도움말 콜백 함수
*----------------------------------------------------------------------*
* -->RECORD_TAB : 도움말 선택 후의 데이터가 담긴 테이블
* -->SHLP_TOP : 도움말의 상단 설정 구조체
* -->CALLCONTROL : 도움말 제어 구조체
*----------------------------------------------------------------------*
FORM CALL_BACK2 TABLES RECORD_TAB STRUCTURE SEAHLPRES
CHANGING SHLP_TOP TYPE SHLP_DESCR
CALLCONTROL LIKE DDSHF4CTRL.
" 도움말 대화 상자를 표시할 때, A 타입으로 설정
" A : 100개 이상의 값이면 다이얼로그 조회, D : 즉시 조회, C : 다이얼로그 조회
SHLP_TOP-INTDESCR-DIALOGTYPE = 'A'.
ENDFORM. "call_back
ABAP
복사
디버깅
클릭 순간 디버깅을 탄다.
한번 싱글스탭해주면
값이 들어가는게 보인다.
컨티뉴 한번 누르면 콜백으로 간다.
디비안에 디비가 들어가있음.
좌측에 플러스 버튼이 있다. 누르면 사진처럼 토글이 펼쳐짐.
싱글스탭 태우면 이제
A로 변경
쭉 디버깅하면 리턴되는 값까지 볼 수 있다.
4개 필드 넣어보고 한번 보자
TYPES : BEGIN OF abc,
carrid TYPE scarr-carrid,
carrname TYPE scarr-carrname, " SCARR 테이블의 CARRNAME 필드를 사용하여 ABC 구조체 선언
currcode TYPE scarr-currcode,
url TYPE scarr-url,
END OF abc.
DATA: IT_F4HELP3 TYPE TABLE OF abc. " ABC 구조체 타입의 내부 테이블 선언 (F4 도움말에 사용될 데이터 저장)
" SCARR 테이블에서 CARRNAME 필드를 조회하여 IT_F4HELP3 내부 테이블에 저장
SELECT CARRID CARRNAME CURRCODE URL FROM SCARR
INTO TABLE IT_F4HELP3.
ABAP
복사
이제 URL도 만들어보자
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_url-low.
* s_url-low 필드에 대한 F4 도움말 기능 설정 (하단의 'CALL FUNCTION' 함수로 호출)
* F4 도움말 요청 시 'American Airlines' 같은 값을 입력할 수 있도록 도움말 화면을 제공한다.
TYPES : BEGIN OF abc,
carrid TYPE scarr-carrid,
carrname TYPE scarr-carrname, " SCARR 테이블의 URL 필드를 사용하여 ABC 구조체 선언
currcode TYPE scarr-currcode,
url TYPE scarr-url,
END OF abc.
DATA: IT_F4HELP3 TYPE TABLE OF abc. " ABC 구조체 타입의 내부 테이블 선언 (F4 도움말에 사용될 데이터 저장)
" SCARR 테이블에서 url 필드를 조회하여 IT_F4HELP3 내부 테이블에 저장
SELECT CARRID CARRNAME CURRCODE URL FROM SCARR
INTO TABLE IT_F4HELP3.
" F4 도움말 반환 테이블 선언
DATA: IT_RETURN_TAB TYPE ddshretval OCCURS 0 WITH HEADER LINE.
" F4 도움말 화면을 호출하는 함수
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'URL' " 도움말 선택 시 반환할 필드 (URL 필드 반환)
VALUE_ORG = 'S' " 구조화된 리스트로 값을 제공/ S는 structred 구조화된 리스트로 받아서 선택해서 넣으니까 S를 많이 씀. C는 cell by cell
DYNPROFIELD = 's_url-low' " 도움말 값이 들어갈 필드 / 반환해서 넣어줄 필드.
DYNPPROG = SY-REPID " 현재 프로그램 ID
DYNPNR = SY-DYNNR " 현재 화면 번호
CALLBACK_FORM = 'CALL_BACK2' " 도움말 콜백 폼 (PERFORM CALL_BACK2 구문 실행) >> 도움말 옵션 넣어줄려고 쓴다.
CALLBACK_PROGRAM = SY-REPID " 현재 프로그램에 대한 콜백 폼 실행
TABLES
VALUE_TAB = IT_F4HELP3 " 도움말 데이터를 담고 있는 테이블
RETURN_TAB = IT_RETURN_TAB " 도움말 선택 시 반환되는 데이터를 담는 테이블
EXCEPTIONS
PARAMETER_ERROR = 1 " 매개변수 오류 발생 시 예외 처리
NO_VALUES_FOUND = 2 " 값이 없을 때 예외 처리
OTHERS = 3. " 기타 예외 처리
NUM = 10.
"AT SELECTION-SCREEN ON VALUE-REQUEST FOR 구문: s_url-high 필드에 대한 F4 도움말 설정
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_url-high.
* s_url-high 필드에 대해 F4 도움말 설정 (상위와 동일한 로직)
TYPES : BEGIN OF abc,
url TYPE scarr-url, " SCARR 테이블의 URL 필드를 사용하여 ABC 구조체 선언
END OF abc.
DATA: IT_F4HELP3 TYPE TABLE OF abc. " ABC 구조체 타입의 내부 테이블 선언
" SCARR 테이블에서 URL 필드를 조회하여 IT_F4HELP3 내부 테이블에 저장
SELECT URL FROM SCARR
INTO TABLE IT_F4HELP3.
" F4 도움말 반환 테이블 선언
DATA: IT_RETURN_TAB TYPE ddshretval OCCURS 0 WITH HEADER LINE.
" F4 도움말 화면을 호출하는 함수
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'URL' " 도움말 선택 시 반환할 필드 (URL 필드 반환)
VALUE_ORG = 'S' " 구조화된 리스트로 값을 제공
DYNPROFIELD = 's_url-high' " 도움말 값이 들어갈 필드
DYNPPROG = SY-REPID " 현재 프로그램 ID
DYNPNR = SY-DYNNR " 현재 화면 번호
CALLBACK_FORM = 'CALL_BACK2' " 도움말 콜백 폼 (PERFORM CALL_BACK2 구문 실행)
CALLBACK_PROGRAM = SY-REPID " 현재 프로그램에 대한 콜백 폼 실행
TABLES
VALUE_TAB = IT_F4HELP3 " 도움말 데이터를 담고 있는 테이블
RETURN_TAB = IT_RETURN_TAB " 도움말 선택 시 반환되는 데이터를 담는 테이블
EXCEPTIONS
PARAMETER_ERROR = 1 " 매개변수 오류 발생 시 예외 처리
NO_VALUES_FOUND = 2 " 값이 없을 때 예외 처리
OTHERS = 3. " 기타 예외 처리
ABAP
복사
리스트박스 사용 예시
전체소스
p_carrid 에 맞게 변경
SELECT
CARRID AS KEY, " SCARR 테이블의 CARRID 필드를 KEY로 선택
CARRID && ' ' && CARRNAME AS TEXT " CARRID와 CARRNAME 필드를 결합하여 TEXT 필드로 선택
FROM SCARR " SCARR 테이블에서 데이터를 가져옴
INTO TABLE @LT_DROPLIST. " 결과를 LT_DROPLIST 내부 테이블에 저장
ABAP
복사
SORT LT_DROPLIST BY KEY TEXT. " LT_DROPLIST를 KEY와 TEXT 필드 기준으로 정렬
DELETE ADJACENT DUPLICATES FROM LT_DROPLIST. " LT_DROPLIST에서 인접한 중복 항목을 제거
CALL FUNCTION 'VRM_SET_VALUES' " VRM_SET_VALUES 함수 호출 (리스트 박스 값 설정)
EXPORTING
id = 'p_carrid' " 리스트 박스에 값을 설정할 파라미터 ID (여기서는 'p_carrid')
values = LT_DROPLIST. " 리스트 박스에 설정할 값들 (정렬되고 중복 제거된 LT_DROPLIST)
IF sy-subrc = 0. " 함수 호출이 성공적으로 이루어졌는지 체크
* Implement suitable error handling here " 필요에 따라 적절한 오류 처리 코드 작성
ENDIF.
ABAP
복사
p_period 에 맞게 변경
PERIOD 필드와 LT_DROPLIST 테이블의 KEY 필드 간의 데이터 타입이 호환되지 않아서 발생한 문제. 데이터베이스 필드 PERIOD의 타입이 LT_DROPLIST의 KEY 필드와 일치하지 않기 때문에, 이 둘을 직접 연결하려고 할 때 오류가 발생한거다.
SELECT
CAST( PERIOD AS CHAR ) AS KEY, " PERIOD 필드를 CHAR 타입으로 변환하여 KEY 필드에 저장
CAST( PERIOD AS CHAR ) AS TEXT " PERIOD 필드를 CHAR 타입으로 변환하여 TEXT 필드에 저장
FROM SPFLI " SPFLI 테이블에서 데이터 조회
INTO TABLE @LT_DROPLIST. " 변환된 데이터를 LT_DROPLIST 테이블에 저장
ABAP
복사
디버깅해서 보면
중복값이 너무 많다….
쇼트하면 정렬되서
중복값을 제거해주면(무조건 정렬해줘야지 중복제거됨)
p_connid 에 맞게 변경
CONNID 필드는 CHAR 타입이 아니기 때문에 문자열 연결 연산에서 사용할 수 없다는 내용
CAST 구문을 문자열 연결(&&)과 함께 사용할 수 없다는 내용.
SAP ABAP에서는 문자열 연결 시 형 변환(CAST)을 직접 사용할 수 없으므로 CONNID 필드를 미리 CHAR로 변환한 후에 연결 작업을 진행해야 한다.
SELECT
CONNID AS KEY, " SPFLI 테이블에서 CONNID 필드를 KEY로 선택
CARRID && ' ' && CITYFROM && '=>' && " CARRID, CITYFROM, CITYTO 필드를 연결하여 텍스트 형식으로 구성
CITYTO AS TEXT " 예: CARRID ' CITYFROM => CITYTO' 형식의 문자열로 TEXT 필드 생성
FROM SPFLI " SPFLI 테이블로부터 데이터를 가져옴
INTO TABLE @LT_DROPLIST. " 결과를 LT_DROPLIST 내부 테이블에 저장
ABAP
복사
뉴 sql 문에 , 랑 @ 찍는 구조
리스트박스는 파라미터에만 적용 가능하며 셀렉트 옵션에는 적용할 수 없다.
SELECTION-SCREEN BEGIN OF BLOCK part5 WITH FRAME TITLE text-005.
PARAMETERS p_carrid TYPE spfli-carrid AS LISTBOX VISIBLE LENGTH 20 DEFAULT 'LH'.
PARAMETERS p_connid TYPE spfli-connid AS LISTBOX VISIBLE LENGTH 60 DEFAULT '0017'.
SELECTION-SCREEN END OF BLOCK part5.
ABAP
복사
조인문
조인 예시
조인은 테이블을 결합하여 데이터를 조회할 때 사용된다.
대표적인 조인 방식으로는 LEFT OUTER JOIN, RIGHT OUTER JOIN, INNER JOIN 등이 있다.
•
LEFT OUTER JOIN: 왼쪽 테이블의 모든 행을 조회하고, 오른쪽 테이블에서 일치하는 값이 있는 경우 결합된다.
•
INNER JOIN: 두 테이블에서 일치하는 행만 조회된다.
SELECT *
FROM A LEFT OUTER JOIN B
ON A.B = B.B.
ABAP
복사
조인 구문은 알맞은 조건을 설정하여 데이터를 효율적으로 조회할 수 있다.
OUTER JOIN
•
두 테이블에 같은 컬럼이 무조건 있어야한다. = B
•
LEFT OUTER JOIN = 왼쪽은 다 나오게 하고 오른쪽은 B가 같은것만 나오게 한다.
•
RIGHT OUTER JOIN = 오른쪽은 다 나오게 하고 왼쪾은 B가 같은것만 나오게 한다.
•
FULL OUTER JOIN = 왼쪽 오른쪽 다나오는데 B가 같은것끼리 한줄로 합쳐줌
◦
아밥에서 사용안함..
INNER JOIN
•
같은 값만 나온다 = 한줄로 합쳐지는게 가능한거만 나온다
•
제일 많이 씀
CRROS JOIN
•
행 * 행이 총 개수다.
•
ON 조건이 없다.
•
모든 경우의 수다
예시 조인 소스
se38 가서 DEMO_JOINS 소스를 보면 조인이 들어간 소스를 볼 수 있다.
소스