*&---------------------------------------------------------------------*
*& Report ZTEST_ALV_02
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTEST_ALV_02.
INCLUDE ZINC_SF_HELPER .
TABLES:SFLIGHT.
TYPE-POOLS:SLIS.
data:e04_lt_top_of_page type slis_t_listheader.
TYPES:
BEGIN OF IT_OUT,
CARRID LIKE SFLIGHT-CARRID,
CONNID LIKE SFLIGHT-CONNID,
FLDATE LIKE SFLIGHT-FLDATE,
PRICE LIKE SFLIGHT-PRICE,
SEATSMAX LIKE SFLIGHT-SEATSMAX,
END OF IT_OUT.
DATA:
G_AUDAT(30) TYPE c,
G_TITLE(30) TYPE c.
DATA:
GT_OUT TYPE TABLE OF IT_OUT,
GS_OUT TYPE IT_OUT,
TD_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
TH_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
CONTROLS TABCONCTROL TYPE TABLEVIEW USING SCREEN 9000.
PARAMETERS:
P_PRICE TYPE SFLIGHT-PRICE DEFAULT '500'.
SELECT-OPTIONS:
S_FLDATE FOR SFLIGHT-FLDATE.
PARAMETERS:
P1 TYPE C RADIOBUTTON GROUP P_RD,
P2 TYPE C RADIOBUTTON GROUP P_RD.
INITIALIZATION.
S_FLDATE-SIGN = 'I'.
S_FLDATE-OPTION = 'BT'.
S_FLDATE-LOW = '19950228'.
S_FLDATE-HIGH = '20070630'.
APPEND S_FLDATE.
START-OF-SELECTION.
perform frm_get_head_rtn.
PERFORM FRM_SET_FIELDCAT.
PERFORM FRM_GET_DATA.
IF GT_OUT IS INITIAL.
MESSAGE S888(SABAPDOCU) DISPLAY LIKE 'E' WITH '没有符合条件的数据!'.
LEAVE LIST-PROCESSING.
ELSE.
IF P1 = 'X'.
PERFORM FRM_DISPLAY_ALV.
ELSEIF P2 = 'X'.
PERFORM FRM_WRITE_DATA.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form frm_get_head_rtn
*&---------------------------------------------------------------------*
FORM frm_get_head_rtn .
G_TITLE = '航班计划表'.
concatenate S_FLDATE-low+0(4) '年'
S_FLDATE-low+4(2) '月'
S_FLDATE-low+6(2) '日至'
S_FLDATE-high+0(4) '年'
S_FLDATE-high+4(2) '月'
S_FLDATE-high+6(2) '日'
into G_AUDAT.
ENDFORM. " frm_get_head_rtn
*表头页的数据
form TOP_OF_PAGE.
data: ls_line type slis_listheader.
clear e04_lt_top_of_page. "清空ALV抬头
clear e04_lt_top_of_page[].
clear ls_line.
ls_line-typ = 'S'.
ls_line-info = G_TITLE.
append ls_line to e04_lt_top_of_page.
call function 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = e04_lt_top_of_page.
endform. "top_of_page
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
FORM FRM_GET_DATA .
SELECT CARRID CONNID FLDATE PRICE SEATSMAX FROM SFLIGHT INTO TABLE
GT_OUT
WHERE PRICE > P_PRICE
AND FLDATE IN S_FLDATE.
ENDFORM. " FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Form FRM_WRITE_DATA
*&---------------------------------------------------------------------*
FORM FRM_WRITE_DATA .
WRITE / '航班表'.
ULINE.
WRITE : / '航班价格 > :', P_PRICE.
WRITE: / '时间范围:',S_FLDATE-LOW ,'---',S_FLDATE-HIGH.
ULINE.
WRITE:/5(15)'航线承运人ID' no-gap,
20(15)'航班连接 Id' no-gap,
35(10)'航班日期' no-gap,
50(10)'航空运费' no-gap,
75(10)'最大容量' no-gap.
LOOP AT GT_OUT INTO GS_OUT.
WRITE:/5(15) GS_OUT-CARRID, "航线承运人ID
20(15) GS_OUT-CONNID, "航班连接 Id
35(10) GS_OUT-FLDATE, "航班日期
50(10) GS_OUT-PRICE, "航空运费
75(10) GS_OUT-SEATSMAX. "最大容量
ENDLOOP.
ENDFORM. " FRM_WRITE_DATA
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY_ALV .
data: ls_event type slis_alv_event.
data: e03_lt_events type slis_t_event.
*显示ALV抬头
call function 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = e03_lt_events.
read table e03_lt_events with key name = slis_ev_top_of_page
into ls_event.
if sy-subrc = 0.
move 'TOP_OF_PAGE' to ls_event-form.
append ls_event to e03_lt_events.
endif.
DATA TH_LAYOUT TYPE SLIS_LAYOUT_ALV.
TH_LAYOUT-COLWIDTH_OPTIMIZE = 'X'."设置ALV表格输出的时候,列宽根据数据长度自动适应
TH_LAYOUT-ZEBRA = 'X'."设置数据行背景颜色交替显示
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-CPROG
I_CALLBACK_PF_STATUS_SET = 'FRM_SET_MENU'
I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND'
IS_LAYOUT = TH_LAYOUT
IT_EVENTS = E03_LT_EVENTS[]
IT_FIELDCAT = TD_FIELDCAT
TABLES
T_OUTTAB = GT_OUT
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. " FRM_DISPLAY
*&---------------------------------------------------------------------*
*& Form FRM_SET_FIELDCAT
*&---------------------------------------------------------------------*
FORM FRM_SET_FIELDCAT .
CLEAR TH_FIELDCAT.
DEFINE ADDFIELDCAT.
TH_FIELDCAT-COL_POS = &1.
TH_FIELDCAT-FIELDNAME = &2.
TH_FIELDCAT-SELTEXT_L = &3.
TH_FIELDCAT-JUST = &4.
APPEND TH_FIELDCAT TO TD_FIELDCAT.
END-OF-DEFINITION.
ADDFIELDCAT 1 'CARRID' '航线承运人ID' 'L'.
ADDFIELDCAT 2 'CONNID' '航班连接ID' 'L'.
ADDFIELDCAT 3 'FLDATE' '航班日期' 'L'.
ADDFIELDCAT 4 'PRICE' '航空费用' 'L'.
ADDFIELDCAT 5 'SEATSMAX' '最大容量' 'L'.
ENDFORM. " FRM_SET_FIELDCAT
*&-------------------------------------------------------------*
*& Form frm_set_menu
*&-------------------------------------------------------------*
* 实现ALV自定义状态条的绑定处理
*--------------------------------------------------------------*
form FRM_SET_MENU using rt_extab type slis_t_extab.
set pf-status 'STANDARD'. "引号内字符串为状态条对象的名称
endform. " FRM_SET_MENU
*&----------------------------------------------------------------*
*& Form frm_user_command
*&----------------------------------------------------------------*
* 实现对用户命令的响应
*-----------------------------------------------------------------*
* -->R_UCOMM text
* -->RS_SELFIELD slis_selfield
*-----------------------------------------------------------------*
form FRM_USER_COMMAND using p_ucomm like sy-ucomm selfield type
slis_selfield.
case p_ucomm.
when 'PRT'."响应自定义工具条中的自定义按钮事件
if not GT_OUT[] is initial.
perform frm_print_selected. "调用打印输出子程序
else.
MESSAGE S888(SABAPDOCU) DISPLAY LIKE 'E' with '没有可打印的数据!'.
endif.
when 'BACK' OR 'EXIT' OR 'CANCEL'."返回 退出
leave program.
endcase.
endform. "frm_user_command
*&-----------------------------------------------------------------*
*& Form frm_print_selected
*&-----------------------------------------------------------------*
* 实现对SmartForm的调用
*------------------------------------------------------------------*
form frm_print_selected .
* DATA: headername(18) TYPE c.
DATA: itemsname(30) TYPE c.
" 在句柄中加上服务器当前时间作为句柄名称,防止多人同时使用该程序,导致句柄名称相同
* CONCATENATE 'ZSPMMF1002HD' SY-UZEIT INTO headername .
CONCATENATE 'ZSPMMF1002IT' SY-UZEIT INTO itemsname.
* savebuffer ig_output_h[] headername. "ig_output_h是保存输出表单表头数据的内表
savebuffer GT_OUT itemsname.
"ig_output_d是保存输出数据明细的内表,与表头数据有关联字段
data: FM_NAME type rs38l_fnam.
call function 'SSF_FUNCTION_MODULE_NAME'
exporting
formname = 'ZSFTEST002'"参数传值为要调用的Form名称
importing
fm_name = FM_NAME.
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.
*参数列表与Form中定义的接口对象需完全一致
call function FM_NAME
exporting
ptr_items = itemsname
exceptions
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
others = 5.
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. " frm_print_selected