전표조회프로그램의 alv 소스는 다음과 같다.
FORM alv_field.
ADD 1 TO col_pos.
fieldcat_ln-fieldname = 'BUDAT'.
fieldcat_ln-reptext_ddic = '전기일'.
fieldcat_ln-just = 'C'. " (R)ight (L)eft (C)ent.
fieldcat_ln-key = 'X'.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.
ADD 1 TO col_pos.
fieldcat_ln-fieldname = 'GUBUN'.
fieldcat_ln-reptext_ddic = '전표구분'.
fieldcat_ln-just = 'C'. " (R)ight (L)eft (C)ent.
fieldcat_ln-key = ''.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.
ADD 1 TO col_pos.
fieldcat_ln-fieldname = 'BELNR'.
fieldcat_ln-reptext_ddic = '전표번호'.
fieldcat_ln-just = 'C'. " (R)ight (L)eft (C)ent.
fieldcat_ln-key = 'X'.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.
ADD 1 TO col_pos.
fieldcat_ln-fieldname = 'BUZEI'.
fieldcat_ln-reptext_ddic = '순번'.
fieldcat_ln-just = 'C'. " (R)ight (L)eft (C)ent.
fieldcat_ln-key = ''.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.
ADD 1 TO col_pos.
fieldcat_ln-fieldname = 'HKONT'.
fieldcat_ln-reptext_ddic = '계정과목'.
fieldcat_ln-just = 'C'. " (R)ight (L)eft (C)ent.
fieldcat_ln-key = ''.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.
ADD 1 TO col_pos.
fieldcat_ln-fieldname = 'TXT20'.
fieldcat_ln-reptext_ddic = '계정명'.
fieldcat_ln-just = 'C'. " (R)ight (L)eft (C)ent.
fieldcat_ln-key = ''.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.
ADD 1 TO col_pos.
fieldcat_ln-fieldname = 'CHA'.
fieldcat_ln-reptext_ddic = '차변금액'.
fieldcat_ln-just = 'C'. " (R)ight (L)eft (C)ent.
fieldcat_ln-key = ''.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.
ADD 1 TO col_pos.
fieldcat_ln-fieldname = 'DAR'.
fieldcat_ln-reptext_ddic = '대변금액'.
fieldcat_ln-just = 'C'. " (R)ight (L)eft (C)ent.
fieldcat_ln-key = ''.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.
ADD 1 TO col_pos.
fieldcat_ln-fieldname = 'SGTXT'.
fieldcat_ln-reptext_ddic = '적요'.
fieldcat_ln-just = 'C'. " (R)ight (L)eft (C)ent.
fieldcat_ln-key = ''.
fieldcat_ln-edit = 'X'.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.
ADD 1 TO col_pos.
fieldcat_ln-fieldname = 'KOSTL'.
fieldcat_ln-reptext_ddic = '코스트 센터'.
fieldcat_ln-just = 'C'. " (R)ight (L)eft (C)ent.
fieldcat_ln-key = ''.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.
ADD 1 TO col_pos.
fieldcat_ln-fieldname = 'KTEXT'.
fieldcat_ln-reptext_ddic = '코스트센터 명칭'.
fieldcat_ln-just = 'L'. " (R)ight (L)eft (C)ent.
fieldcat_ln-key = ''.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.
ENDFORM. "alv_field
*&---------------------------------------------------------------------*
*& Form alv_sort
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM alv_sort.
//파라미터로 선언했던(라디오버튼) 정렬순서에서 전표번호순을 선택한 경우
IF sort_jun = 'X'. "전표번호순 출력
sortcat_ln-spos = '1'.
sortcat_ln-fieldname = 'BELNR'.
sortcat_ln-up = 'X'.
sortcat_ln-down = space.
sortcat_ln-subtot = ''.
APPEND sortcat_ln TO sortcat.
CLEAR sortcat_ln.
sortcat_ln-spos = '2'.
sortcat_ln-fieldname = 'BUZEI'.
sortcat_ln-up = 'X'.
sortcat_ln-down = space.
sortcat_ln-subtot = ''.
APPEND sortcat_ln TO sortcat.
CLEAR sortcat_ln.
sortcat_ln-spos = '3'.
sortcat_ln-fieldname = 'BUDAT'.
sortcat_ln-up = 'X'.
sortcat_ln-down = space.
sortcat_ln-subtot = ''.
APPEND sortcat_ln TO sortcat.
CLEAR sortcat_ln.
//파라미터로 선언했던(라디오버튼) 정렬순서에서 전기일자순을 선택한 경우
ELSEIF sort_day = 'X'. "전기일자순 출력
sortcat_ln-spos = '1'.
sortcat_ln-fieldname = 'BUDAT'.
sortcat_ln-up = 'X'.
sortcat_ln-down = space.
sortcat_ln-subtot = ''.
APPEND sortcat_ln TO sortcat.
CLEAR sortcat_ln.
sortcat_ln-spos = '2'.
sortcat_ln-fieldname = 'BELNR'.
sortcat_ln-up = 'X'.
sortcat_ln-down = space.
sortcat_ln-subtot = ''.
APPEND sortcat_ln TO sortcat.
CLEAR sortcat_ln.
sortcat_ln-spos = '3'.
sortcat_ln-fieldname = 'BUZEI'.
sortcat_ln-up = 'X'.
sortcat_ln-down = space.
sortcat_ln-subtot = ''.
APPEND sortcat_ln TO sortcat.
CLEAR sortcat_ln.
ENDIF.
ENDFORM. " build_sortcat
form alv_view.
* IS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
* IS_LAYOUT-BOX_FIELDNAME = 'L'.
* IS_LAYOUT-DETAIL_POPUP = 'X'.
ls_layout-detail_popup = 'X'.
ls_layout-box_fieldname = 'MARK'. //DATA선언부에서 char(1) mark명의 필드선언 필수
ls_layout-colwidth_optimize = 'X'.
* IS_LAYOUT-EDIT = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = fieldcat
it_sort = sortcat
is_layout = ls_layout
i_save = 'A'
TABLES
t_outtab = itab.
ENDFORM. " alv
이 스펙을 하면서 하는내내 막막했었는데 선생님의 도움으로 쿼리 로직이 눈에 보이자 급진전...
스펙을 보면 먼저 인터페이스를 구현하고..(알맞은 파라미터와 타입선언)
인터널테이블을 만들고...
이제 그 다음에 쿼리를 짜면 된다.
유의할 점은 연관되는 테이블의 키를 잘 맞추고... (키명이 같다고 해서 같은 값이 아닌 것도 있다. 어떤 필드를 참조하는지 확인하고 데이터도 확인하자. 예를 들면... SKAT테이블의 SAKNR키와 BSEG테이블의 HKONT와 같다.)
조인을 잘 하자..;; 셀렉트하는 데이터들도 확인하고... into 해서 itab에 넣어준다. 디버깅필수!! 0은 성공, 4는 실패
조인을 못하는 것은 SELECT SINGLE 로 가져오자.. modify itab도 잊지 말자. 싱글은 헤더에만 값을 넣어주므로 modify해주지 않으면 소용없다.
전체적인 쿼리로직이 짜여지고 디버깅이 끝나면 분기문 등을 써서 프로그램을 완성시킨다...
ABAP코딩보다 생전처음보는 용어들과 업무프로세스가 너무 어렵다..ㅡ.ㅡ;;
업무의 이해가 중요함을 새삼 느꼈다.