*&---------------------------------------------------------------------*
*& Report Z4_ZSD_ALVTEST002
*&
*&---------------------------------------------------------------------*
*& CreatBy ShiQiang
*& 1.使用到的表sflight航班表
*& 2.定義選擇螢幕,含有單值參數P_PRICE(PARAMETER)和S_DATE(SELECT-OPTIONS)
*& 3.為價格設定預設值5000,為查詢周期設定預設值為當前月,即起止日期分別為當前月的第一天和最後一天
*& 4.查詢航班日期(fldate)在指定周期範圍內並且航空運費(price)高於指定價格的所有航班記錄
*& 5.按航班日期降序排序
*& 6.使用alv方式輸出查詢結果
*&---------------------------------------------------------------------*
REPORT Z4_ZSD_ALVTEST002 NO STANDARD PAGE HEADING.
*參考型別組SLIS是系統定義的類型組,ALV相關操作的類型都在其中
TYPE-POOLS:SLIS.
*定義表工作區
TABLES:SFLIGHT.
DATA ITAB_SFLIGHT TYPE TABLE OF SFLIGHT. "定義內表,存放查詢結果
DATA:LD_CURDATE LIKE SY-DATUM, "定義日期類型變數,記錄當前日期
LD_LASTDATE LIKE SY-DATUM. "定義日期類型變數,記錄當前日期所在月份最後一天的日期
DATA:WA_FIELD TYPE SLIS_FIELDCAT_ALV,
*定義欄位屬性工作區變數,定義內表中各欄位變數在表格中輸出的屬性
IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV. "定義欄位目錄組變數,是與wa_field同結構類型的內表
DATA:G_REPID LIKE SY-REPID. "定義變數,記錄當前程式名
*定義選擇螢幕,可定義塊地區對不同功能的選擇條件進行分組顯示
*此處注意:代碼編輯完成後儲存並啟用,然後進入:系統功能表-〉轉到->文本元素->選擇文本
*定義螢幕塊地區的文本標題和各相關選擇條件的描述文本,完畢後同樣需要對選擇文本執行啟用操作
*---------------------------------------------------------*
*SELECTION-SCREEN
*---------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BLK WITH FRAME TITLE TEXT-001.
PARAMETER P_PRICE TYPE I OBLIGATORY. "定義單值輸入參數,航班價格,類型為整型且為必選項
SELECT-OPTIONS S_DATE FOR SFLIGHT-FLDATE.
"定義選擇區間參數,航班日期,可以多值輸入,也可以直接定義上下限
SELECTION-SCREEN END OF BLOCK BLK.
*---------------------------------------------------------*
*INITIALIZATION
*---------------------------------------------------------*
INITIALIZATION.
G_REPID = SY-REPID.
P_PRICE = '2000'.
PERFORM INITDATE. "調用子程式InitDate,指定查詢周期為當前月
*選擇條件輸入後,開始執行查詢前,對所輸入的條件進行約束性檢查
*---------------------------------------------------------*
*AT SELECTION-SCREEN
*---------------------------------------------------------*
IF S_DATE-LOW IS INITIAL. "沒用指定查詢日期,則調用MESSAGE方法,提示錯誤資訊,注意MESSAGE方法的使用
MESSAGE E888(SABAPDOCU) WITH '請輸入查詢日期'.
ENDIF.
*---------------------------------------------------------*
*START-OF-SELECTION
*---------------------------------------------------------*
START-OF-SELECTION.
PERFORM GETDATA. "從資料庫中將符合指定日期和航班運費價格的資料取出存放到內表中
END-OF-SELECTION.
PERFORM SETFIELDCAT. "調用子程式,設定ALV輸出的欄位目錄屬性
PERFORM DISPLAYBYALV. "調用子程式以ALV方式輸出查詢結果
*---------------------------------------------------------*
*FORM INITDATE
*根據當前月份初始化查詢日期區間
*---------------------------------------------------------*
FORM INITDATE.
LD_CURDATE = SY-DATUM."從系統變數sy-datum中擷取當前日期,並賦值給變數ld_curdate
CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
"調用功能模組RP_LAST_DAY_OF_MONTHS 取得當前月最後一天的日期,輸出結果賦值給變數ld_lastdate
EXPORTING
DAY_IN = LD_CURDATE
IMPORTING
LAST_DAY_OF_MONTH = LD_LASTDATE
EXCEPTIONS
DAY_IN_NO_DATE = 1.
LD_CURDATE+6(2) = '01'. "修改當前日期為當前月的第一天
S_DATE-LOW = LD_CURDATE.
S_DATE-HIGH = LD_LASTDATE.
APPEND S_DATE.
ENDFORM. "INITDATE
*---------------------------------------------------------*
*FORM GETDATA
*從資料庫中擷取資料
*---------------------------------------------------------*
FORM GETDATA.
*從資料中將符合選擇條件的航班記錄讀取到內表中
SELECT * FROM SFLIGHT
INTO TABLE ITAB_SFLIGHT
WHERE FLDATE IN S_DATE AND PRICE > P_PRICE.
*按照航班日期降序排列查詢結果
SORT ITAB_SFLIGHT BY FLDATE DESCENDING.
ENDFORM. "GETDATA
*---------------------------------------------------------*
*FORM SETFIELDCAT
*根據業務需要,設定內表資料在ALV表格中輸出的屬性
*---------------------------------------------------------*
FORM SETFIELDCAT.
CLEAR WA_FIELD.
*定義宏代碼
DEFINE ADDFIELDCAT.
WA_FIELD-COL_POS = &1. "欄位在表格中對應的列順序
WA_FIELD-FIELDNAME = &2. "內表中的欄位名稱,注意:必須用大寫字母
WA_FIELD-SELTEXT_L = &3. "對應的列頭文本
WA_FIELD-JUST = &4. "列對齊,可以取值:L 居靠左對齊,R 居靠右對齊, C 置中對齊
*添加欄位屬性到欄位目錄表中
APPEND WA_FIELD TO IT_FIELDCAT.
END-OF-DEFINITION.
*調用預定義的宏代碼,逐個將要顯示欄位的屬性設定添加到欄位目錄組中
ADDFIELDCAT 1 'CARRID' '航線承運人ID' 'L'.
ADDFIELDCAT 2 'CONNID' '航班串連ID' 'L'.
ADDFIELDCAT 3 'FLDATE' '航班日期' 'L'.
ADDFIELDCAT 4 'PRICE' '航空運費' 'R'.
ADDFIELDCAT 5 'PLANETYPE' '飛機類型' 'L'.
ADDFIELDCAT 6 'SEATSMAX' '座位元量' 'C'.
ENDFORM. "SETFIELDCAT
*---------------------------------------------------------*
*FORM DISPLAYBYALV
*用ALV方式顯示查詢結果
*---------------------------------------------------------*
FORM DISPLAYBYALV.
DATA:GS_LAYOUT TYPE SLIS_LAYOUT_ALV. "定義ALV表格屬性變數,設定相關顯示內容
GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. "設定ALV表格輸出的時候,列寬根據資料長度自動適應
GS_LAYOUT-ZEBRA = 'X'. "設定aLV表格輸出的時候,資料行背景色交替顯示
*調用功能模組REUSE_ALV_GRID_DISPLAY完成ALV的顯示輸出
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' "
EXPORTING
I_CALLBACK_PROGRAM = G_REPID "回調的程式名
IT_FIELDCAT = IT_FIELDCAT "欄位目錄組
IS_LAYOUT = GS_LAYOUT "
TABLES
T_OUTTAB = ITAB_SFLIGHT "要顯示的查詢結果內表
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM. "DISPLAYBYALV
圖片1.查詢介面
圖片2.顯示效果