ALV簡介和Fieldcat與Layout相關參數屬性


ALV簡介和Fieldcat與Layout相關參數屬性

1.ALV簡介

2.ALV報表開發的相關參數及屬性

3.Layout的相關屬性

4.Fieldcat的相關屬性

5.調用ALV輸出函數

 

1.ALV簡介

ALV(SAP List Viewer) 是SAP常用的屏幕顯示列表控件對象,通過傳遞數據內表方式顯示數據;

ALV顯示格式分為Grid 和 List兩種模式:

Grid模式有欄位選擇按鈕功能,允許用戶直接輸出格式,操作更為靈活;

List 模式則固定格式,應用於較嚴格的標准報表。


 

Grid Mode:

alv_grid_mode

alv_grid_mode

 

List Mode:

alv_list_mode

alv_list_mode

 

輸出ALV的 Function有兩個:REUSE_ALV_GRID_DISPLAYREUSE_ALV_GRID_DISPLAY_LVC

兩個函數都可以將數據用ALV的形式顯示出來,只是一些小部分有所不同。

 

2.ALV報表開發的相關參數及屬性

2.1 在調用 ALV 函數前,需要引入一個類型池:SLIS

2.2 Layout和Fieldcat的定義

Layout 主要用於設定 ALV 的輸出格式,為 ALV 輸出的可選項

Fieldcat 主要用於ALV的結構定義,包括具體的欄位及名稱、類型、格式等屬性,為 ALV 輸出的必選項

在調用ALV之前,需要先定義Layout 和Fieldcat,他們同屬於類型池 SLIS

其中,對於兩個ALV函數用到的全局變量定義有所區別:

1) REUSE_ALV_GRID_DISPLAY 函數用到的全局變量:

DATA: 
   
    wa_fieldcat TYPE slis_fieldcat_alv ,    " 相當於工作區

    i_fieldcat  TYPE slis_t_fieldcat_alv ,  " 存放輸出欄位名稱的列表

    i_layout    TYPE slis_layout_alv .      " 負責整個ALV的全局屬性

 

2) REUSE_ALV_GRID_DISPLAY_LVC函數用到的全局變量:

DATA: 

     wa_fieldcat TYPE lvc_s_fcat ,  " 相當於工作區

     i_fieldcat  TYPE lvc_t_fcat ,  " 存放輸出欄位名稱的列表

     i_layout    TYPE lvc_s_layo .  " 負責整個ALV的全局屬性

 

可以看出:

REUSE_ALV_GRID_DISPLAY 的Layout 類型為 slis_layout_alv, Fieldcat 的類型為 slis_fieldcat_alv

REUSE_ALV_GRID_DISPLAY_LVC 的Layout 類型為 lvc_s_layo, Fieldcat 的類型為 lvc_s_fcat

其中,對於‘SLIS_’開頭的,可以在類型池 SLIS 中查看,‘LVC_’開頭的可以在數據字典(SE11)中查看。

 

SLIS 類型池中 slis_layout_alv 的定義:

slis_layout_alv

slis_layout_alv

SE11中,lvc_s_layo的定義:

lvc_s_layo

lvc_s_layo

 

3 Layout的相關屬性

3.1 slis_fieldcat_alv 常用具體字段欄位如下:

1) 公共部分

字段名稱 描述 輸入值 備注
no_colhead(1) 不顯示標題 X-不顯示,space-顯示  
no_hotspot(1) 標題不設熱點 X-沒有,space-有  
zebra(1) 使ALV表格按斑馬線間隔條碼方式顯示 X-有,space-沒有  
no_vline(1) 設置列間豎線 X-不顯示,space-顯示  
no_hline(1) 設置行間隔線 X-不顯示,space-顯示  
cell_merge(1) 設置是否壓域復制 X-可復制,space-不可復制  
edit(1) 設置所有單元格可編輯 X-可編輯,space-不可編輯  
edit_mode(1) 編輯模式    
numc_sum(1) 設置僅NUMC類型字段進行總計 X-僅Numc類型,

space-不僅Numc類型

 
no_input(1) 不允許輸入,用於顯示狀態 X-不允許,space-允許  
f2code 設置觸發彈出詳細信息窗口的功能碼 sy-ucomm ‘&ETA’ – 雙擊
no_keyfix (1) 關鍵字不固定,可以隨滾動條滾動 X-不固定,space-固定  
expand_all (1) 展開所有的node   對hierarchy ALV函數而言
no_author (1) 設置是否需要系統標准權限檢查 X-不需要,space-需要  

 

2) ALV菜單欄

字段名稱 描述 輸入值 備注
def_status (1) 默認菜單狀態 A顯示,space不顯示 ‘A’ – 為顯示所有標准菜單
item_text (20) 菜單按鈕文本    
countfname (1)   lvc_fname  

 

3) 顯示選項

字段名稱 描述 輸入值 備注
colwidth_optimize(1) 優化列寬設置 X-優化 默認:space
no_min_linesize(1) 設置不允許最小寬度 X-不允許,space-允許 默認:space
min_linesize ALV列表的最小寬度 sy-linsz,取值10到250 可選參數
max_linesize ALV列表的最大寬度 sy-linsz,可取值80-1020 默認值250
window_titlebar 窗口標題 sy-title  
no_uline_hs(1) 輸出ALV表不顯示水平格線 X-不顯示,space-顯示  

 

4) 紅綠燈顯示異常

字段名稱 描述 輸入值 備注
lights_fieldname 輸出內表中定義的字段名,該字段用來顯示狀態燈 1:red,2:yellow,3:green  
lights_tabname 輸出字段的參考內表名稱    
lights_rollname 數據元素的名稱,在燈字段按F1觸發    
lights_condense 對輸出的內表分類匯總的時候,小計行顯示狀態燈 X  

 

5) 匯總合計

字段名稱 描述 輸入值 備注
no_sumchoice (1) 不能進行選擇總計    
no_totalline (1) 不能總計,但可以小計    
no_subchoice (1) 不能選擇小計,但可以總計    
no_subtotals (1) 不能小計,但可以總計    
no_unit_splitting 有單位字段,不進行總計    
totals_before_items 總行將會顯示在最前面    
totals_only (1) 僅顯示合計    
totals_text (60) 合計,第一列顯示的文本    
subtotals_text (60) 總計和小計行,第一列顯示的文本    

 

6) 交互

字段名稱 描述 輸入值 備注
box_fieldname 設置ALV表格是否顯示選擇按鈕欄位    
box_tabname box_fieldname 參考內表名稱    
box_rollname 下拉框按鈕名稱    
expand_fieldname ’展開’字段名稱    
hotspot_fieldname 熱點字段    
confirmation_prompt 退出ALV列表的確認對話框    
key_hotspot (1) 關鍵字段作為熱點    
flexible_key (1) 關鍵字段可以移動    
group_buttons (1) COL1 – COL5 按鈕組    
get_selinfos (1) 獲取選擇屏幕    
group_change_edit (1) 設置用戶新的按鈕組    
no_scrolling(1) 滾動條無效,清單不隨其滾動   僅list_alv有效

 

7) 明細窗口

字段名稱 描述 輸入值 備注
detail_popup (1) 行項目明細彈窗形式 X-顯示,space-不顯示 對list_alv有效
detail_initial_lines(1) 明細中同時顯示初始化行 X-同時顯示,space-不顯示  
detail_titlebar 明細窗口標題文本 sy-title  

 

8) 顯示變式

字段名稱 描述 輸入值 備注
header_text 表頭按鈕    
default_item (1) 列表明細作為默認值 X-激活,space-不激活  

 

9) 顏色

字段名稱 描述 輸入值 備注
info_fieldname 用於設置ALV輸出報表每一行的顏色,

其參數為輸出內表的欄位名稱

C000~C999 倘若其數據輸出內表名為LT_OUT,則需要在改內表增加一個欄位“COLOR”,並為內表每行賦值,

LT_OUT-COLOR = ‘C500’

coltab_fieldname 顏色值    

 

10) 其他

字段名稱 描述 輸入值 備注
list_append 設置是否Call屏幕    
xifunckey eXtended interaction(SAPQuery)    
xidirect eXtended INTeraction(SAPQuery)    
dtc_layout 設置Tabstip的布局格式配置 DTC_S_LAYO  
allow_switch_to_list 設置從Grid模式轉換為List模式    

 

3.2 lvc_s_layo常用具體字段欄位如下:

1) 布局控制(ALV_S_LAYO)

字段名稱 描述 輸入值 備注
ZEBRA(1) 使ALV表格按斑馬線間隔條碼方式顯示 X-有,space-沒有  
EDIT(1) 准備編輯 X-可編輯,space-不可編輯  
EDIT_MODE(1) 編輯模式    
NO_KEYFIX(1) 關鍵字不固定,可以隨滾動條滾動 X-不固定,space-固定  
FRONTEND(1)      
LANGUAGE 語言標識符 LANG  
SMALLTITLE(1) 標題大小    
NO_HGRIDLN(1) 是否隱藏水平網格線 X-不顯示,space-顯示  
NO_VGRIDLN(1) 是否隱藏垂直網格線 X-不顯示,space-顯示  
NO_HEADERS(1) 隱藏列抬頭 X-不顯示,space-顯示  
NO_MERGING(1) 禁用單元格合並    
CWIDTH_OPT(1) 自動優化列寬 X-優化,space-不自動優化  
TOTALS_BEF(1) 在個別記錄前總計輸出    
NO_TOTARR(1) 匯總行前顯示箭頭表示匯總    
NO_TOTEXP(1) 只顯示小計,不顯示總計    
NO_F4(1) 屏蔽F4搜索幫助    
COUNTFNAME 內部表字段的字段名稱 LVC_FNAME  

 

2) 一般顯示選項(LVC_S_L001)

字段名稱 描述 輸入值 備注
STYLEFNAME 用來傳輸格表,以便把各顯示為按鈕 LVC_FNAME  

 

3) 網格定制(LVC_S_L002)

字段名稱 描述 輸入值 備注
NO_ROWMARK 禁用行選擇    
NO_TOOLBAR 隱藏工具欄    
GRID_TITLE 標題欄文本    
SEL_MODE(1) 選擇模式 A-選擇按鈕,space-空白 “A”在最左端有選擇按鈕
BOX_FNAME 內部表字段的字段名稱    
SGL_CLK_HD 第一次點擊列的頭的時候升序排列,

第二次點擊的時候降序排列

   

 

4) 總計選項(LVC_S_L003)

字段名稱 描述 輸入值 備注
NO_TOTLINE(1) 不輸出總計行 X-不輸出,space-輸出  
NUMC_TOTAL(1) 禁止 NUMC 字段總計 X-禁止,space-不禁止  
NO_UTSPLIT(1) 按單元拆分總計行 X-不拆分,space-拆分  

 

5) 例外(LVC_S_L004)

字段名稱 描述 輸入值 備注
EXCP_FNAME Field name with exception coding    
EXCP_ROLLN Data element for exception documentation    
EXCP_CONDS(1) Aggregate exceptions    
EXCP_LED(1) Exception as LED    
EXCP_GROUP(1) Exception Group    

 

6) 交互控制(LVC_S_L005)

字段名稱 描述 輸入值 備注
DETAILINIT 在細節屏幕顯示初始值    
DETAILTITL 細節屏幕的標題欄    
KEYHOT 關鍵列作為熱點    
NO_AUTHOR 不執行 ALV 標准授權檢查    
XIFUNCKEY 附加功能名    
XIDIRECT 一般標記    
       

 

7) 拖&放控制設置(LVC_S_DD01)

字段名稱 描述 輸入值 備注
S_DRAGDROP 拖&放控制設置結構 LVC_S_DD01  

 

8) 顏色(LVC_S_L006)

字段名稱 描述 輸入值 備注
INFO_FNAME 帶有簡單行彩色代碼的字段名稱    
CTAB_FNAME 代表顏色信息的字段名    

 

4 Fieldcat的相關屬性

和Layout一樣,REUSE_ALV_GRID_DISPLAY 函數中的 Fieldcat 結構: slis_t_fieldcat_alv 可在 SLIS 類型池中找到;

REUSE_ALV_GRID_DISPLAY_LVC函數中的 Fieldcat 結構: lvc_s_fcat 可在 SE11 中查看。

兩者大同小異,常用具體字段欄位如下:

 

字段名稱 描述 輸入值 備注
row_pos 輸出行位置 1….n  
col_pos 輸出列位置 1….n  
fieldname 字段名稱    
tabname fieldname字段對應的內表名稱    
currency 貨幣單位    
cfieldname 當前輸出內表中的貨幣單位字段的字段名稱    
ctabname Cfieldname字段值對應的內表名稱    
ifieldname      
quantity 計量單位    
qfieldname 參考計量單位的字段名稱    
qtabname Qfieldname 對應的輸出內表名    
round 四舍五入保留位數    
exponent 流動表示的指數    
key(1) 將欄位設置為Key值    
icon(1) 將定義欄位以ICON的形式顯示    
symbol(1) 作為Symbol符號輸出,

在ALV輸出內表中的字段值可以是ABAP名稱

   
checkbox(1) 作為復選框輸出    
just(1) 定義欄位對齊方式 (R)Right (L)Left (C)Center  
lzero(1) 輸出前置零    
no_sign(1) 不輸出正負號+、-    
no_zero(1) 如果取值為零,則為空,既不輸出零    
no_convext(1)      
edit_mask 輸出編輯掩碼, 同write語句中的edit mas格式是一樣的   一般用來格式化時間和日期等
emphasize(4) 設置欄位的顏色    
fix_column(1) 固定列    
do_sum(1) 對當前列輸出時自動求和    
no_out(1) 當前列隱藏輸出    
tech(1) 技術字段,設置’X’后,該字段不會顯示,

也不能輸出,如同MANDT字段一樣的效果

   
outputlen 列的字符寬度    
offset 偏移量    
seltext_l / scrtext_l 長文本    
seltext_m / scrtext_m 中文本    
seltext_s / scrtext_s 短文本    
ddictxt(1) 列標題描述格式 (S)hort (M)iddle (L)ong  
rollname      
datatype 數據類型    
inttype 整型    
intlen 整型長度    
lowercase 是否允許小寫字母    
decfloat_style 浮點格式    
ref_fieldname 參考字段名稱,配合ref_tabname一起使用,

一般用來使單元格生成F4幫助

   
ref_tabname 參考表名稱,配合ref_fieldname使用    
roundfieldname 四舍五入字段名稱    
roundtabname 四舍五入內表名稱    
decimalsfieldname 小數點字段名稱    
decimalstabname 小數點內表名稱    
decimals_out(6) 控制小數點的位數    
text_fieldname 文本字段名稱    
reptext_ddic 與數據元素的主標題類似    
ddic_outputlen 數據字典輸出長度    
key_sel(1) 這個參數只和設置了Key的字段相關,和Key一起使用

可以交互式的隱藏設置為Key的字段(alv_list有效)

   
no_sum(1) 不自動匯總    
sp_group(4) 分組需求    
reprep(1) selection for rep/rep    
input(1) 輸入    
edit(1) 編輯    
hotspot(1) 設置欄位是否有熱點(熱點欄位顯示有下划線)    

 

5 調用ALV輸出函數

使用ALV輸出,可以直接參考數據字典中的現有透明表,也可以自定義Fieldcat來輸出字段;

如若使用數據字典中的透明表或視圖時,需要調用REUSE_ALV_FIELDCATALOG_MERGE 函數來對相應的Fieldcat 進行匹配;

另外,必須保證該結構或內表中的每個字段都參考數據字典中的Data Element,否則無法獲取字段的相關信息.

以REUSE_ALV_GRID_DISPLAY 函數為例:

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_interface_check             = ' '
      i_bypassing_buffer            = ' '
      i_buffer_active               = ' '
      i_callback_program            = gv_repid            "程序名稱
      i_callback_pf_status_set      = 'FRM_SET_GUI'       "定義觸發工具欄定義的子程序
      i_callback_user_command       = 'FRM_USER_COMMAND'  "單擊alv工具欄按鈕或雙擊行項目時觸發所定義的子程序
      i_callback_top_of_page        = ' '  
      i_callback_html_top_of_page   = ' '  
      i_callback_html_end_of_list   = ' '
      i_structure_name              =
      i_background_id               = ' '
      i_grid_title                  = 'ALV輸出'      "ALV名稱
      i_grid_settings               =
      is_layout                     = gt_layout      "程序所定義的layout名稱
      it_fieldcat                   = gt_fieldcat[]  "定義fieldcat數據
      it_excluding                  =
      it_special_groups             =
      it_sort                       = gt_sort[]
      it_filter                     =
      is_sel_hide                   =
      i_default                     = 'X'
      i_save                        = 'X'
      is_variant                    =
      it_events                     = gt_event[]
      it_event_exit                 =
      is_print                      =
      is_reprep_id                  =
      i_screen_start_column         = '0'
      i_screen_start_line           = '0'
      i_screen_end_column           = '0'
      i_screen_end_line             = '0'
      i_html_height_top             = '0'
      i_html_height_end             = '0'
      it_alv_graphics               =
      it_hyperlink                  =
      it_add_fieldcat               =
      it_except_qinfo               =
      ir_salv_fullscreen_adapter    =
    IMPORTING
      e_exit_caused_by_caller       =
      es_exit_caused_by_user        =
    TABLES
       t_outtab                      = gt_print
      EXCEPTIONS
       program_error                 = 1
       OTHERS                        = 2.

 

下面看看兩個函數各自輸出的方式與操作;

1) REUSE_ALV_GRID_DISPLAY 函數:

REPORT  ztest_jx_alv.

TYPES: slis.

TYPES: BEGIN OF ty_s_matnr,
  matnr TYPE mara-matnr,
  END OF ty_s_matnr.

DATA: i_tab TYPE STANDARD TABLE OF ty_s_matnr.

SELECT matnr
  FROM mara
  INTO CORRESPONDING FIELDS OF TABLE i_tab
  UP TO 20 ROWS.

DATA: wa_fieldcat TYPE slis_fieldcat_alv ,    " 相當於工作區
      i_fieldcat  TYPE slis_t_fieldcat_alv ,  " 存放列名的列表
      i_layout    TYPE slis_layout_alv .      " 負責整個ALV的全局屬性

DATA: lv_pos TYPE p.

wa_fieldcat-qtabname    =
wa_fieldcat-ctabname    =
wa_fieldcat-tabname     = 'I_TAB'.
wa_fieldcat-fieldname   = 'MATNR'.        " 需要輸出的內表的字段名
wa_fieldcat-seltext_l   = 'Material NO.'. " 字段的描述-長字段標簽
wa_fieldcat-seltext_m   = 'Material NO.'. " 字段描述-中字段標簽
wa_fieldcat-seltext_s   = 'Material NO.'. " 字段描述-短字段標簽
wa_fieldcat-fix_column  = 'X' .           " 是否是固定列
APPEND wa_fieldcat TO i_fieldcat.
CLEAR  wa_fieldcat.


i_layout-zebra                  = 'X' .          " 使ALV界面呈現顏色交替
i_layout-colwidth_optimize      = 'X' .          " 自動優化列寬
i_layout-detail_initial_lines   = 'X' .          " 是否出現細節屏幕
i_layout-detail_titlebar        = '詳細內容' .   " 細節屏幕標題


CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
    i_callback_program = sy-repid          " 當前程序
    is_layout          = i_layout          " 屬性內表
    it_fieldcat        = i_fieldcat[]      " 列明內表
    i_save             = 'X'               " 是否保存布局
  TABLES
    t_outtab           = i_tab
  EXCEPTIONS
    program_error      = 1
    OTHERS             = 2.

 

輸出結果:

reuse_alv_grid_display

reuse_alv_grid_display

 

2) REUSE_ALV_GRID_DISPLAY_LVC 函數

REPORT  ztest_jx_alv_lvc.

* 引入類型池
TYPES: slis.

TYPES: BEGIN OF ty_s_matnr,
  matnr TYPE mara-matnr,
  END OF ty_s_matnr.

DATA: i_tab TYPE STANDARD TABLE OF ty_s_matnr .

SELECT matnr
  FROM mara
  INTO CORRESPONDING FIELDS OF TABLE i_tab
  UP TO 20 ROWS.

DATA: wa_fieldcat_lvc   TYPE lvc_s_fcat ,       " 相當於工作區
      i_fieldcat_lvc    TYPE lvc_t_fcat ,       " 存放列名的列表
      i_layout_lvc      TYPE lvc_s_layo .       " 負責整個ALV的全局屬性

wa_fieldcat_lvc-tabname       = 'I_TAB'.
wa_fieldcat_lvc-fieldname     = 'MATNR'.          " 需要輸出的內表的字段名
wa_fieldcat_lvc-scrtext_l     = 'Material NO.'.   " 字段的描述-長字段標簽
wa_fieldcat_lvc-scrtext_m     = 'Material NO.'.   " 字段描述-中字段標簽
wa_fieldcat_lvc-scrtext_s     = 'Material NO.'.   " 字段描述-短字段標簽
wa_fieldcat_lvc-fix_column    = 'X' .             " 是否是固定列
APPEND wa_fieldcat_lvc TO i_fieldcat_lvc .
CLEAR  wa_fieldcat_lvc.

i_layout_lvc-zebra        = 'X' .          " 使ALV界面呈現顏色交替
i_layout_lvc-sel_mode     = 'A' .          " 選擇模式,"A"在最左端有選擇按鈕
i_layout_lvc-cwidth_opt   = 'X' .          " 自動優化列寬
i_layout_lvc-detailinit   = 'X' .          " 是否出現細節屏幕
i_layout_lvc-detailtitl   = '詳細內容' .   " 細節屏幕標題


CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
  EXPORTING
    i_callback_program = sy-repid          " 當前程序
    is_layout_lvc      = i_layout_lvc      " 屬性內表
    it_fieldcat_lvc    = i_fieldcat_lvc[]  " 列明內表
    i_save             = 'X'               " 是否保存布局
  TABLES
    t_outtab           = i_tab             " 數據內表
  EXCEPTIONS
    program_error      = 1
    OTHERS             = 2.

 

輸出結果:

reuse_alv_grid_display_lvc

reuse_alv_grid_display_lvc

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM