
Today we are learning about this.
go_dock TYPE REF TO cl_gui_docking_container
이건 Layout에 영역을 안줘도 된다.
기존의 go_con의 객체를 생성하고, GO_ALV의 객체를 생성한뒤 gt_list 를 뿌려주던 전과 다르게
docking의 객체를 생성하고 , GO_ALV의 객체를 생성한뒤 gt_list 를 뿌려주면된다.
기존과 달라지는 점은 go_con -> cl_gui_custom_container 에서
go_dock => cl_gui_docking_container로 바뀐것과 화면에 CON을 안만들어줘도 되는 것이다.
창을 마음대로 줄였다 늘렸다 할 수 있다.
SY-CPROG: SY-CPROG는 현재 실행 중인 ABAP 프로그램의 이름을 나타내는 시스템 필드입니다. 즉, 현재 실행되고 있는 ABAP 코드가 속한 프로그램의 이름을 나타냅니다.
SY-DYNNR: SY-DYNNR는 현재 실행 중인 다이얼로그 화면(Dynpro)의 번호를 나타내는 시스템 필드입니다. 화면 번호는 SAP에서 프로그램의 화면을 정의할 때 사용되는 고유 번호입니다.
SY-CPROG = ZRS5A12910 SY-DYNNR = 1000. (SELECTION SCREEN은 기본 1000번이다)

* Selection Screen
SELECT-OPTIONS so_dat FOR gs_req-rdate.
"SIGN / OPTION / LOW / HIGH

그리고 이렇게 조건에 IN 까지주면 아래와 같은 화면이 나온다.

이 화면은 TOP에 선언만으로도 뜨는 거고 조건절에 추가해줌으로써
저 날짜에 해당하는 조건으로 alv 를 띄울 수 있게 된다.
단 여기서 SELECT-OPTIONS 은 이벤트 프로그램에서만 사용 가능한 문법이다.
모듈풀 프로그램에서 사용하려면 type range 로 줘야한다.
흐름을 잘모르겠다.
INCLUDE ZRS5A12910_TOP.
INCLUDE ZRS5A12910_O01.
INCLUDE ZRS5A12910_I01.
INCLUDE ZRS5A12910_F01.
*LOAD-OF-PROGRAM.
INITIALIZATION.
AT SELECTION-SCREEN OUTPUT. "PBO
AT SELECTION-SCREEN. "PAI
START-OF-SELECTION.
"기내식 신청 현황 리스트
PERFORM get_req_list.
" ALV
CALL SCREEN 0100.
이런 상황이라면 어떻게 흘러가는 순서인거지?
일단 AT SELECTION-SCREEN. 이런게 이벤트인데 이벤트프로그램은 이벤트 프로그램에 따라 흘러가고
모듈풀프로그램은 스크린프로그램이라 스크린에 따라 흘러간다.
이렇게 파라미터로 쓰게 되면 그리고 조건이 BOOKID가 EQ이니까 같은경우만 찾게 됩니다.
SELECT-OPTIONS so_bid FOR gs_req-bookid NO INTERVALS. 라는 문법에서
NO INTERVALS는 HIGH는 없는 거다. 즉 ~부터 ~까지 라는 조건을 못쓰게 막는거다.
SELECT-OPTIONS so_bid FOR gs_req-bookid NO INTERVALS NO-EXTENSION. 라는 문법은
NO-EXTENSION이 추가되어 입력을 안하면 모든 건을 검색한다는 뜻이 된다.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME. 이것과
SELECTION-SCREEN END OF BLOCK b1. 이것을 쓰면 같은 프레임으로 묶어준다

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-h01.
TITLE text-h01.라는 타이틀을 가진 박스가 된다.


이벤트 프로그램은 무조건 1000번으로 시작해야합니다.

MODIFY gt_req FROM gs_req TRANSPORTING carrname. 해당 문법에서
TRANSPORTING carrname. 은 carrname 만 수정해주세요 라는 뜻입니데이.

selection option에서 선언하는건 헤더라인이 있는 이터널 테이블이다.
그러므로 append 를 해줘야 기본 디폴트값이 설정도니다.
SO_DAT[] = 이터널 테이블 so_dat = 스트럭처변수
IF so_dat IS INITIAL. MESSAGE i016(pn) WITH 'Check'. ENDIF.위의 문법은 하나가 생략된거다 아래의 코드와 같다
read table so_dat index 1. IF so_dat IS INITIAL. MESSAGE i016(pn) WITH 'Check'. ENDIF.첫번째 인덱스에 있는 정보를 자동으로 가져온다.
이벤트 프로그램에서 엔터는 스크린프로그램과 같이 message i에서 멈추지만
execute를 하면 message i로 막아도 넘어가니 e로 막아야한다.
이러면 마치스크린 프로그램에 필드문을 쓴것처럼 막힌다.
만약 사용자가 message e 가 싫다면 message i를 사용하고 다음에 stop.을 쓰면 된다.