ALV Grid
ALV List是SAP中的一種報(bào)表方式,一般的ALV報(bào)表有一個(gè)表頭,再加上表內(nèi)容。對(duì)報(bào)表的設(shè)置有排序,分類匯總和合計(jì)等預(yù)設(shè)置。
ALV報(bào)表顯示方式有2種,一種是Grid方式,一種是List方式,分別調(diào)用不同的Function來(lái)實(shí)現(xiàn)。下面是主要代碼及說(shuō)明。
TYPE-POOLS: slis.
form frm_show_data .
?? DATA: l_line TYPE slis_listheader.
?? DATA: hinfo TYPE slis_t_listheader.
?? DATA: fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
?? DATA: layout TYPE slis_layout_alv .
?? data: sortable type SLIS_T_SORTINFO_ALV with header line.
?? clear fieldcat.
?? add 1 to fieldcat-col_pos.
?? fieldcat-fieldname = 'LGORT'. " 對(duì)應(yīng)的內(nèi)表中的字段名稱
?? fieldcat-seltext_m =??'庫(kù)存地點(diǎn)'. "ALV中顯示的標(biāo)題
?? fieldcat-outputlen = 15. " 列的顯示寬度,可以不設(shè)置
?? append fieldcat.
?? clear fieldcat.
?? add 1 to fieldcat-col_pos.
?? fieldcat-fieldname = 'CSPEM'.
?? fieldcat-seltext_m =??'待報(bào)廢數(shù)量'.
?? fieldcat-do_sum = 'X'.?? "匯總,該字段在ALV的最底部匯總
?? append fieldcat.
*-------Field List Table Setting--------
*---------------Begin of SortTable info
*--排序字段為分類字段,如果ALV需要自動(dòng)分類合計(jì),那么合計(jì)字段必須設(shè)置為排序字段,多個(gè)字段按照下面方式逐個(gè)添加
*clear sortable.
*sortable-FIELDNAME = 'LGORT'.
*sortable-UP = 'X'.
*sortable-DOWN = SPACE.
*sortable-SUBTOT = 'X'.
*append sortable.
*-----------------End of SortTable Info
layout-colwidth_optimize = 'X'. "列寬度自動(dòng)根據(jù)內(nèi)容優(yōu)化
????CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
??? EXPORTING
????? i_interface_check????????= ''
????? i_callback_program???????= sy-repid
?????? is_layout????????????????= layout
*?????? i_callback_pf_status_set = 'SET_PF_STATUS' "如果ALV使用自定義的工具欄,如果使用系統(tǒng)工具欄則忽略該行
*?????? i_callback_user_command??= 'USER_COMMAND' "自定義工具欄的事件
?????? it_fieldcat??????????????= fieldcat[]
* 這里是動(dòng)態(tài)嵌入的代碼,用于ALV控制頭部和尾部數(shù)據(jù)
?????? I_CALLBACK_HTML_TOP_OF_PAGE???????= 'ALV_TOP_OF_PAGE' "如果需要表頭
*???? it_sort = sortable[] "如果有排序和分類匯總,需要該行
* 動(dòng)態(tài)代碼結(jié)束
???? TABLES
?????? t_outtab?????????????????= GI_OUTPUT "ALV數(shù)據(jù)輸出使用的內(nèi)表
???? EXCEPTIONS
?????? program_error????????????= 1
?????? OTHERS???????????????????= 2.
endform.????????????????????" frm_show_data
*------用于設(shè)置ALV的GUI狀態(tài)
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
*??SET PF-STATUS '0100'.
ENDFORM.????????????????????"SET_PF_STATUS
FORM user_command?? USING r_ucomm LIKE sy-ucomm
??????????????????????????????????? rs_selfield TYPE slis_selfield.
??CASE r_ucomm.
???? WHEN 'Z_EXPORT'.
?????? PERFORM frm_excel_out.
?? ENDCASE.
ENDFORM.????????????????????"user_command
*-------ALV Commit Setting of ALV_top_of_page--------
FORM alv_top_of_page USING cl_dd TYPE REF TO cl_dd_document.
?? DATA: m_p TYPE i.
?? DATA: m_buff TYPE string.
*表頭其實(shí)完全可以是一個(gè)html文件,自己使用html語(yǔ)言進(jìn)行格式控制
?? m_buff = '<html>'.
??CALL METHOD cl_dd->html_insert
???? EXPORTING
?????? contents = m_buff
???? CHANGING
?????? position = m_p.
m_buff = '<center><H2>配件報(bào)廢品種匯總表</H2></Center>'.
CALL METHOD CL_DD->HTML_INSERT
EXPORTING
?? CONTENTS = m_buff
CHANGING
?? POSITION = m_p.
CONCATENATE '報(bào)表日期:' S_DATE-LOW ' TO ' S_DATE-HIGH?? '<BR>' into m_buff.
CALL METHOD CL_DD->HTML_INSERT
EXPORTING
?? CONTENTS = m_buff
CHANGING
?? POSITION = m_p.
?? m_buff = '</html>'.
??CALL METHOD cl_dd->html_insert
???? EXPORTING
?????? contents = m_buff
???? CHANGING
?????? position = m_p.
ENDFORM.????????????????????"ALV_top_of_page
注: 在ALV中,需要注意所有添加的需要顯示的列,都必須在相應(yīng)的內(nèi)表中有對(duì)應(yīng)的字段,否則,只要使用合計(jì)或者分類匯總都會(huì)導(dǎo)致程序的崩潰。
注意:在SAP ABAP程序中,字符串的大小寫(xiě)很重要,在單引號(hào)包圍的字符串中,一般來(lái)說(shuō)都應(yīng)該用大寫(xiě),特別是在調(diào)用一些系統(tǒng)的方法時(shí)傳入字符串參數(shù)時(shí),例如在ALV中,Call Function 'REUSE_ALV_GRID_DISPLAY'時(shí),傳入的下面的兩個(gè)參數(shù):
i_callback_pf_status_set = 'SET_PF_STATUS'
i_callback_user_command??= 'USER_COMMAND'
就必須使用大寫(xiě)字符串,否則就會(huì)出現(xiàn)Perform_not_found的系統(tǒng)錯(cuò)誤。
另外,傳入到ALV中的列對(duì)應(yīng)的字段名稱也必須使用大寫(xiě)字母,否則數(shù)據(jù)不會(huì)顯示出來(lái)。
總結(jié)