Selection-screen (날짜 계산하는 function)

2801 단어 1000nionabap1000nion

실행화면

2년전부터 오늘까지의 데이터를 가져온다.

보기에만 일자가 들어간게 아니라 실제 날짜 선택에 들어갔을 때 값으로도 들어가 있게 한다.

날짜 조건에 맞는 데이터만 가져온다.

프로그램 로직

변수 선언

TABLES: sflight.

DATA: gr_salv_tab TYPE REF TO cl_salv_table.

DATA : BEGIN OF wa.
       INCLUDE TYPE spfli.
DATA : scarr TYPE scarr-carrname,
       fldate TYPE sflight-fldate,
       currency TYPE sflight-currency,
       END OF wa,
       gt_itab LIKE TABLE OF wa.

DATA: ca_date TYPE p0001-begda. "SE37에서 TYPE 확인 

화면구성

SELECTION-SCREEN BEGIN OF BLOCK b1.
PARAMETERS: pa_carr TYPE sflight-carrid OBLIGATORY DEFAULT 'AA'. "필수값

SELECT-OPTIONS: s_connid FOR sflight-connid,
                s_fldate FOR sflight-fldate.

PARAMETERS: pa_coun TYPE spfli-countryfr.
SELECTION-SCREEN END OF BLOCK b1.

초기값 설정

INITIALIZATION.

CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
  EXPORTING
    date            = sy-datum
    days            = 0 		"일
    months          = 0			"월
   signum          = '-'
    years           = 3			"년
 IMPORTING
   calc_date       = ca_date.
          

"SELECT-OPTION 초기값
MOVE: 'I' TO s_fldate-sign, "INCLUDE, 아래값 포함
          ca_date TO s_fldate-low, "AA부터
          sy-datum TO s_fldate-high. "LH까지
APPEND s_fldate.
CLEAR s_fldate.

RP_CALC_DATE_IN_INTERVAL

기준 일자에 대해 일, 월, 년 이전 또는 이후 날짜를 계산하는 function이다.

Event

AT SELECTION-SCREEN.

IF pa_coun IS INITIAL. "아무것도 입력하지 않았을때
      SELECT * FROM sflight AS a
    INNER JOIN spfli AS b
        ON a~carrid = b~carrid
       AND a~connid = b~connid
    INNER JOIN scarr AS c
        ON a~carrid = c~carrid
      INTO CORRESPONDING FIELDS OF TABLE gt_itab
    WHERE a~carrid = pa_carr
       AND a~connid IN s_connid
       AND a~fldate IN s_fldate.
       
  ELSEIF pa_coun IS NOT INITIAL. "입력했을때
  SELECT * FROM sflight AS a
    INNER JOIN spfli AS b
        ON a~carrid = b~carrid
       AND a~connid = b~connid
    INNER JOIN scarr AS c
        ON a~carrid = c~carrid
      INTO CORRESPONDING FIELDS OF TABLE gt_itab
    WHERE a~carrid = pa_carr
       AND a~connid IN s_connid
       AND a~fldate IN s_fldate
       AND b~countryfr = pa_coun.
ENDIF.


"오름차순 정렬 
SORT gt_itab BY carrid DESCENDING.
SORT gt_itab BY connid DESCENDING.
SORT gt_itab BY fldate DESCENDING.



"int를 list로 출력해주는 구문
  CALL METHOD cl_salv_table=>factory
    IMPORTING
      r_salv_table = gr_salv_tab
    CHANGING
      t_table      = gt_itab.

  gr_salv_tab->display( ).

좋은 웹페이지 즐겨찾기