SAP ABAP 교육일지(2주차 Chater.1 ALV)

유수한·2025년 1월 12일

SAP

목록 보기
9/15

ALV 출력

ALV 란 ABAP List Viewer 약자로 ABAP 을 활용하여 리스트 뷰어를 만드는 것

샘플 예제를 통하여서 설명 할 예정 아래 코드 전부 복사 하기

그 외 참고 : SAP 공식 샘플 예제 소스

해당 예재는 SAP MM 모듈에서 많이 사용 하는 구매 오더 테이블임

TABLES:     ekko.

TYPE-POOLS: slis.                                 "ALV Declarations

*Data Declaration
*----------------
TYPES: BEGIN OF t_ekko,
  ebeln TYPE ekpo-ebeln,
  ebelp TYPE ekpo-ebelp,
  statu TYPE ekpo-statu,
  aedat TYPE ekpo-aedat,
  matnr TYPE ekpo-matnr,
  menge TYPE ekpo-menge,
  meins TYPE ekpo-meins,
  netpr TYPE ekpo-netpr,
  peinh TYPE ekpo-peinh,
  line_color(4) TYPE c,     "Used to store row color attributes
 END OF t_ekko.

DATA: it_ekko TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
      wa_ekko TYPE t_ekko.

*ALV data declarations
DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE,
      gd_tab_group TYPE slis_t_sp_group_alv,
      gd_layout    TYPE slis_layout_alv,
      gd_repid     LIKE sy-repid.


DATA : t TYPE slis_t_sp_group_alv .
************************************************************************
*Start-of-selection.
START-OF-SELECTION.

  PERFORM data_retrieval.
  PERFORM build_fieldcatalog.
  PERFORM build_layout.
  PERFORM display_alv_report.


*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*       Build Fieldcatalog for ALV Report
*----------------------------------------------------------------------*
FORM build_fieldcatalog.

  fieldcatalog-fieldname   = 'EBELN'.
  fieldcatalog-seltext_m   = 'Purchase Order'.
  fieldcatalog-col_pos     = 0.
  fieldcatalog-outputlen   = 10.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'EBELP'.
  fieldcatalog-seltext_m   = 'PO Item'.
  fieldcatalog-col_pos     = 1.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'STATU'.
  fieldcatalog-seltext_m   = 'Status'.
  fieldcatalog-col_pos     = 2.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'AEDAT'.
  fieldcatalog-seltext_m   = 'Item change date'.
  fieldcatalog-col_pos     = 3.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'MATNR'.
  fieldcatalog-seltext_m   = 'Material Number'.
  fieldcatalog-col_pos     = 4.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'MENGE'.
  fieldcatalog-seltext_m   = 'PO quantity'.
  fieldcatalog-col_pos     = 5.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'MEINS'.
  fieldcatalog-seltext_m   = 'Order Unit'.
  fieldcatalog-col_pos     = 6.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'NETPR'.
  fieldcatalog-seltext_m   = 'Net Price'.
  fieldcatalog-col_pos     = 7.
  fieldcatalog-outputlen   = 15.
  fieldcatalog-datatype     = 'CURR'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'PEINH'.
  fieldcatalog-seltext_m   = 'Price Unit'.
  fieldcatalog-col_pos     = 8.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.
ENDFORM.                    " BUILD_FIELDCATALOG


*&---------------------------------------------------------------------*
*&      Form  BUILD_LAYOUT
*&---------------------------------------------------------------------*
*       Build layout for ALV grid report
*----------------------------------------------------------------------*
FORM build_layout.

  gd_layout-no_input          = 'X'.
  gd_layout-colwidth_optimize = 'X'.
  gd_layout-zebra = 'X'.
*  gd_layout-info_fieldname =      'LINE_COLOR'.
*  gd_layout-def_status = 'A'.

ENDFORM.                    " BUILD_LAYOUT


*&---------------------------------------------------------------------*
*&      Form  DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
*       Display report using ALV grid
*----------------------------------------------------------------------*
FORM display_alv_report.
  gd_repid = sy-repid.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = gd_repid
      is_layout          = gd_layout
      it_fieldcat        = fieldcatalog[]
      i_save             = 'X'
    TABLES
      t_outtab           = it_ekko
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


ENDFORM.                    " DISPLAY_ALV_REPORT


*&---------------------------------------------------------------------*
*&      Form  DATA_RETRIEVAL
*&---------------------------------------------------------------------*
*       Retrieve data form EKPO table and populate itab it_ekko
*----------------------------------------------------------------------*
FORM data_retrieval.
  DATA: ld_color(1) TYPE c.

  SELECT ebeln ebelp statu aedat matnr menge meins netpr peinh
   UP TO 10 ROWS
    FROM ekpo
    INTO TABLE it_ekko.

ENDFORM.                    " DATA_RETRIEVAL

예제 코드를 복사 하셨으면, 다음 과 같이 화면에 복사 붙여 넣기 하면됨

Tables 설명

Tables 명은 ekko 가 아닌 SCARR 로 바꾸기

Tables 코드를 하나씩 보면 먼저 우리가 테이블 구조를 만들어서 넣어 도 되지만 샘플로 만들어 져있는 SCARR 이라는 테이블을 사용 하여서 넣기 위함

Tables 는 ABAP 에서 딕셔너리에 만들어져있는 테이블,뷰,구조를 가져다가 사용 한다는 뜻

  • SCARR 테이블

테이블 접속 방법은 검색에 se11 들어가서 SCARR Table Display 하면 해당 스키마 보임

TYPE-POOLS 설명

ABAP Object 중 하나인 TPYE-POOLS 는 TYPE Group 으로 확인 가능 한데
선언 한 이유는 만들어 진 스키마를 그대로 사용 하여서 진행 하겠다 라는 뜻임

예를 들어 개발자 들끼리 서로 스키마가 다르거나 선언 type 유형 및 입력 범위가 다르다고 하면
굉장히 유지보수 측면에서 관리가 힘들며, 사용자 또한 불편한일들이 잦아 지게 되어

공통 템플릿을 선언하고 진행 하겠다 라는 뜻임

slis 값에 마우스로 더블 클릭 하여 접속

스키마 선언 한것을 분석 하기전에 ABAP ALV 구조를 한번 잡고 설명을 이어감

  1. 필드

    하나의 공간에 값을 넣는 것

  2. 한줄의 공간에 하나씩 넣어 주는것

  3. 테이블

    여러행을 넣을 수 있는 것

3가지 구조로 이뤄 져있다 코드를 돌아가서 설명 함

먼저 필드 선언 types 로 시작 하며 type 오른쪽에 있는 구조로 왼쪽이름으로 만듬

n = numc 라는 약자로 ex 001
slis_list_type(1) = slis_list_type 라는 이름에 입력 범위는 1 임

테이블을 불러와 선언 할수 도있음

alv_s_qinf 값을 더블 클릭 하면 스키마가 나옴

Structure 는 행이라는 의미이며 해당 스키마를 가지고 와서

slis_t_qinfo_alv type slis_qinfo_alv occurs 0.

occurs 는 테이블로 선언 라는 의미 임

profile
계속 노력하는 사람

0개의 댓글