실습자료. ALV(Abap List View)

Rendez·2019년 12월 9일
1

ABAP Dev

목록 보기
1/1

A. Sales Order Table ALV 로 조회

1. 프로그램 ZSALES_ORDERXX(XX는 본인의 번호)생성한다.

2. 프로그램 소스를 다음과 같이 입력하고 Active(Ctrl+F3)

*&---------------------------------------------------------------------*
*& Report ZSALES_ORDER99
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZSALES_ORDERXX. "XX에 본인의 번호를 입력하세요
TABLES: ZVBAK99.

DATA : GT_HD LIKE ZVBAK99 OCCURS 0 WITH HEADER LINE,
       GT_IT LIKE ZVBAP99 OCCURS 0 WITH HEADER LINE.
DATA : G_ALV              TYPE REF TO CL_GUI_ALV_GRID,
G_CUSTOM_CON       TYPE REF TO CL_GUI_CUSTOM_CONTAINER,

* 실행하면 Saels order값을 From ~ to  범위로 입력 할수 있는 선택 창 실행
* parameters 가 1개의 값만 지정 할수 있는 반변,
* Select-options는 법위 값을 다양하게 입력 할 수 있다.
* 선언 방법 : For + ttable이름 -field 이름
* 이때 Table이름은  tables로 선언되어야 한다.

SELECT-OPTIONS : S_VBELN FOR ZVBAK99-VBELN.

3. 이동 -> 텍스트기호를 선택 한 후 Select-Option의 제목을 지정한다.

4. 여기까지 진행하고 Active(Ctrl+F3) 한 후 실행(F8)하면 다음과 같이 실행 된다.

5. 프로그램로직을 다음과 같이 입력한다.

* ALV를 사용하기 위한 data class
DATA : G_HD_ALV        TYPE REF TO CL_GUI_ALV_GRID,
       G_HD_CUSTOM_CON TYPE REF TO CL_GUI_CUSTOM_CONTAINER.

START-OF-SELECTION.

  SELECT * INTO TABLE GT_HD FROM ZVBAK99 WHERE VBELN IN S_VBELN.
  IF SY-SUBRC = 0.
    CALL SCREEN 100.   "alv를 출력할 화면 실행
  ELSE.
    WRITE : /  'No data'.
  ENDIF.

6. 화면 번호 100을 더블 클릭하면 화면 생성기가 실행된다. 다음과 같이 PBO, PAI를 구성한다.

PROCESS BEFORE OUTPUT.
  MODULE STATUS_0100.

  MODULE SET_ALV.

PROCESS AFTER INPUT.

  FIELD OK_CODE  MODULE USER_COMMAND_0100 ON INPUT.

여기까지 진행하고 Active(Ctrl+F3)

7. 각 Module을 다음과 같이 입력한다. Report프로그램으로 생성하여 별도의 include프로그램을 만들지 않았으므로 PBO, PAI Module을 생성한 프로그램 아래에 입력 한다.

MODULE SET_ALV OUTPUT.
*  PBO Module이  실행될때 마다 실행되면 안되므로
* Check 로직으로 한버만 실행되도록 제어한다.

  CHECK G_HD_CUSTOM_CON IS INITIAL.

* 화면 100에 생성한 HD_CON을 참조하여 오브젝트 생성
  CREATE OBJECT G_HD_CUSTOM_CON
    EXPORTING
      CONTAINER_NAME = 'HD_CON'.

* ALV_CON위에 ALV 오브젝트를 생성한다.
  CREATE OBJECT G_HD_ALV
    EXPORTING
      I_PARENT = G_HD_CUSTOM_CON.

* ALV 출력
  CALL METHOD G_HD_ALV->SET_TABLE_FOR_FIRST_DISPLAY
    EXPORTING
      I_STRUCTURE_NAME = 'ZVBAK99'
    CHANGING
      IT_OUTTAB        = GT_HD[].
ENDMODULE.
  • GT_HD[] :
    + Internal table의 Record를 지칭, Header가 있는 Internal table은 GT_HD라고 지칭하면 Header를 의미하므로 ALV Object에 출력할 데이터를 넘길때는 헤더가 아닌 Record를 넘겨야 한다.
  • I_STRUCTURE_NAME = ‘ZVBAK99’
    + ALV구조가 ZVBAK99의 구조로 실행된다.

MODULE user_command_0100 INPUT.

  CASE OK_CODE.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0..
  ENDCASE.

ENDMODULE.

여기까지 진행하고 Active(Ctrl+F3) 후 실행(F8)

입력값 없이 실행하면 아래와 같이 화면이 출력됩니다.

  • Table에 있는 모든 Record가 출력된다.
  • Table의 컬럼은 ZVBAK99구조로 실행된다.

(1 ~ 5)값을 입력 후 실행하면 아래와 같이 화면이 출력됩니다.

B. Sales Order Item ALV로 조회

  • Header line을 더블 클릭하면 해당 오더의 항목이 조회 되도록 한다.
  1. 데이터 선언 부분을 다음과 같이 수정한다.
    • Item alv를 위한 데이터 선언
    • 더블 클릭을 위한 alv local class 선언

* 오더 항목을 위한 데이터 선언
DATA : G_IT_ALV        TYPE REF TO CL_GUI_ALV_GRID,
       G_IT_CUSTOM_CON TYPE REF TO CL_GUI_CUSTOM_CONTAINER.

* alv에서 event를 처리 하기 위해 선언하는 local class
CLASS lcl_alv_event_receiver DEFINITION.
  PUBLIC SECTION.
    METHODS:
      evt_double_click
                  FOR EVENT double_click OF cl_gui_alv_grid
        IMPORTING e_row
                  e_column
                  es_row_no.
ENDCLASS.

CLASS  lcl_alv_event_receiver IMPLEMENTATION.

  METHOD evt_double_click.
* 더블클릭하면 아래 서브루틴이 실행된다.
* E_ROW : 더블클릭된 열 번호
* E_COLUMN : 더블클릭된 컬럼 이름
    PERFORM show_item_display  USING e_row       e_column   es_row_no..
  ENDMETHOD.

ENDCLASS.

* local class로 선언된 내용을 처리하기 위해 object를 선언한다.
DATA : G_APPLICATION TYPE REF TO LCL_ALV_EVENT_RECEIVER.

FORM SHOW_ITEM_DISPLAY  USING   P_ROW  P_COLUMN  P_ROW_NO.

  READ TABLE GT_HD INDEX P_ROW.
  CHECK SY-SUBRC = 0.
  SELECT * INTO TABLE GT_IT FROM ZVBAP99
      WHERE VBELN = GT_HD-VBELN.
  CHECK SY-SUBRC = 0.
  SORT GT_IT BY POSNR..
  CALL SCREEN 200 STARTING AT 1 1
                           ENDING AT 100 15.
ENDFORM.

여기까지 진행하고 Active(Ctrl+F3)

  • Class ‘CL_GUI_ALV_GRID’ 의 event를 상속받아 사용한다.

* 더블클릭 이벤트 생성
  CREATE OBJECT g_application.
  SET HANDLER g_application->evt_double_click FOR g_hd_alv.

3. 화면 200을 생성한다. Popup으로 생성되므로 화면유형을 ‘모드대화상자’로 선택한다.

PROCESS BEFORE OUTPUT.
  MODULE STATUS_0200.
  MODULE SET_IT_ALV.

PROCESS AFTER INPUT.
  MODULE USER_COMMAND_0200 .

여기까지 진행하고 Active(Ctrl+F3)

4. 추가된 모듈의 내용을 다음과 같이 입력한다

MODULE STATUS_0200 OUTPUT.
  SET PF-STATUS 'S00'.
  SET TITLEBAR '200'.
ENDMODULE.

여기까지 진행하고 저장(Ctrl+S) Active(Ctrl+F3)

5. ALV생성을 위해 Custom-Conainer를 생성한 후 이름을 ‘IT_CON’으로 입력한다.

MODULE SET_IT_ALV OUTPUT.
*Header 부분을 만든 내용과 달리 check 문을 만들지 않고
* IF문으로  ALV object만 생성 하는 부분을 한번만 실행되게 헸다
* G_IT_ALV->SET_TABLE_FOR_FIRST_DISPLAY 는 더블 클릭하여 선택된
* Item내용이 변경되며 출력되기 때문에 더블클릭할때마다 실행되어야 한다,


  IF G_IT_CUSTOM_CON IS INITIAL.

* 화면 200에 생성한 IT_CON을 참조하여 오브젝트 생성
    CREATE OBJECT G_IT_CUSTOM_CON
      EXPORTING
        CONTAINER_NAME = 'IT_CON'.

* ALV_CON위에 ALV 오브젝트를 생성한다.
    CREATE OBJECT G_IT_ALV
      EXPORTING
        I_PARENT = G_IT_CUSTOM_CON.
  ENDIF.

* ALV 출력
  CALL METHOD G_IT_ALV->SET_TABLE_FOR_FIRST_DISPLAY
    EXPORTING
      I_STRUCTURE_NAME = 'ZVBAP99'
    CHANGING
      IT_OUTTAB        = GT_IT[].
ENDMODULE.

MODULE USER_COMMAND_0200 INPUT.
  CASE OK_CODE.
    WHEN 'OK'.
      LEAVE TO SCREEN 0.  

  ENDCASE.

ENDMODULE.
  • 표준화면에서 ‘LEAVE TO SCREEN 0’를 사용하면 프로그램이 종료된다. 그러나 위의 경우처럼 POPUP SCREEN에서 사용하면 프로그램이 종료되지 않고 POPUP SCREEN만 종료되어 다시 MAIN 화면으로 돌아온다.

저장(Ctrl+S) -> Active(Ctrl+F3) -> 실행(F8)

profile
SAP 개발 MHKIM

0개의 댓글