프로그램을 실행하기 위한 조건을 입력 받는 화면.
sql 뿐만 아니라 다양한 조건 모두 가능함.
selection screen은 parameters와 select-options로 양분됨.

selection screen의 번호는 1000번이라고 정해져 있음. 실무에서 1000번에 추가하자 ~ 라고 말하면 parameters, select-options에 추가하자는 뜻임. 실무에서는 1000번 스크린이라고 부르기도 함

selection screen으로 값을 넣으면 abap program에서 쿼리를 날려서 db 접근

필드를 더블클릭해서 연산자를 변경할 수 있음

parameter를 선언하면 전역변수와 똑같이 생긴 모습으로 생성,
전역 변수와 똑같이 사용할 수 있음

parameters와 select-options의 차이

파라미터를 프로그램에서 쓸 때 일어나는 동작
입력받은 데이터를 셀렉해서 데이터를 가져옴

select options를 프로그램에서 쓸 때 일어나는 동작
select options가 텅 비어 있으면 조건으로 넣지 않고 pass해버림.

selection screen의 block 그리는 법, title 꼭 줘야 함.
프로그램 작성할 때 selection screen 마지막에 완성하려고 하지 말고
처음에 그릴 때부터 완성해 놓기.

begin of line → 밑으로 나열되는 파라미터를 옆으로 나란히 나오게 할 때.
comment → 체크 박스 이름을 줌. 길이 지정을 하기가 까다로움. 사이즈 계산을 잘해서 써야 함. 1(20) text-s03 ⇒ 시작부터 20번째 칸까지 text-s03 출력하기. 이런 게 있다는 걸 알고 나중에 쓸 일 있으면 쓰기.

PARAMETERS <f> "필드
[TYPE <type>] [LIKE <f1>] [DECIMALS <n>] [MEMORY ID <pid>]
[OBLIGATORY] [DEFAULT <value>] [LOWER CASE] [VALUE CHECK]
[AS CHECKBOX]
[RADIOBUTTON GROUP <grp>] [MODIF ID <mod>].
: 필드
LENGTH : TYPE C, N, X or P에만 적용되며,길이를 정의함
LIKE : 오브젝트와 같은 데이터 타입 선언
DECIMALS : dec 소수점 자리를 지정함
MEMORY ID : 메모리 파라미터를 할당함, sap 메모리를 줄 수 있음. 나중에 다루게 됨.
OBLIGATORY를 주면 필수입력 항목에 값을 전부 입력하라고 sap가 직접 체크해줌. 해당 파라미터가 필수 입력 속성이 됨. 화면 필드에는 물음표(?)가 표시됨
default: 파라미터의 기본값을 설정할 수 있음. 예를 들면, 오늘 날짜.
lower case: 파라미터가 소문자를 입력받을 수 있게 됨.
value check: 체크 테이블을 이용해서 사용자가 넣은 데이터와 일치하는지, 올바른 값인지 확인. 참조하고 있는 데이터 엘리먼트가 도메인에 check table 을 가지고 있어야 함.
as checkbox: 이 파라미터는 체크박스로 표시해라.
radiobutton group : 체크박스는 여러 개를 선택할 수 있지만 라디오 버튼은 여러 개 중에서 하나만 선택할 수 있음. 라디오버튼 여러 개를 그룹으로 묶어서 그 중에 하나만 선택하는 것.
MODIF ID : 이건 나중에. 해당 속성을 변경하는 id를 부여하는 것까지만 알기.
PARAMETERS: pa_carr TYPE sflight-carrid,
pa_name AS CHECKBOX DEFAULT 'X',
pa_curr AS CHECKBOX DEFAULT 'X',
pa_lim_1 RADIOBUTTON GROUP lim DEFAULT 'X',
pa_lim 2 RADIOBUTTON GROUP lim,
pa_lim_3 RADIOBUTTON GROUP lim.
CONSTANTS gc_mark VALUE 'X'.
* Check if any checkbox has been selected
IF pa_name EQ gc_mark.
ENDIF.
IF pa_curr EQ gc_mark.
ENDIF.
* Check which radiobutton has been selected
CASE gc_mark.
WHEN pa_lim 1.
WHEN pa_lim_2.
WHEN pa_lim_3.
ENDCASE.
pa : prefix, parameter라는 뜻.
parameters: 선언
pa_name AS CHECKBOX DEFAULT 'X' : 에서 X에 대한 설명, 체크 박스는 character 한자리이고 x값이 들어가는데, x가 있으면 선택되었다는 뜻.
pa_lim_1 RADIOBUTTON GROUP lim DEFAULT 'X',
pa_lim 2 RADIOBUTTON GROUP lim,
pa_lim_3 RADIOBUTTON GROUP lim.
: 그룹이 같은 것 중에서 하나만 선택. 그룹의 이름이 같으면 그룹으로 묶이는 검
CONSTANTS gc_mark VALUE 'X': 선택 여부를 확인하기 위해 X라는 상수를 선언
여기까지하고 활성화하면 1000번 스크린이 생성됨.
IF pa_name EQ gc_mark.
ENDIF.
IF pa_curr EQ gc_mark.
ENDIF.
체크박스는 하나씩 if문으로 체크 했는지 아닌지 확인해야 하고
라디오버튼도 if문으로 확인하는 것 가능하지만, 그룹에서 하나만 선택하는 것이기 때문에 case-when절을 사용한다. case 절에 상수로 x값이 오고 when절에는 라디오버튼 변수 이름.

type 대신 for를 사용. standard table이 아닌 field를 참조함.
다양한 조건을 담을 수 있음
select options 는 internal table의 형태임, 생성하면 자동으로 internal table이 됨. sign, option, low, high의 네 개 column도 자동으로 생김.
화살표 모양으로 생긴 multiple selection button을 누르면 여러 개의 조건을 선택할 수 있게 되고 in 연산자처럼 쓸 수 있음.
append신경 안 써도 됨. 자동으로 됨.


두 줄 이상이 append 되면 녹색 불이 들어옴.

진짜 프로라면 값을 줄 때 parameter에서 배운 것처럼 report 프로그램의 이벤트를 통해서 parameter나 select option의 기본값을 세팅함. default to 등과 같은 방식으로 하지 않음
select options에만 있는 옵션.
여러 조건을 허용하지 않겠다는 뜻으로 확장 검색을 하는 화살표 버튼이 사라짐.
범위 검색을 막겠다는 뜻으로 high 필드를 숨김, parameter처럼 보이게 됨
table을 structure처럼 쓰겠다, select options 전에 선행되어야 함, tables 선언되어야 해당 객체를 사용할 수 있음, 프로그램으로부터 해당 테이블의 layout을 사용하겠
select에서 필드명을 주면 에러, *로 가져와야
select options는 headerline internal table이라서 work area와 internal table이 한 몸이고, 둘이 이름이 똑같음, [ ]가 있으면 internal table이고 없으면 workarea(=headerline)임. headerline은 internal table위에 있음. 프로그램에서 자주 쓰면 퍼포먼스에 영향을 미치기 때문에 좋지 않음.

header line = work area.
work area가 탑재된 internal table를 선언하기.

with hearder line 구문을 추가하면 header line이 있는 테이블이 선언됨.
internal table의 이름이 work area 이름으로 사용됨.
into 생략해도 알아서 수행이 됨, 문법이 더 간략해짐.
예를 들면, append gs into gt → append itab.
이름이 같을 때, itab과 work area를 구분하는 법.
itab [] : internal table,
itab : work area.
만약, internal table 전용 명령어 일 때는 [] 없어도 알아서 잘 수행됨.
명확하게 구분을 할 필요가 있을 때, 예를 들면, clear할 때는 [] 필요.
select options가 header line table이니까 append 하려면
so_carr-sing = i.
so_carr-option = eq.
so_carr-low = ‘AA’
append so_carr.
read table so_carr index 1.
지금 개발하고 있는 report program의 특징
이벤트 .

화살표는 이벤트가 흘러가는 순서.
이벤트 자체가 type 1 program에만 가능함. type 1 = report program.
이벤트가 선언되면 이벤트가 시작되고, 다음 이벤트가 선언되는 부분에서 현재 진행 중인 이벤트가 종료됨.

실행 가능한 아밥 프로그램에서 처리가 일어나는 과정.
program strat = f8. → initialization을 찾아 감 → 디폴트 값 세팅 → selection screen을 보여줌 → at selection screen을 찾아 감. (pai는 나중에 100번 스크린 할 때 배울 것 ) → 오류 / 권한 체크 → 올바르지 않은 값이면 에러 메세지를 뿌리고 display selection screen으로 돌아감 → 올바른 값일 때 start of selection → 본론으로 들어가서 메인 로직을 수행함 .
display list buffer as list는 전혀 중요하지 않음.

각각의 이벤트에 따라서 어떤 동작이 일어나야 하는지.
initialization = dynamic preassignment. 동적인 기본값 할당.
at selection screen = 유효성, 권한 check 로직
start-of-selection = 처리부분.

event blocks의 순서가 바뀐다고 해도 정상적으로 수행은 됨.

하지만 이게 상식적으로 위와 같은 이벤트 블록의 순서를 지켜야 함.
abap program의 동작 예시.

AT selection-screen 이벤트에서 값이 들어왔을 때

만약 잘못된 값이면 에러 메세지 + stop

initialization의 예시.

출력 속성을 통제하고 싶은 아이들에게 modif id를 줘야 함. 변경될 아이들이라는 표시임. 출력 속성은 modif id가 있는 걸로 대상을 구분지어서 사용함.
예를 들면, modif id가 있는 것만 읽기 전용 속성으로 출력하기.
지금은 오른쪽 내용만 보기.
screen에는 이런 속성이 있다.
loop at screen 그림에, modify screen에 붙이기.
진한 파란색 = 키가 되는 정보. 개체를 그룹으로 다룰 것인지, 개별적으로 관리할 것인지.
screen-group1은 다수의 개체에 한 번에 동일한 속성을 주고자 할 때, modif id를 줘서 group1로 묶어서 사용할 수 있음.
연한 파란색 = 선택한 개체에 대해 줄 수 있는 속성들.
group1만 신경쓰기.
group1의 이름이 sel.
modify screen의 기본 문법.
위에 process before output은 100번 스크린에서 하는 거니까 신경쓰지 않기.

같은 이름으로 묶인 modif id는 group1 으로 들어가서 통제할 수 있게 됨.
name은 선언한 파라미터, select option의 이름이 들어감. modify id를 주지 않아도 이름으로 판단해서 개별적으로 출력 속성을 통제할 수 있음.
반드시 name, group1을 사용해서 출력 속성을 통제해야 함.
required =
input= 1 활성화 0 비활성화
intensified = 글자가 파란색으로 강조됨. 아밥퍼 개인 취향으로 .
active = 활성화 시키면 화면에 나오고, 비활성화 시키면 화면에서 사라짐.
필드를 더블클릭해서 연산자를 변경할 수 있음