전표조회프로그램의 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코딩보다 생전처음보는 용어들과 업무프로세스가 너무 어렵다..ㅡ.ㅡ;;
업무의 이해가 중요함을 새삼 느꼈다.

AND