1.定義一個(gè)SAP標(biāo)準(zhǔn)類型庫
TYPE-POOLS: SLIS.
2.定義一個(gè)LAYOUT式樣茵臭,和一個(gè)FIELDCAT字段格式峦耘,
DATA: G_F TYPE SLIS_T_FIELDCAT_ALV , "字段目錄內(nèi)表
W_L TYPE SLIS_LAYOUT_ALV. "用于定義ALV表單的相關(guān)格式去枷、屬性
3.如果選擇屏幕復(fù)選框參考了表
TABLES : EKKO, EKPO.
4.定義一個(gè)結(jié)構(gòu)
TYPES: BEGIN OF G_TY,
BOX TYPE C,
EKORG TYPE EKKO-EKORG,
BSART TYPE EKKO-BSART,
LIFNR TYPE EKKO-LIFNR,
EBELN TYPE EKKO-EBELN,
END OF G_TY.
5.定義表和工作區(qū)
DATA: G_TAB TYPE TABLE OF G_TY,
W_TAB LIKE LINE OF G_TAB. 或者
W_TAB TYPEG_TY.
6.定義屏幕
SELECTION-SCREEN BEGIN OF BLOCK XYY WITH FRAME TITLE TEXT-001.
PARAMETERS P_VKORG TYPE VBAK-VKORG OBLIGATORY.
SELECT-OPTIONS: S_VBELN FOR VBAK-VBELN,
S_AUART FOR VBAK-AUART.
SELECTION-SCREEN END OF BLOCK XYY.
這里只定義了單選框(PARAMETERS)和復(fù)選框(SELECT-OPTIONS)。一個(gè)用TYPE,一個(gè)用FOR。表查詢會(huì)依照屏幕條件篩選數(shù)據(jù)灶平。
7.初始化屏幕
INITIALIZATION.
加這個(gè)條件是告訴系統(tǒng)在這屏幕展示完蠢护,要查數(shù)據(jù)雅宾,展示報(bào)表了。
8.按順序執(zhí)行
START-OF-SELECTION.
PERFORM FRM_SELDATA.
PERFORM FRM_WRITE .
END-OF-SELECTION.
9.數(shù)據(jù)查詢實(shí)現(xiàn)PERFORM 方法
FORM FRM_SELDATA .
SELECT:
EKKO~EKORG
EKKO~BSART
EKKO~LIFNR
INTO CORRESPONDING FIELDS OF TABLE G_TAB
FROM EKKO INNER JOIN EKPO ON EKKO~EBELN = EKPO~EBELN
WHERE EKKO~EKORG IN P_EKORG
AND EKKO~BSART IN P_BSART
AND EKKO~LIFNR IN P_LIFNR
AND EKKO~EBELN IN P_EBELN.
ENDFORM. "FRM_SELDATA
查詢的時(shí)候三個(gè)表以下可以用 INNER JOIN
葵硕,否則就用內(nèi)表傳遞眉抬,一個(gè)表一個(gè)表的查,再傳遞懈凹。
10.實(shí)現(xiàn)ALV輸出
FORM FRM_WRITE .
PERFORM LAYOUT. "輸出樣式
PERFORM INIT_FIELDCA. "輸出屬性
PERFORM LISTADO. "展示
ENDFORM. " FRM_WRITE
(1)實(shí)現(xiàn)ALV輸出具體的方法:定義ALV樣式
FORM LAYOUT .
W_L-BOX_FIELDNAME = 'BOX'.
W_L-ZEBRA = 'X'. "顏色間隔
W_L-COLWIDTH_OPTIMIZE = 'X'. "自適應(yīng)寬度
ENDFORM. " LAYOUT_19
(2)
FORM INIT_FIELDCA .
CLEAR G_F.
G_F-FIELDNAME = 'EKORG'. "必須為大寫
G_F-SELTEXT_S = '采購組織'.
G_F-SELTEXT_M = G_F-SELTEXT_S.
G_F-SELTEXT_L = G_F-SELTEXT_S.
APPEND G_F.
CLEAR G_F.
G_F-FIELDNAME = 'TXZ01'.
G_F-SELTEXT_S = '行文本'.
G_F-SELTEXT_M = G_F-SELTEXT_S.
G_F-SELTEXT_L = G_F-SELTEXT_S.
G_F-EDIT = 'X' .
G_F-REF_FIELDNAME = 'TXZ01'. "參考字段名
G_F-REF_TABNAME = 'EKPO'. "參考表名
APPEND G_F.
ENDFORM. " INIT_FIELDCAT_19
(3)輸出
FORM LISTADO .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID "當(dāng)前程序名
I_CALLBACK_USER_COMMAND = 'USER_COMMAND' "自定義按鈕響應(yīng)事件
I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS' "設(shè)置ALV的自定義按鈕
IS_LAYOUT = W_L "輸出樣式
IT_FIELDCAT = G_F[] "字段定義描述表
" I_CALLBACK_TOP_OF_PAGE = 'F_TOP_OF_PAGE'
I_SAVE = 'A'
" I_SAVE有4個(gè)可選值: I_SAVE= '' --- 不能保存格式蜀变;
" I_SAVE = 'X' --- 保存標(biāo)準(zhǔn)格式;
" I_SAVE = 'U' --- 保存特定用戶格式蘸劈;
" I_SAVE = 'A' --- 保存標(biāo)準(zhǔn)格式和特定用戶格式昏苏。
TABLES
T_OUTTAB = G_TAB "內(nèi)表輸出名稱
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. " LISTADO
FORM SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'STATUS' .
ENDFORM.
11.寫USER_COMMAND的一個(gè)事件(這個(gè)作業(yè)要求實(shí)現(xiàn)更改數(shù)據(jù),點(diǎn)擊按鈕且保存成功)
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA: GV_GRID TYPE REF TO CL_GUI_ALV_GRID.
"刷新
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = GV_GRID.
CALL METHOD GV_GRID->CHECK_CHANGED_DATA.
CASE R_UCOMM.
WHEN 'SKIP'.
IF SY-SUBRC = 0.
ENDIF.
ENDCASE.
ENDFORM. "LISTADO