日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

转 ABAP_ALV_Function方式与OO方式(较为简单、普通的ALV)

發布時間:2023/12/13 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 转 ABAP_ALV_Function方式与OO方式(较为简单、普通的ALV) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ABAP_ALV_Function方式與OO方式(較為簡單、普通的ALV)

分類:?SAP ABAP?1511人閱讀?評論(0)?收藏?舉報

目錄

一、ALV簡介

1、簡介

2、ALV_GRID介紹

3、其它描述

二、開發ALV的基本流程

三、ALV相關開發細節

1、標準ALV與對象ALV的共同開發細節

2、標準ALV開發相關細節

3、對象ALV開發相關細節

四、注意事項

五、附屬信息

1、ALV快捷工具欄功能說明(如下圖)

2、類型SLIS_FIELDCAT_ALV常用參數說明

3、類型SLIS_T_SORTINFO_ALV常用參數說明

4、類型SLIS_LAYOUT_ALV常用參數說明

5、類型SLIS_T_EVENT常用參數說明

6、結構LVC_S_FCAT參數說明(清單觀察器控制的字段目錄)

7、結構LVC_S_LAYO參數說明(ALV?控制:?布局結構)

8、打印的參數控制請參考結構 [LVC_S_PRNT]

9、排序的參數控制請參考結構[LVC_S_SORT]

11、'REUSE_ALV_GRID_DISPLAY'函數常用參數

12、'REUSE_ALV_LIST_DISPLAY'函數常用參數

13、方法"set_table_for_first_display"的參數說明

14、方法"REFRESH_TABLE_DISPLAY"的參數說明

六、ALV常見問題

七、示例程序

?

一、ALV簡介

1、簡介

ALV――SAP LIST VIEWER是SAP中的一種報表方式,這里姑且稱之為ABAP表單瀏覽器,用它可以標準化,簡單化R/3系統中的表單,它可以提供給用戶一個統一的表單格式及用戶接口。ALV是系統的一種網格的顯示方式,這種方式帶有匯總\排序\篩選等功能,ALV格式的數據是以單元格為單位顯示,SAP提供了一套ALV的功能模塊,可以對輸出報表的樣式作修飾,提高報表輸出的可讀性和功能性,對于動態報表程序是一個很有效率的工具。ALV家族包含3中ALV工具:簡易的,兩層ALV,分等級連續的列表和樹形結構的ALV。一般的ALV報表有一個表頭,再加上表內容,并附加一些如排序,分類匯總,合計或下載為本地文件等預設功能。ALV報表顯示方式基本上有2種,一種是Grid方式,一種是List方式,是分別調用不同的Function來實現。

1)當調用“REUSE_ALV_GRID_DISPLAY”函數時,ALV的顯示樣式如下:

?

2)當調用“REUSE_ALV_LIST_DISPLAY”函數時,ALV的顯示樣式如下:

?

?

2、ALV_GRID介紹

The ALV Grid Control (ALV = SAP List Viewer)是一個顯示列表的靈活的工具,它提供了基本功能的列表操作,也可以通過自定義來進行增強,因此可以允許你可以在大型的應用程序中使用。在SAP的開發項目中,ALV GRID也可以作為修改和創建數據的一種工具。它包括3大部分,工具欄,標題,用于顯示數據的網格控制器.如果有必要,用戶可以隱藏標題和工具欄。

?

3、其它描述

報表的自主開發設計主要邏輯都是依托于選擇屏幕上字段,也就是提供給用戶讓他們得到自己想要結果的選擇條件途徑。其中最重要的就是必選字段,因為必選字段是取數邏輯的精華所在,他可以很巧妙的限制很多非必要的情況出現,減少開發人員的開發量,還能讓用戶最直接最快捷的得到與實際業務相關的展現結果。

對于一個報表程序的開發流程,一般都會有幾個INCLUDE.(X代表任意自定義字母)

REPORT ZXXXXXX.

INCLUDE ZXXXX_INIT.

INCLUDE ZXXXX_F01.

INCLUDE ZXXXX_block.

很多都是個人習慣吧,但是有一些習慣,能夠讓其他人在讀程序或者修改程序的時候,很快捷,有規律可循。

INCLUDE ZXXXXX_BlOCK。

里面無非就是以下幾個部分

INITIALIZATION.(初始化。在所有以下事件塊運行之前運行的,只運行一次的事件塊)

AT SELECTTION-SCREEN OUTPUT.(PBO事件塊,即屏幕輸出前事件塊)

AT SELECTION-SCREEN ON VALUE-REQUEST FOR?選擇屏幕字段名稱。(自定義搜索幫助事件塊)

AT SELECTION-SCREEN.(PAI事件塊,即屏幕操作后事件塊)

START-OF-SELECTION.(程序運行事件塊)

?

其它見解:SAP中的程序還是有很多類型的.尤其是類報表程序,有可執行程序(REPORT?開頭)還有MODULE POOL(PROGARM?開頭)2種形式.

ABAP開發屬于事件驅動開發,這句話也清晰的解釋了SAP程序的必然結構。對于事件驅動,SAP程序就需要是由一個個事件去觸發才能夠執行的程序,當我們使用SE38去創建1類型的可執行性程序(REPORT?開頭)這樣的程序,我們可以直接調試,我們會發現,這個程序是按照上面所寫的事件塊的順序去依次執行的。它的事件塊的順序是指定好的。所以我們能夠按F8,去運行。我們所創建的MODULE POOL就不能去執行,因為它需要用TCODE的去指定運行入口,一般都會在MODULE POOL?里面創建?SCREEN .?在一個SCREEN里就會有兩個事件塊,分別是PBO?和PAI。我們使用多個屏幕,或者使用TABLECONTROL控件,再或是使用子屏幕范圍控件嵌套各種SUBSCREEN(子屏幕),其中都是需要PAI?和?PBO?相互聯系的,一個屏幕的PAI中,必然后會有一個CALL SCREEN?或者CALL SUBSCREEN ... INCLUDIG....命令去調用另一個屏幕或者子屏幕,然后另一個屏幕先運行PBO,有屏幕上的操作,就執行被操作屏幕的PAI。個人感覺正式這種靈活的編寫方式,導致了這種類型(MODULE POOL)的程序不能直接F8,編譯器無法獲取程序從哪里開始,而TCODE就會指定從哪個屏幕開始。

INCLUDE ZXXXX_INIT(ZXXXX_TOP):進入程序的第一個INCLUDE。INCLUDE?是什么??(CR:就是產生的請求號,也可以理解為一個程序的代碼版本,所有的SAP程序都是在D系統(DEVELOPMENT SYSTEM)然后傳到Q(測試)系統由顧問進行測試,又不干擾生產系統的程序運行,最后再傳到P(生產)系統,覆蓋原來的代碼,變成修改后代碼邏輯)恩,我感覺它是一種封裝起來的思想。我研究一下,它單獨產生CR,而和它的主程序沒有任何關聯。這也是必然的,因為INCLUDE是一個全局全系統的聲明,一旦你取了一個名字,那么其他人也能夠引用使用,這就導致它的修改CR是單獨產生的。這里也可以定義程序所需的數據類型和數據對象。

INCLUDE ZXXXX_F01:習慣使用PERFROM來封裝代碼,取有意義的名字,然后把所有的FORM都放在這邊。

在START-OF-SELECTION中,我們一般都會寫以下幾個PERFORM,

PREFORM frm_get_data. (取數邏輯)

PERFORM frm_alv_layout_build.?(創建ALV顯示格式)

PERFORM frm_alv_set_columns.(調用ALV函數)

?

二、開發ALV的基本流程

?

第一步:定義ALV所要用到的類型池:TYPE-POOLS: SLIS?;

第二步:定義ALV所要顯示的數據對應的內表數據類型及內表數據對象;

第三步:定義一些顯示ALV時所要使用到的變量,例如:

Data: w_repid?like?sy-repid,?“ABAP程序,我們一般取當前程序

w_callback_ucomm?type slis_formname,?"字符型,功能

w_print?type slis_print_alv,?"類型組

w_layout?type slis_layout_alv, "類型組

w_html_top_of_page type?slis_formname,?"字符型

w_fieldcat_alv?like line of i_fieldcat_alv,?“從上面的數據結構類型引用過來的

w_excluding?like line of i_excluding,?“同上

w_events?like line of i_events,?“同上

w_event_exit?like line of i_event_exit,?“同上

w_list_comments?like line of i_list_comments.“同上

第四步:定義選擇屏幕 ;

第五步:聲明各個選擇屏幕事件塊,例如:

定義initialization部分,在這個部分往往要指定w_repid的值,w_repid = sy-repid。

定義start-of-selection部分,在這通常會調用各種子程序,以下以標準ALV顯示為例:

1)調用一個子程序(通常命名為frm_get_dataXXX(X代表任意自定義字母)),用于獲取ALV所要顯示的數據 ;例如:

FORM?frm_get_data.

… …?“其它處理邏輯

SELECT?lifnr?"供應商賬號
ktokk?"賬號組
name1?"名稱1
name2?"名稱2
INTO?CORRESPONDING?FIELDS?OF?TABLE?it_main
FROM?zmmjyht003
WHERE?(l_where)
.

… …?“其它處理邏輯

ENDFORM.

2)調用一個子程序(通常命名為frm_alv_layout_build),用于設置ALV所要顯示的樣式 ;

例如:

FORM?frm_alv_layout_build.
g_layout-zebra =?'X'.
g_layout-colwidth_optimize =?'X'.?"列數據最優化顯示
g_layout-box_fieldname =?'SELFLAG'.?"表示ALV行項目選中的字段
ENDFORM.

3)調用一個子程序(通常命名為frm_alv_set_columns),用于完成ALV所要顯示的列的相關設置 ;

例如:

FORM?frm_alv_set_columns.

REFRESH?g_fieldcat_alv.
PERFORM?frm_set_l_fieldcat?USING?1?'LIFNR'?'供應商賬號'.

ENDFORM.

FORM?frm_set_l_fieldcat?USING?p_pos p_name p_text.

DATA: l_fieldcat?TYPE?slis_fieldcat_alv.
l_fieldcat-col_pos = p_pos.
l_fieldcat-fieldname = p_name.
l_fieldcat-seltext_l = p_text.

APPEND?l_fieldcat?TO?g_fieldcat_alv.

ENDFORM.

4)調用顯示ALV的函數,例如:REUSE_ALV_GRID_DISPLAY?;

FORM?frm_alv_display_data.
CALL?FUNCTION?'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = g_repid
i_callback_pf_status_set =?'FRM_STATUS_ALV'
i_callback_user_command =?'FRM_USER_COMMAND_ALV'
is_layout = g_layout
it_fieldcat = g_fieldcat_alv[]
TABLES
t_outtab = it_main
EXCEPTIONS
program_error =?1
OTHERS?=?2
.
ENDFORM.

如果ALV所要展示的列過多時,建議先在數據字典系統中創建相應的結構,這樣可免去對輸出列表頭信息的繁瑣編輯處理,代碼行也會縮短。只要將上面函數中的it_fieldcat參數替換成i_structure_name,如:I_STRUCTURE_NAME = 'TY_OUT_FILE',注意:此處的TY_OUT_FILE結構必須是數據字典中已經存在的對象

?

以上步驟,詳見“示例程序”部分:示例一(標準ALV)。

?

?

三、ALV相關開發細節

1、標準ALV與對象ALV的共同開發細節

?

?

2、標準ALV開發相關細節

2.1、ALV中的各種結構類型注解:

1)TYPE-POOLS: slis:用于指定ALV類型組;

2)slis_listheader:用于定義top of page的抬頭結構;

3)slis_t_listheader:用于定義top of page的抬頭表

4)slis_t_sortinfo_alv:用于指定ALV排序分類合計等信息的數據對象;

3)slis_layout_alv?:用于定義布局類型數據對象;

4)slis_t_fieldcat_alv?WITH?HEADER?LINE:用于定義ALV列字段相關類型數據

對象;(slis_t_fieldcat_alv是表字段的整體,slis_fieldcat_alv是某一個字段的內容,將該字段的內容寫到slis_fieldcat_alv后,通過append添加到slis_t_fieldcat_alv中,后者是整個列表的標題,在顯示的時候用到。)

5)slis_t_event?:是event的整體可看作event的集合,感覺可以用來寫表頭。

slis_alv_event是某個event, 需要將slis_alv_event append到slis_t_event.它可以包含圖片和listheader等,也就是說listheader等是靠event來顯示的。

6)slis_t_listheader?:是listheader的集合,slis_listheader是某個listheader。將slis_listheader賦值后append到slis_t_listheader中。它是內表的表頭。

7)slis_listheader?: 包含:typ :H = header,S = Selection,A = action. key :

是和s對應的,是那個的標題吧. info:可以是變量和賦值的。跟在key的標題后面,

是個表達值。

?

2.2、ALV中所用到的函數:

1)顯示ALV函數:

CALL?FUNCTION?'REUSE_ALV_GRID_DISPLAY'
EXPORTING

i_callback_program = g_repid?
i_callback_pf_status_set =?'FRM_STATUS_ALV'
i_callback_user_command =?'FRM_USER_COMMAND_ALV'
is_layout = g_layout
it_fieldcat = g_fieldcat_alv[]
TABLES
t_outtab = it_main

上面“REUSE_ALV_GRID_DISPLAY?“函數的參數說明:

1> g_repid:用于保存當前程序名,例如:

g_repid?TYPE?sy-repid?VALUE?sy-repid?"保存當前程序名

2> FRM_STATUS_ALV:該子程序用于指定程序狀態,例如:

FORM?frm_status_alv?USING?p_extab?TYPE?slis_t_extab.
SET?PF-STATUS?'STANDARD'.

ENDFORM.

3> FRM_USER_COMMAND_ALV:該子程序指定相關函數功能碼的響應邏輯,例如:

FORM?frm_user_command_alv?USING?p_ucomm

TYPE?sy-ucomm p_selfield?TYPE?slis_selfield.
ok_code = p_ucomm.

CASE?ok_code.

WHEN?'CREATE'.?
… …

WHEN?'DELETE'.

… …

ENDCASE.

p_selfield-refresh =?'X'.?"ALV被修改時會自動刷新,沒有修改不進行刷新

ENDFORM.

4>?g_layout:用于設置ALV布局樣式,例如:

FORM?frm_alv_layout_build.
g_layout-zebra =?'X'.
g_layout-colwidth_optimize =?'X'.?"列數據最優化顯示
g_layout-box_fieldname =?'SELFLAG'.?"表示ALV行項目選中的字段
ENDFORM.

5>?g_fieldcat_alv[]:用于指定ALV字段相關屬性信息,例如:

FORM?frm_alv_set_columns.
REFRESH?g_fieldcat_alv.
PERFORM?frm_set_l_fieldcat?USING?1?'LIFNR'?'供應商賬號'.

ENDFORM.

FORM?frm_set_l_fieldcat?USING?p_pos p_name p_text.
DATA: l_fieldcat?TYPE?slis_fieldcat_alv.
l_fieldcat-col_pos = p_pos.
l_fieldcat-fieldname = p_name.
l_fieldcat-seltext_l = p_text.
* l_fieldcat-no_zero = 'X'.
APPEND?l_fieldcat?TO?g_fieldcat_alv.
ENDFORM.

6>?it_main:此內表中保存的是ALV所要展示的數據,例如:

it_main?TYPE?TABLE?OF?typ_item?WITH?HEADER?LINE,?"ALV對應的內表

SELECT?lifnr?"供應商賬號
ktokk?"賬號組
name1?"名稱1
name2?"名稱2
INTO?CORRESPONDING?FIELDS?OF?TABLE?it_main
FROM?zmmjyht003
WHERE?(l_where)
.

此函數的其它參數信息,詳見附屬信息中的?'REUSE_ALV_GRID_DISPLAY'函數常用參數

2)?reuse_alv_events_get?: 將各個事件的名字寫到slis_t_event的name中。這樣,可以在后面,根據名字的不同,對不同的event付不同的form,來實現不同功能。

?

2.3、ALV其它相關信息:

1)ABAP alv中對數字字段進行去掉小數點后面的零的操作如下:

在slis_t_fieldcat_alv結構中,給demcimals_out字段設為零即可,代碼如下:

IF P_FIELD = 'LINE_SUM'.
LS_FIELDCAT-DECIMALS_OUT = '0'.
ENDIF.

2)通過HTML格式來顯示表頭,示例代碼如下:

*-------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.

*表頭其實完全可以是一個html文件,自己使用html語言進行格式控制

m_buff = '<html>'.

CALL METHOD cl_dd->html_insert

EXPORTING

contents = m_buff

CHANGING

position = m_p.

m_buff = '<center><H2>配件報廢品種匯總表</H2></Center>'.

CALL METHOD CL_DD->HTML_INSERT

EXPORTING

CONTENTS = m_buff

CHANGING

POSITION = m_p.

CONCATENATE '報表日期:' 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

?

3)ALV中設置選擇字段

g_layout-box_fieldname =?'SELFLAG'.

上面中的“SELFLAG”是ALV所要顯示的內表對應的類型中的一個字段定義,形式如下:

selflag?TYPE?c,?"用于判斷行項目是否被選中

當box_fieldname賦值為”SELFLAG”后,就可以通過“SELFLAG”來判斷ALV顯示中的行項目是否被選中。

?

?

3、對象ALV開發相關細節

3.1、ALV GRID CONTROL (ALV網格控制器)

ALV GRID CONTROL使用了控制器技術以實現藝術性的屏幕顯示,象所有的控制器一樣,ALV GRID CONTROL通過系統中的一個全局的類提供方法,以響應它的動作。

使用了ABAP的對象以后,列表是通過ALV的一個實例(INSTANCE)來顯示的,程序員可以使用ABAP對象的事件管理.

3.2、ALV GRID CONTROL?實例

ALV GRID實例的定義,參照CL_GUI_ALV_GRID類

data ALV_GRID1 type ref to cl_gui_alv_grid.

3.3、簡單對象ALV的開發流程

3.3.1、OO的ALV GRID必須存在于一個容器當中,就是FUNCTION的ALV,其實也是一樣的,底層也是使用CL_GUI_ALV_GRID這個類的。首先ALV的顯示需要有幾個先決條件:

1,字段目錄,這個是必須的,如果沒有這個參數,參考一個數據字典也是可以的,就是參數I_STRUCTURE_NAME.

2.存放數據的內表,最好內表的結構和字段目錄是一致的,否則可能會出現一些無法預知的錯誤,當然你說我非要不一樣,那也不一定會出現錯誤.我建議是最好一樣的.

這2個是必須的,布局的話,應該是可以不設置的,使用默認的就可以了.

?

第一步:創建個SCREEN,在屏幕上創建個容器,CONTAINER.定義變量.

DATA:

WCL_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,

WCL_ALV TYPE REF TO CL_GUI_ALV_GRID .

*---?存放字段目錄的內表

DATA gt_fieldcat TYPE lvc_t_fcat .

*---?布局結構

DATA gs_layout TYPE lvc_s_layo .

*----聲明需要顯示的內表(以SFLIGHT為例)

DATA BEGIN OF gt_list OCCURS 0 .

INCLUDE STRUCTURE SFLIGHT .

DATA END OF gt_list .

?

第二步:?創建ALV這個對象,它的父組件是那個容器.

在PBO中寫入如下代碼:

PROCESS BEFORE OUTPUT .

MODULE display_alv .

創建DISPLAY_ALV的MODULE后,寫下如下代碼:

MODULE display_alv OUTPUT .

PERFORM display_alv .

ENDMODULE .

在FORM DISPLAY_ALV中,判斷ALV實例是否存在,如果不存在,則創建:

IF WCL_ALV IS INITIAL .

CREATE OBJECT: WCL_CONTAINER

EXPORTING

CONTAINER_NAME = \'ALV_CON\'.

CREATE OBJECT WCL_ALV

EXPORTING

I_PARENT = WCL_CONTAINER.

*-----準備獲取字段目錄

PERFORM prepare_field_catalog CHANGING gt_fieldcat .

*-----設置布局

PERFORM prepare_layout CHANGING gs_layout .

*-----顯示ALV

CALL METHOD gr_alvgrid->set_table_for_first_display

*----刷新ALV

CALL METHOD gr_alvgrid->refresh_table_display

?

第三步,獲取要顯示數據的字段目錄.有兩種方式.

1.手動創建

FORM prepare_field_catalog CHANGING pt_fieldcat TYPE lvc_t_fcat .

DATA ls_fcat type lvc_s_fcat .

ls_fcat-fieldname = \'CARRID\' .

ls_fcat-inttype = \'C\' .

ls_fcat-outputlen = \'3\' .

ls_fcat-coltext = \'Carrier ID\' .

ls_fcat-seltext = \'Carrier ID\' .

APPEND ls_fcat to pt_fieldcat .

CLEAR ls_fcat .

ENDFORM.

?

2.半自動的創建

FORM prepare_field_catalog CHANGING pt_fieldcat TYPE lvc_t_fcat .

DATA ls_fcat type lvc_s_fcat .

CALL FUNCTION \'LVC_FIELDCATALOG_MERGE\'

EXPORTING

i_structure_name = \'SFLIGHT\'

CHANGING

ct_fieldcat = pt_fieldcat[]

EXCEPTIONS

inconsistent_interface = 1

program_error = 2

OTHERS = 3.

IF sy-subrc <> 0.

*--Exception handling

ENDIF.

LOOP AT pt_fieldcat INTO ls_fcat .

CASE pt_fieldcat-fieldname .

WHEN \'CARRID\' .

ls_fcat-outpulen = \'10\' .

ls_fcat-coltext = \'Airline Carrier ID\' .

MODIFY pt_fieldcat FROM ls_fcat .

WHEN \'PAYMENTSUM\' .

ls_fcat-no_out = \'X\' .

MODIFY pt_fieldcat FROM ls_fcat .

ENDCASE .

ENDLOOP .

ENDFORM .

?

第四步,設置布局

FORM prepare_layout CHANGING ps_layout TYPE lvc_s_layo.

ps_layout-zebra = \'X\' .

ps_layout-grid_title = \'Flights\' .

ps_layout-smalltitle = \'X\' .

ENDFORM. " prepare_layout

?

第五步,排除不需要的標準按鈕(可選,這個是第一種方法,還有另外一種,在添加自定義的按鈕的時候介紹)

在你的ALV上,如果你想排除一些你不想要的標準按鈕,你可以把需要排除的按鈕填入到表UI_FUNCTIONS中,然后傳給set_table_for_first_display方法的參數"IT_TOOLBAR_EXCLUDING".這些按鈕的功能碼一般都可以通過查看類cl_gui_alv_grid的常量屬性中獲取到,或者自己加個斷點,在after_user_command事件中.

如果你要隱藏全部的工具條,你可以把layout中的no_toolbar設置為"X".

FORM exclude_tb_functions CHANGING pt_exclude TYPE ui_functions .

DATA ls_exclude TYPE ui_func.

ls_exclude = cl_gui_alv_grid=>mc_mb_sum .

APPEND ls_exclude TO pt_exclude.

ENDFORM .

?

以上步驟,詳見“示例程序”部分:示例二(對象ALV)。

?

?

3.3.2、對象ALV的一些功能.

功能一:在第一次顯示以后,修改字段目錄和布局.

在運行的時候,很有可能需要在顯示之后,需要設置一個新的布局或者字段目錄.有下面這些方法去實現.

字段目錄?: get_frontend_fieldcatalog

set_frontend_fieldcatalog

布局: get_frontend_layout

set_frontend_layout

使用這些方法,你在執行的任何時候,可以獲取這些內容,然后修改他們.

?

DATA ls_fcat TYPE lvc_s_fcat .

DATA lt_fcat TYPE lvc_t_fcat .

DATA ls_layout TYPE lvc_s_layo .

CALL METHOD gr_alvgrid->get_frontend_fieldcatalog

IMPORTING

et_fieldcatalog = lt_fcat[] .

LOOP AT lt_fcat INTO ls_fcat .

IF ls_fcat-fieldname = \'PAYMENTSUM\' .

ls_fcat-no_out = space .

MODIFY lt_fcat FROM ls_fcat .

ENDIF .

ENDLOOP .

CALL METHOD gr_alvgrid->set_frontend_fieldcatalog

EXPORTING

it_fieldcatalog = lt_fcat[] .

?

CALL METHOD gr_alvgrid->get_frontend_layout

IMPORTING

es_layout = ls_layout .

ls_layout-grid_title = \'Flights (with Payment Sums)\' .

CALL METHOD gr_alvgrid->set_frontend_layout

EXPORTING

is_layout = ls_layout .

?

功能二:設置排序條件

有時候我們需要使用到數據的排序.這個可以通過填充參考結構LVC_T_SORT創建的內表來實現,這個內表中包含了排序的標準.可以傳遞給set_table_for_first_display這個方法的IT_SORT參數來初始化一個排序.

?

FORM prepare_sort_table CHANGING pt_sort TYPE lvc_t_sort .

DATA ls_sort TYPE lvc_s_sort .

ls_sort-spos = \'1\' .

ls_sort-fieldname = \'CARRID\' .

ls_sort-up = \'X\' . "A to Z

ls_sort-down = space .

APPEND ls_sort TO pt_sort .

ls_sort-spos = \'2\' .

ls_sort-fieldname = \'SEATSOCC\' .

ls_sort-up = space .

ls_sort-down = \'X\' . "Z to A

APPEND ls_sort TO pt_sort .

ENDFORM. " prepare_sort_table

?

這有2點特別的說明:

1.如果這邊排序的字段名,不存在于字段目錄中,那將出現DUMP.

2.排序以后,垂直的網格中,如果出現相同的內容,就會合并,如果要避免,請在布局中設置"no_merging"為"X" .

可以通過使用方法“get_sort_criteria”?和“set_sort_criteria”來獲取和設置排序的標準.

?

功能三:設置過濾(和排序類似)

ALV的標準按鈕中已經有過濾的功能,我們也可以在初始顯示的時候就設置過濾條件.我們需要把過濾條件填充到參考表類型"LVC_T_FILT"創建的內表中.過濾條件是類似一個RANGES結構的.然后把這個內表傳遞給方法"SET_TABLE_FOR_FIRST_DISPLAY"中的參數"IT_FILTER"

?

FORM prepare_filter_table CHANGING pt_filt TYPE lvc_t_filt .

DATA ls_filt TYPE lvc_s_filt .

ls_filt-fieldname = \'FLDATE\' .

ls_filt-sign = \'E\' .

ls_filt-option = \'BT\' .

ls_filt-low = \'20030101\' .

ls_filt-high = \'20031231\' .

APPEND ls_filt TO pt_filt .

ENDFORM. " preparefiltertable

我們可以使用"get_filter_criteria"?和"set_filter_criteria"來獲取過濾條件和設置過濾條件.

?

功能四:選擇方式

有時候,我們需要選擇一些單元格,行或者列,在布局中,有個參數"SEL_MODE"可以設置我們不同的選擇方式.下面是參數的介紹.和不同的地方.

值 模式 可能的選擇 注釋

SPACE?等同于B?參考B?默認設置

\'A\'?行和列的選擇,無法選擇單元格 多行,多列 用戶可以使用最左邊的選擇按鈕來選擇多行

\'B\'?單選,不可以多選行,不可以多選單元格 多行,多列  

\'C\'?多選,可以多選行,不可以多選單元格 多行,多列  

\'D\'?單元格的選擇,可以多選單元格 多行,多列,任何單元格多選 用戶可以使用最左邊的選擇按鈕來選擇多行

注意:

1.如果你設置了ALV是可編輯的,可能會覆蓋你在布局中選擇方式的設置的.

2.設置了選擇方式以后,我們可以使用很多方法來獲取用戶的選擇.比如"GET_SELECTED_CELLS","GET_SELECTED_CELLS_ID","GET_SELECTED_ROWS","GET_SELECTED_COLUMNS"

3.在執行PAI以后,用戶所選擇的單元格,行或者列可能丟失.你可以在PBO中,使用對應的SET方法來恢復這些選擇.

?

功能五:顏色設置

有的時候,我們需要在ALV網格上繪上一些顏色.可以給特定的行,某個特定的列,某個特定的單元格繪制顏色.

如果某列被設置為關鍵列,這列的顏色將被自動繪制,而不需要我們額外的指定.

先介紹ALV里色碼.就是顏色編碼,4位CHAR型.

Cxyz---

Color || |

| 1/0:?相反 開/關

1/0:?強化 開/關

其中C是固定的第一位,第二位代表是顏色編碼(1到7),第三位是加強的設置,第四位是相反,個人理解,在強化關閉的情況下,相反的作用是背景和字體的變化.

?

顏色編碼:

x?顏色 主要使用在

1 Gray-blue headers

2 Light gray List bodies

3 yellow totals

4 Blue-green Key columns

5 green Positive threshold value

6 red Negative threshold value

7 orange Control levels

?

?

A)設置列的顏色.

我們可以通過字段目錄的"emphasize"控制字段來控制某列的顏色.這個字段同樣是4位的CHAR型,傳入上述的顏色編碼.例如:

LS_FCAT-EMPHASIZE = \'C701\'.

?

如果這列被設置為關鍵列,就是?LS_FCAT-KEY = \'X\' ,那么顏色設置就不會起作用.請注意,自動產生的字段目錄中,KEY的設置是自動獲取的.

?

B)設置行的顏色

為某行設置顏色,是有點復雜的,我們需要在要顯示的數據內表中增加一個字段,這個字段不需要在字段目錄中存在.同樣,這個字段也是4位的CHAR型,符合顏色編碼的定義.

那我們就需要這樣來定義我們的數據內表:

DATA BEGIN OF gt_list OCCURS 0 .

INCLUDE STRUCTURE SFLIGHT .

DATA rowcolor(4) TYPE c .

DATA END OF gt_list .

很明顯,填入顏色編碼以后,ALV怎么知道它是我們用來設置顏色的呢,在布局中,有個控制字段"INFO_FNAME",我們可以設置這個字段來告訴ALV,我們的顏色字段是哪個.

ps_layout-info_fname = \'ROWCOLOR\'.

請注意,這個字段隨便你起名字,但是記住,一定是數據內表里的字段,而且這邊設置的時候一定要大寫.你可以在任何時候設置行的顏色,只需要去修改內表里的這個字段的值,但是記得,一定要刷新以后才起作用.

?

C)設置單元格的顏色

設置單元格和設置行的顏色,本質上沒有什么大的區別,但是定位單元格需要2個參數.我們需要在數據內表中插入一個表類型的字段,這樣我們的數據內表就變成了DEEP結構了,不過ALV是可以處理的.不需要擔心.

插入的這個表類型的類型為"LVC_T_SCOL".

里面有3個參數:

FNAME告訴我們你需要設置的是哪個字段,如果為空,然后直接在COLOR中設置顏色,就是整行設置為這個顏色.如果具體到某個單元格,必須指定是哪個字段.

COLOR字段是用來設置顏色的.

NOKEYCOL字段比較關鍵了.設置為關鍵列的一些字段,我們的顏色設置可能被覆蓋.通過這個字段的設置,可以避免被關鍵列覆蓋.

同樣,ALV在布局中有個字段"CTAB_FNAME"告訴我們,數據內表中,哪個字段是用來設置單元格的顏色的.

DATA BEGIN OF gt_list OCCURS 0 .

INCLUDE STRUCTURE SFLIGHT .

DATA rowcolor(4) TYPE c .

DATA cellcolors TYPE lvc_t_scol .

DATA END OF gt_list .

DATA ls_cellcolor TYPE lvc_s_scol .

...

READ TABLE gt_list INDEX 5 .

ls_cellcolor-fname = \'SEATSOCC\' .

ls_cellcolor-color-col = \'7\' .

ls_cellcolor-color-int = \'1\' .

APPEND ls_cellcolor TO gt_list-cellcolors .

MODIFY gt_list INDEX 5 .

注意:

顏色設置中有優先級順序,他們是單元格--->行--->列.

?

功能六:插入超鏈接

插入超鏈接是通過一個含有超級鏈接和句柄的表來實現的.這個表類型為"LVC_T_HYPE" ,句柄是一個INT4類型的字段,我們需要在數據顯示的內表中,加入這樣的字段,來告訴ALV,我們的字段指定的句柄,從而找到對應的超級鏈接.在字段目錄中,WEB_FIELD是用來指定對應的句柄名的.

下面舉個例子來說明,我們要為字段CARRID,CONNID建立超級鏈接:

?

首先,內表定義中,我們加入2個句柄字段:

DATA BEGIN OF gt_list OCCURS 0 .

INCLUDE STRUCTURE SFLIGHT .

DATA rowcolor(4) TYPE c .

DATA cellcolors TYPE lvc_t_scol .

DATA carrid_handle TYPE int4 .

DATA connid_handle TYPE int4 .

DATA END OF gt_list .

?

第二:?建立一個超級鏈接內表,里面存放句柄所對應的超級鏈接.創建的時候注意,它參考的表類型,一定是"LVC_T_HYPE".

?

FORM prepare_hyperlinks_table CHANGING pt_hype TYPE lvc_t_hype .

DATA ls_hype TYPE lvc_s_hype .

ls_hype-handle = \'1\' .

ls_hype-href = \'http://www.company.com/carrids/car1\' .

APPEND ls_hype TO pt_hype .

ls_hype-handle = \'2\' .

ls_hype-href = \'http://www.company.com/carrids/car1\' .

APPEND ls_hype TO pt_hype .

ls_hype-handle = \'3\' .

ls_hype-href = \'http://www.company.com/carrids/car1\' .

APPEND ls_hype TO pt_hype .

ls_hype-handle = \'4\' .

ls_hype-href = \'http://www.company.com/connids/con11\' .

APPEND ls_hype TO pt_hype .

ls_hype-handle = \'5\' .

ls_hype-href = \'http://www.company.com/connids/con12\'

APPEND ls_hype TO pt_hype .

.. ..

ENDFORM .

?

第三.通過字段目錄FIELDCATLOG來指定相應的句柄字段.

對于CARRID的field catalog

Ls_fieldcat-web_field = ‘CARRID_HANDLE’.

對于CONNID的field catalog

Ls_fieldcat-web_field = ‘CONNID_HANDLE’.

在方法"SET_TABLE_FOR_FIRST_DISPLAY"中把句柄內表傳給參數it_hyperlink。

?

第四:在數據顯示的內表中,指定對應的句柄:

LOOP AT gt_list.

IF gt_list-carrid = ‘XX’.

Gt_list-carrid_handle = ‘1’.

IF gt_list-connid = ‘01’.

Gt_list-connid_handle = ‘4’.

ENDIF.

ENDIF.

ENDLOOP.

?

功能七:把字段設置為下拉

有時候我們可以把一些字段設置為下拉,比如一些類型,一些字段的值是比較固定的一些值,當然,我們也可以通過搜索幫助來做,這些只是看各自的愛好和需要了.

設置為下拉,和上一篇設置超級鏈接是類似的,也是使用了一個內表存放了句柄和對應的值,這個表類型為"LVC_T_DROP".不過傳遞給ALV的方式有點區別.超級鏈接是通過方法"SET_TABLE_FOR_FIRST_DISPLAY"的參數來傳遞的,而下拉的內表傳遞需要使用方法"SET_DROP_DOWN_TABLE".

如果我們希望把這個列都設置為下拉,那么我們可以在字段目錄中,把控制字段"DRDN_HNDL"指向對應的下拉內表的句柄就可以了.例如:

ps_fcat-drdn_hndl = \'1\' .

如果是某個單元格設置為下拉,那我們就需要在數據顯示的內表中增加一個句柄字段(如果是有多個不同的字段需要設置下拉,可以增加多個字段),同時得在字段目錄里設置"DRDN_FIELD".例如:

ps_fcat-drdn_field = \'PTYP_DD_HNDL\' .

數據顯示內表定義為:

DATA BEGIN OF gt_list OCCURS 0 .

INCLUDE STRUCTURE SFLIGHT .

DATA rowcolor(4) TYPE c .

DATA cellcolors TYPE lvc_t_scol .

DATA carrid_handle TYPE int4 .

DATA connid_handle TYPE int4 .

DATA ptype_dd_hndl TYPE int4 .

DATA END OF gt_list .

?

定義下拉的句柄內表:

FORM prepare_drilldown_values.

DATA lt_ddval TYPE lvc_t_drop .

DATA ls_ddval TYPE lvc_s_drop .

ls_ddval-handle = \'1\' .

ls_ddval-value = \'JFK-12\' .

APPEND ls_ddval TO lt_ddval .

ls_ddval-handle = \'1\' .

ls_ddval-value = \'JSF-44\' .

APPEND ls_ddval TO lt_ddval .

ls_ddval-handle = \'1\' .

ls_ddval-value = \'KMDA-53\' .

APPEND ls_ddval TO lt_ddval .

ls_ddval-handle = \'1\' .

ls_ddval-value = \'SS3O/N\' .

APPEND ls_ddval TO lt_ddval .

CALL METHOD gr_alvgrid->set_drop_down_table

EXPORTING

it_drop_down = lt_ddval .

ENDFORM. " prepare_drilldown_values

準備好內表,以后,使用方法set_drop_down_table來傳遞給ALV.

?

功能八:基于事件的附加功能

作為使用面向對象的方法開發的一個組件,ALV GRID控制器有很多響應用戶交互的事件.這些事件經常被用來增強一些用戶響應的功能.為實現這樣的功能,我們必須在程序中創建一個類的實例來作為ALV GRID實例的事件處理者.

下表列出了一些ALV GRID的事件,后面的HTML列用來說明是否在HTML形式SAP GUI上支持.

用戶定義文本輸出:

Event Application HTML

Print_end_of_list Define output text to be printed at the end of the entire list √

Print_top_of_list Define output text to be printed at begin of the entire list √

Print_top_of_page Define output text to be printed at begin of each page √

Print_end_of_page Define output text to be printed at the end of each page √

Subtotal_text Define self-defined subtotal texts √

?

ALV GRID的鼠標動作事件

Event Application HTML

Button_click Query click on a push button in the ALV GRID control √

Double_click Query a double click on a cell of the ALV GRID √

Hotspot_click Query a hotspot click on columns defined for this purpose in advance √

ondrag Collect information when elements of the ALV GRID Control are dragged ×

ondrop Process information when elements of the ALV GRID Control are dropped ×

ondropComplete Perform final actions after successful drag&drop ×

ondropGetFlavor Distinguish between options for drag&drop behavior ×

?

自定義和標準功能實現

Event Application HTML

Before_user_command Query self-defined and standard functions √

User_command Query self-defined function codes √

After_user_command Query self-defined and standard functions codes √

?

自定義功能的定義(自定義按鈕,菜單等等)

Event Application HTML

Tool bar Change,delete or add gui elements on alv grid √

Menu_button Define menus for menu buttons in the toolbar √

Context_menu_request Change context menu ×

Onf1 Define self-defined f1 help √

?

下面是一段代碼,舉例說明如果定義我們的事件處理類.

CLAS lcl_event_handler DEFINITION.

PUBLIC SECTION.

METHODS:

*--在ALV的工具條上增加新的按鈕

Handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid

IMPORTING e_object e_interactive,

*--實現用戶命令

Handle_user_command

FOR EVENT user_command OF cl_gui_alv_grid

IMPORTING e_ucomm.

*--熱點點擊控制

Handle_hotspot_click

FOR EVENT hotspot_click OF cl_gui_alv_grid

IMPORTING e_row_id e_column_id es_row_no.

*--在用戶命令觸發之前

Handle_before_user_command

FOR EVENT before_user_command OF cl_gui_alv_grid

IMPORTING e_ucomm.

*--在用戶命令觸發之后

Handle_after_user_command

FOR EVENT after_user_command OF cl_gui_alv_grid

IMPORTING e_ucomm.

*--在ALV可修改的情況下,控制數據修改

Handle_data_changed

FOR EVENT data_changed OF cl_gui_alv_grid

IMPORTING er_data_changed.

*--在數據修改完成之后

Handle_data_changed_finished

FOR EVENT data_changed_finished OF cl_gui_alv_grid

IMPORTING e_modified.

*--管理菜單

Handle_menu_button

FOR EVENT menu_button OF cl_gui_alv_grid

IMPORTING e_object e_ucomm.

*--管理按鈕點擊

Handle_button_click

FOR EVENT button_click OF cl_gui_alv_grid

IMPORTING e_objec e_ucomm.

PRIVATE SECTION.

ENDCLASS.

?

下面是類的實現的一些概要代碼,參數可以從ALV的事件中直接獲取出來:

CLASS lcl_event_handler IMPLEMENTATION.

*-- Handle toolbar

METHOD handle_toolbar.

PERFORM handle_toolbar USIGN e_object e_interactive.

ENDMETHOD.

*-- Handle hotspot click

METHOD handle_hotspot_click.

PERFORM handle_hotspot_click USING e_row_id e_column_id es_row_no.

ENDMETHOD.

*-- Handle double click

METHOD handle_double_click.

PERFORM handle_double_click USING e_row e_column es_row_no.

ENDMETHOD.

*-- Handle after user command

METHOD handle _after_user_command.

PERFORM handle_after_user_command USING e_object.

ENDFORM.

*-- Handle before user command

METHOD handle_before_user_command.

PERFORM handle_before_user_command.

ENDMETHOD.

*--Handle data changed

METHOD handle_data_changed.

PERFORM handle_data_changed USING er_data_changed.

ENDMEHTOD.

METHOD handle_data_changed_finished.

PERFORM handle_data_chaged USING e_modified.

ENDMETHOD.

METHOD handle_menu_button.

PERFORM handle_menu_button USING e_object e_ucomm.

ENDMEHTOD.

MEHTOD handle_button_click.

PERFORM handle_button_click USING e_objcet e_ucomm.

ENDMETHOD.

ENDCALSS.

?

光定義了這些還不夠,我們需要把事件管理類注冊到ALV GRID的實例事件.

DATA gr_event_handler TYPE REF TO lcl_event_handler .

.. ..

*--Creating an instance for the event handler

CREATE OBJECT gr_event_handler .

*--Registering handler methods to handle ALV Grid events

SET HANDLER gr_event_handler->handle_user_command FOR gr_alvgrid .

SET HANDLER gr_event_handler->handle_toolbar FOR gr_alvgrid .

SET HANDLER gr_event_handler->handle_menu_button FOR gr_alvgrid .

SET HANDLER gr_event_handler->handle_double_click FOR gr_alvgrid .

SET HANDLER gr_event_handler->handle_hotspot_click FOR gr_alvgrid .

SET HANDLER gr_event_handler->handle_button_click FOR gr_alvgrid .

SET HANDLER gr_event_handler->handle_before_user_command FOR gr_alvgrid .

SET HANDLER gr_event_handler->handle_context_menu_request FOR gr_alvgrid .

SET HANDLER gr_event_handler->handle_data_changed FOR gr_alvgrid .

SET HANDLER gr_event_handler->handle_data_changed_finished FOR gr_alvgrid .

?

3.4、ABAP-AVL-OO方法中的ALV的如何自己添加按鈕及其響應

SAP在做報表開發中,不同公司對報表的風格往往各異,為此經常在使用OO方法做ALV報表中需要去掉自帶的工具欄而自行添加一些工具按鈕,下面將簡單介紹一下添加按鈕及如何響應的實現方法:

步驟一:創建一個事件處理類

CLASS?lcl_event_receiver?DEFINITION.
* public attributes and method
PUBLIC?SECTION.
METHODS:
handle_toolbar?FOR?EVENT?toolbar?OF?cl_gui_alv_grid
IMPORTING
e_object,
handle_user_command?FOR?EVENT?user_command?OF?cl_gui_alv_grid
IMPORTING
e_ucomm,
ENDCLASS.?"lcl_event_receiver DEFINITION

注意這個事件處理類中添加了兩個方法,第一個方法負責往工具欄上添加按鈕,第二個方法用來響應工具欄上按鈕的動作

步驟二:類的實現

CLASS?lcl_event_receiver?IMPLEMENTATION.


* method toolbar handler
METHOD?handle_toolbar.
PERFORM?set_toolbar?CHANGING?e_object.
ENDMETHOD.?"handle_toolbar

?

METHOD?handle_user_command.
* Handle own functions defined in the toolbar
CASE?e_ucomm.
WHEN?'ADD'.
PERFORM?xyz. “這里你想干嘛就可以干嘛
ENDCASE.

ENDMETHOD.?"handle_user_command

?

ENDCLASS.?"lcl_event_receiver IMPLEMENTATION

步驟三:在FORM-----set_toolbar?中添加button

FORM?set_toolbar

CHANGING?prf_object?TYPE?REF?TO?cl_alv_event_toolbar_set.

CLEAR?prf_object->mt_toolbar.

CLEAR?gs_toolbar.
MOVE?'ADD'?TO?gs_toolbar-function.
MOVE?TO?gs_toolbar-quickinfo.
MOVE?TO?gs_toolbar-text.
MOVE?' '?TO?gs_toolbar-disabled.
INSERT?gs_toolbar?INTO?prf_object->mt_toolbar?INDEX?1.

ENDFORM.?" set_toolbar1

?

步驟四:創建事件處理對象--這一步一般在?grf_grid->set_table_for_first_display?之后

SET?HANDLER?grf_event_receiver->handle_user_command?FOR?grf_grid.
SET?HANDLER?grf_event_receiver->handle_toolbar?FOR?grf_grid.
CALL?METHOD?grf_grid->set_toolbar_interactive.

?

注意:STB_BUTTON結構包含的字段

FUNCTION UI_FUNC CHAR 70 0 Function Code
ICON ICONNAME CHAR 30 0 Name of an Icon
QUICKINFO ICONQUICK CHAR 30 0 Quickinfo for an icon
BUTN_TYPE TB_BTYPE INT4 10 0 Toolbar button type
DISABLED CHAR 1 0 Disabled
TEXT TEXT40 CHAR 40 0 Text, 40 Characters Long
CHECKED CHAR 1 0 Printed

TB_BTYPE?的可選擇值 ,主要用來決定按鈕的類型

0 Button (normal)
1 Menu and default button
2 Menu
3 Separator
4 Radio button
5 Checkbox
6 Menu entry

?

詳見“示例程序”部分:示例二(對象ALV添加自己的按鈕)。

?

3.5、ABAP-AVL-如何去掉OO方法中的ALV的標準按鈕

SAP在做報表開發中,不同公司對報表的風格往往各異,為此經常在使用OO方法做ALV報表中需要去掉自帶的工具欄而自行添加一些工具按鈕,下面將簡單介紹一些其實現過程與原理:

步驟一:

DATA?: gt_exclude?TYPE?ui_functions.
步驟二:寫一個FORM將要去掉的按鈕添加到上面定義的表(gt_exclude)

perform exclude_tb_functions tables gt_exclude

?

FORM?exclude_tb_functions?TABLES?pt_exclude?TYPE?ui_functions .

DATA: ls_exclude?TYPE?ui_func.
ls_exclude = cl_gui_alv_grid=>mc_fc_maximum .
APPEND?ls_exclude?TO?pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_minimum .
APPEND?ls_exclude?TO?pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_subtot .
APPEND?ls_exclude?TO?pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_sum .
APPEND?ls_exclude?TO?pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_average .
APPEND?ls_exclude?TO?pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_mb_sum .
APPEND?ls_exclude?TO?pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_mb_subtot .
APPEND?ls_exclude?TO?pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_sort_asc.
APPEND?ls_exclude?TO?pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_sort_dsc .
APPEND?ls_exclude?TO?pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_find .
APPEND?ls_exclude?TO?pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_filter .
APPEND?ls_exclude?TO?pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_print .
APPEND?ls_exclude?TO?pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_print_prev .
APPEND?ls_exclude?TO?pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_mb_export .
APPEND?ls_exclude?TO?pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_graph .
APPEND?ls_exclude?TO?pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_mb_view .
APPEND?ls_exclude?TO?pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_detail .
APPEND?ls_exclude?TO?pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_help .
APPEND?ls_exclude?TO?pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_info .
APPEND?ls_exclude?TO?pt_exclude.

ls_exclude = cl_gui_alv_grid=>MC_MB_VARIANT.
APPEND?ls_exclude?TO?pt_exclude.?
ENDFORM.?" exclude_tb_functions

步驟三:

CALL?METHOD?grf_grid1->set_table_for_first_display
EXPORTING
is_variant = gs_variant
i_save =?' '
is_layout = gs_layout
it_toolbar_excluding = gt_exclude
CHANGING
it_outtab = gt_result1[]
it_fieldcatalog = gt_fcat_lvc.

?

3.6、對象ALV單元格編輯狀態設計

ALV函數只能實現對整列的編輯狀態控制,單元格的編輯狀態控制只能通過ALV OO實現。

1.單元格狀態控制和單元格顏色控制類似,在LIST DATA TABLE中定義一個字段cellstyle. TYPE lvc_t_styl

?

list data table中的cellstyle字段將被用來存儲單元格樣式信息,單元格編輯狀態就是通過表中的內容來控制

2.根據相關條件調整list data table中的cellstyle字段內容

?

3.設置樣式輸出控制結構的stylename字段內容為單元格狀態控制字段名

?

?

3.7、cell?更新事件

ALV單元格設置為可輸入后,通常我們需要對單元格輸入的值做一個檢查,一般來說用循環內表的方法可以實現上述操作,不過如果ALV中有大量數據,而我們只更新了少量的單元格數據,這樣檢查顯得非常的麻煩,而且效率低下
在ALV OO中我們可以通過DATA_CHANGE事件得到被修改的單元格的信息,利用這些信息我們可以很方便的對所填數據做檢查,別且可以給用戶相應的錯誤提示,以及自動修改單元格數據
1.我們需要在處理事件的類中添加一個處理DATA_CHANGE事件的方法
Eg:
CLASS lcl_alv_receiver DEFINITION DEFERRED.
CLASS lcl_alv_receiver DEFINITION.

PUBLIC SECTION.
……..
METHODS:
handle_data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed e_onf4 e_onf4_before e_onf4_after e_ucomm.
ENDCLASS. "lcl_event_receiver DEFINITION

2.初始化ALV后為lcl_alv_receiver類注冊一個DATA_CHANGED事件?Eg:
CALL METHOD g_grid->set_table_for_first_display
EXPORTING
i_save = x_save
is_variant = ls_layout
is_layout = is_layout
CHANGING
it_fieldcatalog = it_fieldcat
it_outtab = lt_zqsdmx[].
SET HANDLER g_alv_application->handle_data_changed FOR g_grid.
CALL METHOD g_grid->register_edit_event “注冊更新事件
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter .?
其中i_event_id = cl_gui_alv_grid=>mc_evt_enter?表示在單元格修改后回車或者執行其他操作時觸發事件,此類型可用于多個單元格修改后一起檢查修改的值
i_event_id = cl_gui_alv_grid=>mc_evt_modified?表示單光標焦點移開被修改單元格后既觸發事件,此類型可用于每個每個單元個的實時更新檢查

3.實現lcl_alv_receiver類的handle_data_changed方法,其中一些常用的一些屬性方法我會在后附表列出

Eg:

CLASS lcl_alv_receiver IMPLEMENTATION.
METHOD handle_toolbar.
METHOD handle_data_changed.
PERFORM. handle_data_changed USING er_data_changed.
ENDMETHOD. "handle_data_changed
ENDCLASS. "lcl_ALV_event_receiver

*&---------------------------------------------------------------------*
*& Form handle_data_changed
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_ER_DATA_CHANGED text
*----------------------------------------------------------------------*

FORM. handle_data_changed USING p_er_data_changed TYPE REF TO cl_alv_changed_data_protocol.
*如果更新的reason字段長度小于10為則提示用戶填入字符數不能低于10
DATA:mod_data TYPE lvc_t_modi,
wa_mod_data TYPE lvc_s_modi.
mod_data = p_er_data_changed->mt_mod_cells.
LOOP AT mod_data INTO wa_mod_data Where fieldname = 'ZRESON'.
IF STRLEN( wa_mod_data-value ) < 10.
CALL METHOD p_er_data_changed->add_protocol_entry
EXPORTING
i_msgid = '00'
i_msgty = 'E'
i_msgno = '001'
i_msgv1 = '長度必須大于10 '
i_fieldname = wa_mod_data-fieldname.

*如果長度小于10,則將字段內容更新為長都無法確定
CALL METHOD p_er_data_changed->modify_cell
EXPORTING
i_row_id = wa_mod_data-row_id
i_fieldname = wa_mod_data-fieldname.
ENDIF.
ENDLOOP.

ENDFORM.

?

四、注意事項

1、在ALV中,需要注意所有添加的需要顯示的列,都必須在相應的內表中有對應的字段,否則,只要使用合計或者分類匯總都會導致程序的崩潰。

2、在SAP ABAP程序中,字符串的大小寫很重要,在單引號包圍的字符串中,一般來說都應該用大寫,特別是在調用一些系統的方法時傳入字符串參數時,例如在ALV中,
Call Function ‘REUSE_ALV_GRID_DISPLAY’時,
傳入的下面的兩個參數:
i_callback_pf_status_set = ‘SET_PF_STATUS’
i_callback_user_command = ‘USER_COMMAND’?
就必須使用大寫字符串,否則就會出現Perform_not_found的系統錯誤。

3、另外,傳入到ALV中的列對應的字段名稱也必須使用大寫字母,否則數據不會顯示出來。

4、使用宏定義可以減少代碼量,并且盡可能實現代碼的復用。

5、注意在FORM里定義的變量在離開FORM后,就會被系統釋放掉,回收內存空間。

6、注意LUW概念,即:數據庫的更新回滾,如果是進行多個屏幕的操作,會導致數據庫語句隱式的COMMIT,?從而導致數據的不一致,也無法做到數據的全部回滾,還有使用PERORM ... ON COMMIT等方式可以是暫時制止隱式的數據庫提交,與標準程序使用的數據庫表互鎖(審批程序)(SAP的鎖概念,是很有意思的。)?(再就是解釋BDC其中DB COMMIT選項的妙用,會跳過類似COMMIT的控件繼續錄屏,而不會終止當前錄屏操作。

7、給ALV的各個系統數據類型的數據對象的賦值時,單引號內的數據必須大寫。

8、標準ALV顯示工具欄的屬性是:slis_layout_alv-def_status。

?

?

?

五、附屬信息

1、ALV快捷工具欄功能說明(如下圖)
???細節按鈕,你首先必須選中列表中的一行,然后點擊它的話,就會彈出一個窗口,顯示選中行的細節內容。(另外:你雙擊你要選擇的行,也可以顯示細節)

???按升序排列,首先選中一列,然后再點擊它,就可以看到該列是按照升序重新排列。

???按降序排列,首先選中一列,然后再點擊它,就可以看到該列是按照降序重新排列。

???設置過濾器,通過設置它可以達到篩選的目的,以列名稱作為篩選的篩選標準,填入過濾器相應的標準值,然后就可以篩選出滿足自己條件的記錄。

???打印預覽,點擊它之后,就可以預覽一下將要打印內容的布局情況。

???Microsoft Excel,調用MS的Excel到當前ALV的列表顯示區域。(前提:必須安裝了MS的Excel)

???字處理,字處理的相關設置。

???本地文件,將當前表單存儲到本地機器上,有幾種供選擇的存儲格式。

???郵件收件人,給系統內用戶發郵件

???圖形,點擊它可以根據表單情況繪制相關圖表。

???更改布局,點擊它可以對表單中的列項目排列次序的互換,刪減等。

???選擇布局,從以及保存的布局中選擇自己滿意的布局。

???保存布局,對于自己滿意的布局,可以通過點擊它來將布局保存起來。

?

2、類型SLIS_FIELDCAT_ALV常用參數說明

(用來定義表單中的各個列的相關信息)

(賦值’’中內容必須為大寫)
fieldname?對應內表中哪個字段,必須

Intlen?表示可以篩選的長度,如果不輸得話有可能在篩選的時候顯示不夠 長

emphasize(4)?帶有顏色的高亮列

col_pos = n.?輸出列在ALV中的位置索引值

tabname = ‘FIELDNAME’.?對應的內表字段名(標簽名稱)

seltext_s/m/l = ‘列名’.?輸出列文本(_s:短文本?_l:長文本)必須

emphasize = ‘CX10’.?帶有顏色的高亮列(其中X=(1-7)顏色同format)

hotspot = ‘X’.?作為熱點顯示可觸發鼠標觸發事件

currency = ‘CURRKEY’.?表?TCURX?中的貨幣名稱

quantity(3)?計量單位

qfieldname?參考計量單位的字段名稱

round = n.?四舍五入至小數位數下n?位

exponent = n.?浮點數的冪指數為n

key = ‘X’.?關鍵字段

icon = ‘X’.?作為圖標輸出

symbol = ‘X’.?輸出作為符號

checkbox = ‘X’.?作為復選框輸出

just = SPACE, \'R\', \'L\', \'C\'.?對齊方式

lzero = ‘X’.?輸出前導零

no_sign = ‘X’.?輸出抑制符號

no_zero = ‘X’.?為輸出隱藏零

edit_mask = SPACE, mask..?輸出為mask的模式(為輸出編輯掩碼)

?

fix_column = ‘X’.?固定列

do_sum = ‘X’.?總計列值總和

no_out = ‘X’.?列不輸出

tech = ‘X’.?該字段為技術字段

outputlen = n?列的字符寬度為n

decimals_out = n?能控制小數點的位數為n

datatype = C,I,N…?定義數據類型

?

3、類型SLIS_T_SORTINFO_ALV常用參數說明

(排序)

Fieldname?字段名

Up?升序排列

Down?降序排列

Subtot

?

4、類型SLIS_LAYOUT_ALV常用參數說明

(用于定義ALV表單的相關格式、屬性)

info_fieldname = \'LINE_COLOR\'.?設置特殊行顏色

(將LINE_COLOR增加到內表字段,寫\'CX10\'到特殊行的LINE_COLOR, X為顏色值)

colwidth_optimize = ‘X’.?優化列寬設置

no_colhead = \'X\'.?不顯示列名

no_vline = \'X\'.?不顯示列間豎線

zebra

f2code = \'&ETA\'.?設置觸發彈出詳細信息窗口的功能碼,這里是雙擊

no_vline?這個用來設置列間隔線

detail_popup?是否彈出詳細信息窗口

detail_titlebar?設置彈出窗口的標題欄

?

?

5、類型SLIS_T_EVENT常用參數說明

DATA: i_events TYPE slis_t_event WITH HEADER LINE.

事件:

it_events = i_events[]

i_callback_pf_status_set = \'PF_STATUS_SET\'

i_callback_user_command = \'USER_COMMAND\'

出口程序觸發事件對應子程序:

FORM PF_STATUS_SET USING rt_extab TYPE slis_t_extab.

FORM user_command USING ucomm LIKE sy-ucomm selfield TYPE slis_selfield.

ALV標準按鈕對應的函數功能碼如下:

?

功能代碼:?函數文本:?圖標名稱:

&ETA?細節?ICON_SELECT_DETAIL

&EB9?調用報告... ICON_TABLE_SETTINGS

&REFRESH?刷新?ICON_REFRESH

&ALL?全部選擇?ICON_SELECT_ALL

&SAL?取消全選?ICON_DESELECT_ALL

&OUP?按升序排列?ICON_SORT_UP

&ODN?按降序排列?ICON_SORT_DOWN

&ILT?設置過濾器?ICON_FILTER

&UMC?總計?ICON_SUM

&SUM?小計... ICON_INTERMEDIATE_SUM

&RNT_PREV?打印預覽?ICON_LAYOUT_CONTROL

&VEXCEL Microsoft Excel ICON_XLS

&AQW?字處理... ICON_WORD_PROCESSING

%PC?本地文件?... ICON_EXPORT

%SL?郵件收件人?ICON_MAIL

&ABC ABC?分析?ICON_ABC

&GRAPH?圖形?ICON_GRAPHICS

&OL0?更改布局... ICON_ALV_VARIANTS

&OAD?選擇格式... ICON_ALV_VARIANT_CHOOSE

&AVE?保存格式... ICON_ALV_VARIANT_SAVE

&INFO?信息?ICON_INFORMATION

?

6、結構LVC_S_FCAT參數說明(清單觀察器控制的字段目錄)

1.字段目錄?[Field catalog]

字段目錄是用來控制ALV顯示的網格中每個字段的屬性的,比如字段的順序,對齊方式,可編輯狀態,顏色,等等.

常用的控制字段如下:(下面的示例將說明這些字段的使用,參考STRUCTURE LVC_S_FCAT)

2 ROW_POS ALV?控制:?輸出行?(內部使用)? 

3 COL_POS ALV?控制:?輸出列 列的位置,第幾列,例如1,2,…..

4 FIELDNAME ALV?控制:?內部表字段的字段名稱 字段名稱

5 TABNAME LVC?標簽名稱 表名,如果是內表,是1

6 CURRENCY ALV?控制:?貨幣單位  

7 CFIELDNAME ALV?控制:?參考的當前單位的字段名稱  

8 QUANTITY ALV?控制:?計量單位  

9 QFIELDNAME ALV?控制:?參考計量單位的字段名稱  

10 IFIELDNAME ALV?控制:?內部表字段的字段名稱  

11 ROUND ALV?控制: ROUND?值  

12 EXPONENT ALV?控制:流動表示的指數  

13 KEY ALV?控制:?關鍵字段 關鍵字段,前面變藍色

14 KEY_SEL ALV?控制:?可以被隱藏的關鍵列 可以被隱藏的關鍵列

15 ICON ALV?控制:?作為圖標輸出 此列作為圖標輸出

16 SYMBOL ALV?控制:?輸出作為符號  

17 CHECKBOX ALV?控制:?作為復選框輸出 復選框輸出

18 JUST ALV?控制:?對齊 對齊方式:

\'R\': right justified

\'L\': left justified

\'C\': centered

19 LZERO ALV?控制:?輸出前導零?X\'

20 NO_SIGN ALV?控制:輸出抑制符號?X\',不輸出符號

21 NO_ZERO ALV?控制:?為輸出隱藏零?X\',隱藏0

22 NO_CONVEXT ALV?控制:?不考慮輸出的轉換退出  

23 EDIT_MASK ALV?控制:?為輸出編輯掩碼 格式

24 EMPHASIZE ALV?控制:?帶有顏色的高亮列 列的顏色

25 FIX_COLUMN ALV?控制:?固定列  

26 DO_SUM ALV?控制:?總計列值?X\',合計

ALV_GRID介紹二(2)

27 NO_SUM ALV?控制:?沒有總計列值?X\' ,沒有合計

28 NO_OUT ALV?控制:?列沒有輸出?X\' ,隱藏此列

29 TECH ALV?控制:?技術字段?X\'.也是隱藏,但是有點不一樣

30 OUTPUTLEN ALV?控制:?列的字符寬度 輸出的長度

31 CONVEXIT?轉換例程  

32 SELTEXT ALV?控制:?對話功能的列標識符  

33 TOOLTIP ALV?控制:?列抬頭的工具提示  

34 ROLLNAME ALV?控制: F1?幫助的數據元素  

35 DATATYPE ABAP?字典中的數據類型?ABAP?字典中的數據類型

36 INTTYPE ABAP?數據類型(C,D,N,...) ABAP?數據類型(C,D,N,...)

37 INTLEN?以字節計的內部長度 內容的長度

38 LOWERCASE?允許/不允許小寫字母?X\'?允許大小寫

39 REPTEXT?標題  

40 HIER_LEVEL ALV?控制:?內部使用  

41 REPREP ALV?控制:?價值是補充/補充接口的選擇標準 

42 DOMNAME?定義域名  

43 SP_GROUP?組代碼  

44 HOTSPOT ALV?控制:?單擊敏感?X\',下面出現下劃線,響應單擊

45 DFIELDNAME ALV?控制:?數據庫中列組的字段名稱  

46 COL_ID ALV?控制:?列?ID? 

47 F4AVAILABL?字段有輸入幫助嗎?X\'.此列有搜索幫助

48 AUTO_VALUE ALV?控制:?自動復制值  

49 CHECKTABLE?表名  

50 VALEXI?固定值存在  

51 WEB_FIELD ALV?控制:?內部表字段的字段名稱  

52 HREF_HNDL?自然數 熱點連接的句柄

53 STYLE ALV?控制:?樣式 下面有例子會介紹,比如PUSHBUTTION

54 STYLE2 ALV?控制:?樣式  

55 STYLE3 ALV?控制:?樣式  

56 STYLE4 ALV?控制:?樣式  

57 DRDN_HNDL?自然數 下拉的句柄

58 DRDN_FIELD ALV?控制:?內部表字段的字段名稱 下拉的字段

59 NO_MERGING?字符字段長度?1?相同的值不合并

60 H_FTYPE ALV?樹控制:?功能類型?(總計,平均,最大.最小, ...)? 

61 COL_OPT?可選列優化的條目  

62 NO_INIT_CH?字符字段長度?1? 

63 DRDN_ALIAS?字符字段長度?1? 

64 REF_FIELD ALV?控制:?內部表字段的參考字段名稱  

65 REF_TABLE ALV?控制:?內部表字段的參考表名稱  

66 TXT_FIELD ALV?控制:?內部表字段的字段名稱  

67 ROUNDFIELD ALV?控制:?帶有?ROUND?說明的字段名稱 

68 DECIMALS_O ALV?控制:?輸出小數位的編號  

69 DECMLFIELD ALV?控制:?帶有?DECIMALS?說明的字段名稱 

70 DD_OUTLEN ALV?控制:?輸出字符長度  

71 DECIMALS?小數點后的位數 設置小數的位數

72 COLTEXT ALV?控制:?列標題 列標題

73 SCRTEXT_L?長字段標簽  

74 SCRTEXT_M?中字段標簽  

75 SCRTEXT_S?短字段標簽  

76 COLDDICTXT ALV?控制:?確定?DDIC?文本參考 

77 SELDDICTXT ALV?控制:?確定?DDIC?文本參考 

78 TIPDDICTXT ALV?控制:?確定?DDIC?文本參考 

79 EDIT ALV?控制:?準備輸入 輸出狀態.\'X\'可輸入

80 TECH_COL ALV?控制:?內部使用  

81 TECH_FORM ALV?控制:?內部使用  

82 TECH_COMP ALV?控制:?內部使用  

83 HIER_CPOS ALV?控制:?層次列位置  

84 H_COL_KEY?樹控制:?列名稱/項目名稱  

85 H_SELECT?標識是否可以選擇樹控制中的列  

86 DD_ROLL?數據元素?(語義域)? 

87 DRAGDROPID ALV?控制:?拖&放處理拖放對象 

88 MAC?字符字段長度?1? 

89 INDX_FIELD?自然數  

90 INDX_CFIEL?自然數  

91 INDX_QFIEL?自然數  

92 INDX_IFIEL?自然數  

93 INDX_ROUND?自然數  

94 INDX_DECML?自然數  

95 GET_STYLE?字符字段長度?1? 

96 MARK?字符字段長度?1? 

?

7、結構LVC_S_LAYO參數說明(ALV?控制:?布局結構)

布局是用來控制整個ALV的一個布局,比如ALV的標題,是否可編輯,行顏色,列顏色。參照ALV的控制結構[LVC_S_LAYO],以后的例子我將詳細介紹如何設置行顏色和列顏色.

詳細的結構說明

字段名 描述?Value range

CWIDTH_OPT?最優化寬度?SPACE, \'X\'

SMALLTITLE?小標題,如果設置了這個字段,

則標題與列標題大小一樣?SPACE, \'X\'

GRID_TITLE?標題,在網格和工具條之間 最長70個字符

NO_HEADERS?如果被設置,列標題隱藏?SPACE, \'X\'

NO_HGRIDLN?隱藏水平線?SPACE, \'X\'

NO_MERGING?禁用單元格合并?SPACE, \'X\'

NO_ROWMARK?如果被設置,選擇列在選擇模式

為D和A的時候隱藏?SPACE, \'X\'

NO_TOOLBAR?隱藏工具條?SPACE, \'X\'

NO_VGRIDLN?隱藏垂直線?SPACE, \'X\'

SEL_MODE?選擇模式?SPACE, \'A\', \'B\', \'C\', \'D\'

EXCP_CONDS?合計例外?SPACE, \'X\'

EXCP_FNAME?字段名稱帶有例外編碼 最長30個字符

EXCP_LED?例外作為?LED SPACE, \'X\'

EXCP_ROLLN?例外文檔的數據元素?SPACE, \'X\'

CTAB_FNAME?帶有復雜單元格顏色編碼的字段名稱 最長30個字符

INFO_FNAME?帶有簡單行彩色代碼的字段名稱 最長30個字符

ZEBRA?可選行顏色,如果設置了,出現了間隔色帶?SPACE, \'X\'

NO_TOTLINE?沒有總計?SPACE, \'X\'

NUMC_TOTAL?可以對NUMC字段進行合計?SPACE, \'X\'

TOTALS_BEF?總計輸出在第一行,小計在新的值之前?SPACE, \'X\'

STYLEFNAME?設置單元格,比如PUSHBUTTON?最長30個字符

?

8、打印的參數控制請參考結構?[LVC_S_PRNT]

9、排序的參數控制請參考結構[LVC_S_SORT]

10、過濾的參數控制請參考結構[LVC_S_FILT]

?

11、'REUSE_ALV_GRID_DISPLAY'函數常用參數

CALL FUNCTION \'REUSE_ALV_GRID_DISPLAY\'

EXPORTING

i_interface_check = \'\'?接口一致性檢查

i_callback_program = sy-repid?當前程序名

is_layout = layout?輸出樣式

it_fieldcat = fieldcat[]?字段定義描述表

i_callback_pf_status_set = \'PF_STATUS_SET\'?觸發事件調用子程序

i_callback_user_command = \'USER_COMMAND\'?鼠標事件操作子程序

it_events = i_events[]?出口程序觸發事件

i_callback_html_top_of_page = \'ALV_TOP_OF_PAGE\' ALV輸出表頭設置

i_grid_settings = wl_lvc_s_glay?打印表頭設置

it_sort = sortable[]?排序設置

TABLES

t_outtab = ig_out

EXCEPTIONS

program_error = 1

OTHERS = 2.

?

?

12、'REUSE_ALV_LIST_DISPLAY'函數常用參數

?

?

13、方法"set_table_for_first_display"的參數說明

_BUFFER_ACTIVE?如果方法調用是靜態的,可以設置這個標記,這表示,如果每次顯示ALV都是

相同的字段目錄.既然這樣,那么字段目錄會被放到一個特殊的緩存里,

這樣加速了ALV的顯示

I_STRUCTURE_NAME?輸出數據參考的數據字典的結構名,例如\'SFLIGHT\'.如果指定了這個參數,字段

目錄會自動生成,下面的參數IT_FIELDCATALOG不需要傳值.

IS_VARIANT?決定布局顯示的變式

I_SAVE?決定用戶是否可以保存變式:

\'X\'?只能保存全局變式

\'U\'?只能保存特定變式

\'A\'?都可以保存

SPACE?不可以保存變式

I_DEFAULT?決定用戶是否可以定義默認的布局:

\'X\'?可以定義默認布局,這個參數是默認的

SPACE?不可以定義默認布局

IS_LAYOUT?布局參數,傳遞布局控制的一些信息

IS_PRINT?后臺打印屬性的參數

IT_SPECIAL_GROUPS?如果在字段目錄中,一些字段通過SP_GROUP被分組在一起.我們就必須為這些

組傳遞一個組的文本內表進去

IT_TOOLBAR_EXCLUDING?需要隱藏的標準的按鈕的內表

IT_HYPERLINK?為每個句柄分配了超連接的內表,LVC_S_HYPE中的HREF存放了超連接的地址,

HANDLE指定了句柄,使用這些句柄,你可以在GRID中使用超連接

IT_ALV_GRAPHICS?比較復雜,沒有用過,意思好象是可以在圖表中顯示ALV.

IT_OUTTAB?輸出數據存放的內表,數據都是存放在這個內表里

IT_FIELDCATALOG?字段目錄

IT_SORT?排序的標準

IT_FILTER?過濾的標準

?

14方法"REFRESH_TABLE_DISPLAY"的參數說明

IS_STABLE?刷新的穩定性,有2個參數,一個是行,一個是列.如果設置了相應的值,

那么對應的行,或者列,在刷新的時候,將會保持穩定,就是滾動條保持不動.

I_SOFT_REFRESH?這個參數只是在異常情況下被使用,如果設置了這個參數,任何創建的合計,

任何排序次序,任何為了顯示數據而設置的過濾都將保持不變.這個是非常

有意義的.例如:當然你沒有修改數據內表里的數據而想刷新ALV,僅僅只是

改變一下布局和字段目錄.

?

?

六、ALV常見問題

1、當為報表程序創建完TCODE后,如果新創建的報表程序沒有激活的話,即使在命令域中輸入了對應的TCODE,也無法導入到報表程序對應的運行界面,而應該先激活報表程序,這樣TCODE才能起作用

轉載于:https://www.cnblogs.com/xjm123/p/3568225.html

總結

以上是生活随笔為你收集整理的转 ABAP_ALV_Function方式与OO方式(较为简单、普通的ALV)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

色婷婷国产在线 | 国产一区二区三区视频在线 | 久久久久综合精品福利啪啪 | 久久精品看 | 最新久久免费视频 | 国产一卡久久电影永久 | 国产视频亚洲 | 国产成人精品亚洲日本在线观看 | 97看片吧 | 国产精品av电影 | 91人人网| 国产男女无遮挡猛进猛出在线观看 | 91久久久久久久一区二区 | 99免费在线播放99久久免费 | 色婷婷狠 | 国产在线无 | 狠狠操狠狠操 | 国产又粗又猛又黄又爽 | 欧美精品久久人人躁人人爽 | www色av| 日日夜夜噜 | 波多野结衣在线观看一区 | 成 人 黄 色 视频免费播放 | www.夜夜夜| 日韩精品中文字幕在线不卡尤物 | 久精品在线观看 | 综合激情| 亚洲精品动漫成人3d无尽在线 | 一区在线观看视频 | 国产精品男女视频 | 国产美女精品人人做人人爽 | 天天操网 | 日韩在线高清 | 国产一区视频免费在线观看 | 国产一区高清在线 | 国产一级片免费观看 | 国产精品免费久久久久久久久久中文 | 精品视频123区在线观看 | 三级av网站 | 国产 欧美 日产久久 | 在线观看久久久久久 | 天天操夜夜爱 | 中文字幕乱偷在线 | 国产99中文字幕 | 国产精品igao视频网网址 | 麻豆94tv免费版 | 国产护士av | 亚洲精品一区二区三区高潮 | 久久99热国产 | 91最新网址在线观看 | 久久黄色免费视频 | 国产精品久久久久久久久久99 | 97在线视频免费看 | 349k.cc看片app| 欧美色图视频一区 | 亚洲免费在线看 | 色资源在线观看 | 在线观看韩日电影免费 | 黄污在线观看 | 亚洲精品h | 日韩高清激情 | 中文字幕观看在线 | 二区三区在线视频 | 五月开心网| 久久精品成人热国产成 | 欧美孕妇与黑人孕交 | 日韩精品一区二区三区不卡 | 国产精品视频免费 | 天天干人人 | 久久这里有 | 久久狠狠婷婷 | 中文字幕在线观看完整版电影 | 黄a在线观看| 国产一级片免费播放 | 2018好看的中文在线观看 | 91男人影院 | 天天操天天干天天插 | 亚洲国产理论片 | 在线观看aaa | 日韩在线视频免费播放 | 91色综合| 日韩av资源在线观看 | av成年人电影 | 午夜久久影视 | 爱爱av在线 | 日韩免费精品 | 亚洲 欧洲 国产 精品 | 国产精品美女久久久久久久久久久 | 亚洲免费a| japanesexxx乱女另类| 97碰在线视频| 久久综合9988久久爱 | 天天干,天天射,天天操,天天摸 | 欧美午夜一区二区福利视频 | 亚洲视频精品 | 悠悠av资源片 | 亚洲美女视频网 | 国产一级片网站 | 国产精品永久 | 天天色天天| 亚洲二区精品 | 欧美日韩视频网站 | 国产经典 欧美精品 | 免费在线观看黄 | 欧美日韩精品在线免费观看 | 五月婷婷免费 | 精品国产黄色片 | 国产无限资源在线观看 | 国产美女主播精品一区二区三区 | 中文字幕亚洲欧美 | 国语黄色片 | 免费看久久 | 97天堂网| 国产成人精品在线 | 一区二区三区视频 | 久久综合精品国产一区二区三区 | 在线观看视频你懂的 | 少妇超碰在线 | 久久国产精品色av免费看 | 97超碰色偷偷| 二区视频在线 | 亚洲一区欧美精品 | 在线欧美小视频 | 美女av免费看 | 少妇bbbb搡bbbb搡bbbb | 国产精品久久久网站 | 色婷婷狠狠五月综合天色拍 | 亚洲伊人第一页 | 91视频这里只有精品 | 久久久精品免费观看 | 日本精品久久久久中文字幕5 | 91精品视频免费观看 | av丝袜在线 | 久久视频在线免费观看 | 久久久久免费网 | 精品国产一区二区三区蜜臀 | 五月婷婷色播 | 国产一级大片在线观看 | 久久久免费少妇 | 97国产超碰 | 亚洲精品五月 | 日韩精品影视 | 免费日韩在线 | 亚洲国产精品成人av | 亚洲高清精品在线 | 国产免费高清视频 | 久草在线在线精品观看 | jizz18欧美18| 国产四虎影院 | 久久精品久久99精品久久 | 日本爱爱片 | 亚洲精品玖玖玖av在线看 | 国产999精品视频 | 国内精品视频在线 | 亚洲精品福利在线 | 狠狠狠色丁香婷婷综合久久五月 | 国内精品久久久久久久久久 | 狠狠躁日日躁狂躁夜夜躁av | 在线观看av的网站 | 亚洲午夜久久久久久久久 | 亚洲成人蜜桃 | 国产97免费 | 日韩成人黄色 | 500部大龄熟乱视频使用方法 | 国产精品成人国产乱一区 | 国产精品久久久久永久免费观看 | 色噜噜狠狠狠狠色综合 | 久久亚洲综合国产精品99麻豆的功能介绍 | 国产亚洲成av片在线观看 | 亚洲成a人片77777kkkk1在线观看 | av丁香花| 骄小bbw搡bbbb揉bbbb | 99久久久久国产精品免费 | 天天色天天射天天操 | 丁香 久久 综合 | 国产99在线 | 97色免费视频 | 国产1区2 | 欧洲一区二区在线观看 | 久久精品国产第一区二区三区 | 亚洲区视频在线 | 日韩免费网站 | 国产免费视频在线 | 成av人电影 | 色综合久久中文字幕综合网 | 又长又大又黑又粗欧美 | 亚洲国产精品人久久电影 | 国产精品免费视频观看 | 日日爱视频 | 超碰97.com | 免费视频二区 | 91精品国产综合久久久久久久 | 婷婷久久一区 | av中文国产| 在线天堂日本 | 91九色视频在线播放 | 色诱亚洲精品久久久久久 | 国产v亚洲v| 国产二区视频在线 | 丁香九月激情 | 91av电影网| 黄色大片免费网站 | 亚洲免费在线看 | 丁香婷五月 | 99理论片 | 久久精品一区八戒影视 | 91久久久久久久一区二区 | 中文字幕资源站 | 日韩超碰 | 亚州av网站大全 | 深爱婷婷激情 | 最新日韩在线观看视频 | 五月婷婷中文字幕 | 99国产在线观看 | 久久精品国产一区二区电影 | 欧美色久| 天天干人人插 | 日韩视频免费播放 | 婷婷5月激情5月 | 免费视频一级片 | 日韩免费在线播放 | 久久国产品 | 最近中文字幕完整高清 | 青青河边草观看完整版高清 | 三级午夜片 | 高清中文字幕 | 国产一区网 | 深爱激情五月网 | 久久人人爽人人片av | 中文字幕免费一区二区 | 国产精品日韩高清 | 久久在线影院 | 日本久久不卡视频 | 亚洲国产精品视频 | 99免费视频 | 中文字幕资源在线 | 草久久av | 久久99久久久久 | 欧美日韩不卡在线视频 | 久久这里有 | 一区二区精品在线视频 | 99re亚洲国产精品 | 激情中文字幕 | 特级毛片在线观看 | 中文字幕在线一区二区三区 | 九九综合久久 | 国产一级片免费观看 | 91在线精品播放 | 精品久久久久久亚洲综合网站 | www.色婷婷 | 久久视频精品在线观看 | 久久综合狠狠综合久久激情 | 亚洲成人软件 | 97香蕉视频| 久热久草 | 五月天综合激情网 | 国产亚洲久一区二区 | 最新色视频 | 天堂av高清| 国产69久久精品成人看 | 精品高清美女精品国产区 | 国产精品女同一区二区三区久久夜 | 久草精品在线观看 | 久久久久久久久久久久av | 中文字幕第一页av | 亚洲视频在线看 | 精品一二区 | 久久精品视频国产 | 在线看黄色的网站 | 亚洲人成在线电影 | 综合精品在线 | 婷婷丁香激情综合 | 久草精品电影 | 久久夜夜爽 | 国产在线第三页 | 久久精品视频在线播放 | 国产91精品一区二区麻豆网站 | 久久99国产精品二区护士 | 久久国产福利 | 成人黄色国产 | 免费av在线播放 | 中文区中文字幕免费看 | 欧美日韩一区二区三区在线免费观看 | 日韩一级成人av | 99久久99视频只有精品 | 国产 日韩 欧美 自拍 | 91人人揉日日捏人人看 | 亚洲精品资源 | 日韩高清黄色 | 久久免费a | 午夜精品一区二区三区免费视频 | 麻豆传媒视频在线 | 探花视频在线版播放免费观看 | 91热这里只有精品 | 亚洲激情五月 | 国产美女搞久久 | 免费精品国产va自在自线 | 国产福利中文字幕 | 色在线视频网 | 亚洲狠狠操 | 97国产大学生情侣酒店的特点 | 成人av影视在线 | 亚洲观看黄色网 | 久久99热精品 | 手机av在线免费观看 | 999成人| 国产精品18毛片一区二区 | 精品一区二区亚洲 | 99久久精品久久亚洲精品 | 九九九在线观看视频 | 久久久2o19精品 | av解说在线 | 国产又粗又猛又色又黄网站 | 日本黄色大片免费看 | 亚洲精品 在线视频 | 国产精品一区二区麻豆 | 中文字幕免费 | 国产精品 视频 | 国产精品久久婷婷六月丁香 | 激情婷婷久久 | 一级性生活片 | www国产一区 | 九九热视频在线免费观看 | 日韩精品久久久久久久电影99爱 | 久草在线播放视频 | 国产精品一区二区美女视频免费看 | 美女视频黄免费 | 在线看片中文字幕 | 国产黄色片网站 | 国产视频第二页 | 日韩av中文字幕在线免费观看 | 91成人在线看 | 不卡的av在线播放 | 免费黄色网址网站 | 99精品久久久久久久久久综合 | 9幺看片 | 肉色欧美久久久久久久免费看 | 国产很黄很色的视频 | 中文字幕在线观看资源 | 成人一区二区三区在线 | 日韩一二三区不卡 | 国产高清在线一区 | 一本一道久久a久久精品 | 日韩av在线不卡 | 欧美一区二区三区免费看 | 日韩欧美在线观看一区二区 | 美女精品久久久 | 18国产精品福利片久久婷 | 91精品视频免费在线观看 | 免费欧美精品 | 欧美日韩二三区 | 日韩av一区二区在线播放 | 亚洲成人软件 | 成人9ⅰ免费影视网站 | 成人小视频在线播放 | 精品视频久久 | 在线免费观看涩涩 | 婷婷六月丁香激情 | 97超碰免费 | 韩日三级在线 | 久久精品国产一区二区三区 | 福利片免费看 | 久久精品成人欧美大片古装 | 麻豆视频免费 | 丁香婷婷基地 | 国产福利a | 大荫蒂欧美视频另类xxxx | 国产无遮挡又黄又爽馒头漫画 | 久久国产美女 | 在线观av | 午夜国产在线观看 | 久久免费视频4 | 国产中的精品av小宝探花 | 国产精品丝袜久久久久久久不卡 | 国产免费久久av | 亚州精品在线视频 | 欧美精彩视频在线观看 | 99999精品视频| 成年人免费在线观看 | 国产精品久久电影观看 | 亚洲欧美成人网 | 狠狠色综合网站久久久久久久 | 在线中文字幕播放 | 日韩精品久久久免费观看夜色 | 天天操天天玩 | 亚洲区另类春色综合小说 | 亚洲精品456在线播放乱码 | 97免费中文视频在线观看 | 日韩av不卡播放 | 欧洲一区二区在线观看 | 日本大尺码专区mv | 久久国产精品免费一区 | 99爱爱| 中文字幕影视 | 91传媒91久久久 | 欧美淫aaa免费观看 日韩激情免费视频 | 欧美激情奇米色 | 99精品免费| 国产96在线 | av电影免费在线看 | 麻豆一区在线观看 | 国产原厂视频在线观看 | 国产v在线观看 | 大胆欧美gogo免费视频一二区 | 新av在线 | 国产色视频一区二区三区qq号 | 99热九九这里只有精品10 | 天海冀一区二区三区 | 日韩av偷拍 | 国产一级在线免费观看 | 国产精品热 | 天天看天天干 | 成人a级网站 | 99草视频 | 久久久久国产精品免费 | 黄色一级影院 | 国产白浆在线观看 | 国产精品wwwwww | 国产亚洲精品久久久久久大师 | 99热网站 | 久久综合久久综合这里只有精品 | 免费看一级 | 国产精品高清在线 | 国产视频中文字幕 | 亚洲综合视频在线 | 九九热视频在线 | 日日爽天天爽 | 在线免费高清一区二区三区 | 精品久久久久久国产91 | 狠狠干,狠狠操 | 69国产盗摄一区二区三区五区 | 在线看的av网站 | 亚洲综合色激情五月 | 国产福利小视频在线 | 国产99久久久国产精品免费二区 | 免费又黄又爽视频 | 欧美国产亚洲精品久久久8v | 国产视频欧美视频 | 欧美日韩另类视频 | 国产99中文字幕 | 国产视频中文字幕 | 久草免费电影 | a'aaa级片在线观看 | 亚洲成av人片在线观看香蕉 | 91精品久久久久久久久久久久久 | 亚洲一级黄色大片 | 免费在线观看a v | 激情九九 | 欧美最猛性xxxxx免费 | 久久久午夜电影 | 人人干免费 | 7799av| 国产精品高清在线 | 免费黄在线观看 | 91精品在线播放 | 99视频国产精品 | 国产福利91精品一区二区三区 | 久操视频在线免费看 | 中文字幕 国产 一区 | 精品国产一区二区三区四区vr | 一区二区三区四区不卡 | 国产亚洲精品久久久久久网站 | 国产精品免费久久久久久久久久中文 | 日日夜夜天天综合 | 在线av资源 | 免费成视频 | 天天干国产 | 国内99视频 | 久久电影色 | 四虎小视频 | 国产精品久久久久久一二三四五 | 人人爱夜夜操 | 亚洲色视频 | 国产三级av在线 | 一本一道久久a久久精品蜜桃 | www.99热精品 | 国产精品久久久久av免费 | 欧美在线18| av电影 一区二区 | 久久国产精品一区二区三区 | 天天曰视频| 97国产大学生情侣酒店的特点 | 在线观看日韩精品视频 | 高清视频一区二区三区 | 色九九在线 | 免费成人短视频 | 五月天天av | www.91国产 | 日韩有码专区 | 精品99在线视频 | 久久伦理视频 | 亚洲天堂网站视频 | 国内精品视频一区二区三区八戒 | 久久经典视频 | 国产原创中文在线 | 欧美尹人 | www.五月激情.com | www.玖玖玖 | av官网在线| 九九国产精品视频 | 五月天激情视频 | 久久国产美女视频 | 91中文在线视频 | 中文字幕乱码电影 | 国产91精品看黄网站在线观看动漫 | 久久久性| 日韩在线观看免费 | 在线观看精品黄av片免费 | 亚洲年轻女教师毛茸茸 | 91视频国产免费 | 色网站国产精品 | 日韩三级视频在线观看 | 奇米影视999 | www.国产高清 | 五月天高清欧美mv | 激情综合五月婷婷 | 2022中文字幕在线观看 | 久久久久国产精品一区 | 91精品视频免费看 | 国产一区二区在线免费播放 | 成人av在线资源 | 男女靠逼app| 日韩高清精品免费观看 | 色先锋资源网 | 在线亚洲欧美视频 | 天天操夜夜操国产精品 | 婷婷丁香狠狠爱 | 成人亚洲精品久久久久 | 国产精品久久在线 | 五月婷婷av在线 | 精品成人网 | 欧美国产日韩在线视频 | 欧美资源 | 久草网视频在线观看 | 久久久久亚洲精品成人网小说 | 国产成人精品免费在线观看 | 91成人蝌蚪| 三级av黄色 | 中文字幕韩在线第一页 | 久久夜色精品国产欧美一区麻豆 | 久久99精品一区二区三区三区 | 波多野结衣一区二区三区中文字幕 | 五月天av在线 | 久久久黄色免费网站 | 9999在线视频 | 国产一级片播放 | 日韩高清三区 | 久久兔费看a级 | 不卡的av | 久久a v视频| 国产91综合一区在线观看 | 亚洲涩综合 | 午夜精品在线看 | 国产精品色视频 | 在线观看片 | 亚洲日日日 | 国产69熟| 日韩av片在线 | 18久久久久久 | 天天操夜夜干 | 国产一区av在线 | 国产青青青 | av黄色av| av在线官网 | 免费三级黄 | 一级特黄av | 人人爽人人澡 | 国产精品综合在线观看 | 久久午夜免费视频 | 国产免费观看高清完整版 | 日韩免费三区 | 国产一区二区久久精品 | 69av免费视频| 精品在线视频观看 | 99久久久久成人国产免费 | 天天射天天射天天射 | 国产精品入口传媒 | 亚洲午夜精品福利 | 免费高清在线视频一区· | av成人免费在线看 | 国产色视频网站2 | 四虎在线免费观看视频 | 日韩资源在线播放 | 久久天天操 | 美女精品网站 | 92av视频| 国产精品久久综合 | 久久人人97超碰精品888 | 好看av在线 | 成人在线一区二区三区 | 黄色av网站在线免费观看 | 天天综合网~永久入口 | 操操操av | 四虎国产视频 | 在线观看中文字幕一区 | 成人午夜精品久久久久久久3d | 久久精品波多野结衣 | 国产亚洲精品成人av久久影院 | 久久精品美女 | 亚洲女在线 | 日本公妇在线观看 | 最近日本中文字幕a | 婷婷性综合 | 91看片在线免费观看 | 成人a毛片 | 91视视频在线直接观看在线看网页在线看 | 欧美视频在线观看免费网址 | 国产精品视频app | 久久99精品久久久久久清纯直播 | 999视频在线观看 | 久久视频免费在线观看 | 午夜美女wwww | 欧美经典久久 | www.久久色| 亚洲精品视频免费观看 | 免费精品国产 | 久久99热精品这里久久精品 | 99久久婷婷国产一区二区三区 | 毛片网站免费 | 91大神电影| 丁香婷婷激情国产高清秒播 | 不卡的av | 黄色a大片 | 亚洲三级网| 欧美另类成人 | 麻豆av一区二区三区在线观看 | 久久九九影院 | 亚洲九九九在线观看 | 一区二区不卡高清 | 青青草久草在线 | 在线成人一区 | 人人爱爱人人 | 午夜色站| 国产麻豆精品久久 | 精品一二三四五区 | 日韩性久久 | 99久热在线精品视频成人一区 | 91福利试看 | 精品国产一区二区三区蜜臀 | 色黄www小说 | 91麻豆视频 | 日韩久久精品一区二区 | 亚洲视频精品在线 | 精品国产黄色片 | 久久69精品久久久久久久电影好 | 日韩在线一级 | 九九综合久久 | 日韩在线高清 | 天天夜夜亚洲 | av成人免费观看 | 久精品一区 | 91精品国| 最新中文字幕在线资源 | a√天堂中文在线 | 激情在线网址 | 91重口视频 | 成 人 黄 色 视频 免费观看 | 亚洲最新av在线网址 | 超碰免费成人 | 人人人爽 | 欧美日韩国产精品一区 | 精品你懂的 | 人人爽人人乐 | 日韩免费三级 | 久久久久久久久久久久久久电影 | 96av在线视频 | 中文字幕 婷婷 | 色五月成人 | 久久国产精品精品国产色婷婷 | 黄色毛片观看 | 在线观看成年人 | 国产成人精品亚洲a | 国产精品毛片一区 | 久久久91精品国产一区二区精品 | 久久免费av电影 | 中文字幕欧美日韩va免费视频 | 免费视频 你懂的 | 国产一区二区三区视频在线 | www.91国产 | 免费观看的黄色片 | 人人爽人人看 | 在线免费观看羞羞视频 | 日韩色在线观看 | 国产精品成人久久 | 国产黄色片免费在线观看 | 怡红院av| 欧美最猛性xxx | 国产视频久久久 | 视频一区二区三区视频 | 亚洲精品久久久久58 | 国产精品免费不 | 日本99精品 | av高清免费在线 | 国产区在线看 | 欧美日韩xxx | av免费看看 | 日日日操 | 天天干.com | 美女久久久久久久久久 | 中文字幕国产一区二区 | 青草视频在线 | 国产成人av一区二区三区在线观看 | 在线91色| 免费观看的av网站 | 久一网站 | 色婷婷亚洲综合 | 伊人av综合 | 91视频88av| 日韩精品一区二区免费视频 | 超碰在线97国产 | 午夜精品久久久久久久99婷婷 | 久久噜噜少妇网站 | 麻豆免费视频网站 | 亚洲欧美经典 | 99视频在线观看视频 | 手机av观看| 夜夜操狠狠操 | 中文字幕av免费 | 一区二区三区久久 | 91福利试看 | 中国一级片免费看 | 久久久久亚洲a | 国产精品18久久久久久久久久久久 | 91传媒免费观看 | 日韩成人在线免费观看 | 国产精品国产亚洲精品看不卡 | 99亚洲天堂 | x99av成人免费 | 99国产精品久久久久久久久久 | 欧美91精品国产自产 | 国产视频美女 | 久久精品亚洲一区二区三区观看模式 | 一区二区精品久久 | 精品视频在线观看 | 欧美性受极品xxxx喷水 | 欧亚日韩精品一区二区在线 | 久久中文字幕视频 | 久久tv| 69久久久久久久 | 久久99精品国产99久久 | 亚洲色图激情文学 | 国产丝袜一区二区三区 | 综合精品久久 | 中文视频一区二区 | 久久精品视频在线观看 | 成人一级 | 国产精品久久久久久久午夜 | 中日韩免费视频 | 91精品国产综合久久婷婷香蕉 | 亚洲第一伊人 | 91精品在线播放 | 成人一级免费视频 | 久久精品理论 | 免费婷婷 | 免费观看www7722午夜电影 | 成人av亚洲| 久久艹欧美 | 国产亚洲成av人片在线观看桃 | 人人舔人人射 | 24小时日本在线www免费的 | 97视频久久久 | 久久99精品国产91久久来源 | 免费av在| 天天曰夜夜爽 | 96av麻豆蜜桃一区二区 | a天堂免费| 亚洲精品小视频 | 免费精品在线观看 | 亚洲精品玖玖玖av在线看 | 人人干在线观看 | 久久综合狠狠综合 | 91成人在线视频观看 | 婷婷色资源 | 欧美日韩国产一区二 | 国产精品久久99综合免费观看尤物 | 天天操夜夜拍 | 国产精品美女久久久久久久久 | 视频国产在线 | 亚洲激情在线观看 | 最新的av网站 | 成全免费观看视频 | 日韩高清二区 | 欧美 日韩精品 | 丁香婷婷色综合亚洲电影 | 国产高清亚洲 | 欧美精品乱码99久久影院 | 激情中文字幕 | 麻花传媒mv免费观看 | 久久久久亚洲精品男人的天堂 | 91精品小视频 | 不卡中文字幕av | 国产流白浆高潮在线观看 | 久久国产精品第一页 | 成年人网站免费在线观看 | 中文国产成人精品久久一 | 国产在线观看你懂得 | 国产一区二区三区 在线 | 91精品国自产在线观看欧美 | 在线综合 亚洲 欧美在线视频 | 亚洲国产wwwccc36天堂 | 黄色av大片 | 亚洲欧美日韩国产一区二区三区 | 久久综合五月天婷婷伊人 | 中文字幕频道 | 九九视频这里只有精品 | 天天综合成人网 | 91精品国产综合久久福利 | 久久视频这里只有精品 | 亚洲午夜精品福利 | 日韩免费播放 | 久久久资源 | 亚洲黄色成人 | 久久久999精品视频 国产美女免费观看 | 久草电影在线观看 | 免费久久网站 | 久久久久久片 | 天天狠狠操 | 成人国产精品av | 99视频99 | 九九久久久久久久久激情 | 福利在线看片 | 久久电影网站中文字幕 | 日本天天色 | 亚洲干| 成人免费观看视频大全 | 欧美成人精品三级在线观看播放 | 色狠狠综合天天综合综合 | 久久精品www人人爽人人 | www.91国产 | 最新日韩在线观看视频 | 91福利视频久久久久 | 高清视频一区二区三区 | 国产午夜精品在线 | 99热在线观看 | 久久久久综合视频 | 国产日产在线观看 | 一本到在线 | 五月婷婷丁香综合 | 国产欧美精品一区二区三区 | 天天操综合| 欧美成人精品欧美一级乱黄 | 久久久久99999 | 欧美精品一级视频 | 精品国产成人在线影院 | 国产人免费人成免费视频 | 性色xxxxhd | 亚洲电影av在线 | 免费看的黄色片 | 国产视频综合在线 | 色综合久久综合中文综合网 | 国产精品麻豆欧美日韩ww | 黄色网址中文字幕 | 国产精品视频全国免费观看 | 欧美在线日韩在线 | 午夜av免费看 | 久久久久国产精品免费免费搜索 | 中文字幕在线观看网站 | 免费在线黄 | 中文字幕在线视频一区 | 狠狠干网站 | 久久综合久久久久88 | 在线看v片 | 欧美a在线看 | 亚洲一区二区视频 | 超级av在线| 国产在线观看午夜 | www.夜夜爱 | 91黄色在线视频 | 日韩精品久久久久久久电影竹菊 | 99热国产在线中文 | 久久免费视频一区 | 婷婷激情网站 | 久久日韩精品 | 91亚州| 国产黄在线看 | 久久精品中文字幕少妇 | 在线观看视频色 | 国产精品免费一区二区三区在线观看 | 波多野结衣精品视频 | 欧美另类高潮 | 91在线中字 | 日韩视频精品在线 | 日韩一二区在线观看 | av在线最新| 亚洲一二三久久 | 国产精品久久在线 | 日日夜夜综合网 | 亚洲精品乱码久久久一二三 | 久草免费电影 | 久久99深爱久久99精品 | 在线免费黄色片 | 久久久影视 | 久久极品 | 丁香国产视频 | 亚洲黄a| 91精品成人 | 中文字幕观看视频 | 91在线观看欧美日韩 | 久草免费在线观看视频 | 在线激情av电影 | 免费在线观看污 | 波多野结衣综合网 | 日韩精品一卡 | 国产成人一区二区精品非洲 | 久久亚洲婷婷 | 免费黄a| 精品产品国产在线不卡 | 91久久国产精品 | av网站免费线看精品 | 国内精品久久久久影院一蜜桃 | 亚洲91av| 欧美一区二区三区四区夜夜大片 | 在线播放日韩av | 精品国产一区二区三区四区在线观看 | 顶级bbw搡bbbb搡bbbb | 看全黄大色黄大片 | 久久久久久久久久久网 | 久久av一区二区三区亚洲 | 日本电影黄色 | 精品在线视频一区 | 在线免费色 | 特级西西人体444是什么意思 | 一级黄色电影网站 | 日本三级香港三级人妇99 | 国产手机在线 | 国产精品网址在线观看 | 999久久久久久久久 69av视频在线观看 | 亚洲闷骚少妇在线观看网站 | 成人福利在线播放 | 就操操久久 | 国产综合精品一区二区三区 | 国产精品久久视频 | 激情综合站 | 国产大陆亚洲精品国产 | 九九视频免费观看视频精品 | 麻花豆传媒mv在线观看网站 | av在线网站大全 | 婷婷播播网| 热久久免费国产视频 | 欧美在线一级片 | 91高清免费| 中文字幕av全部资源www中文字幕在线观看 | 天海翼一区二区三区免费 | 国产精品入口麻豆 | 一级片视频免费观看 | 亚洲视频在线视频 | 亚洲在线a | 久久精品国产v日韩v亚洲 | 国产91精品一区二区绿帽 | 五月天视频网 | 成年人网站免费观看 | 国产主播大尺度精品福利免费 | 中文字幕在线专区 | 亚洲va在线va天堂va偷拍 | 国产色啪 | 4p变态网欧美系列 | 久久极品 | 国产一区二区三区午夜 | 在线观看一 | 麻豆视频免费 | 人人爽爽人人 | 在线观看日韩中文字幕 | 一级片黄色片网站 | 天天干天天干天天干天天干天天干天天干 | 在线观看中文字幕dvd播放 | 色婷婷九月| 国产精品自产拍在线观看网站 | 国产黄色片在线 | 久久调教视频 | 色在线视频 | 激情五月六月婷婷 | 99在线免费视频 | 毛片1000部免费看 | 九九热re | 成人在线一区二区 | 国产自偷自拍 | 国精产品999国精产 久久久久 | 国产18精品乱码免费看 | 日韩精品极品视频 | 日韩av在线免费看 | 成人黄色短片 | av免费看电影 | 国产精品久久久久久99 | 国产精品中文字幕在线观看 | 国产亚洲精品综合一区91 | 久久r精品| 99精品国产福利在线观看免费 | 又污又黄的网站 | 中文字幕资源在线观看 | 国产高清第一页 | 亚洲国产精品久久久久 | 日韩久久精品一区二区三区 | 色综合久久中文综合久久牛 | 激情视频久久 | 97超碰免费 | 美女在线观看av | 久久免费国产电影 | 美女免费视频观看网站 |