ALV報表——基礎(一)


目錄

    2.1、實現步驟

    2.2、代碼示例

      3.1、Layout相關屬性

      3.2、Fieldcat相關屬性 

      3.3、ALV輸出函數

一、ALV簡介

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

 

二、程序實現

2.1、實現步驟

①定義ALV所需要用到的類型池:TYPE-POOLS:SLIS.

②定義ALV所要顯示的數據對應的內表數據類型及內表數據對象

③定義一些顯示ALV時所需要使用的變量

④定義選擇屏幕

⑤聲明各個選擇屏幕事件塊

2.2、代碼示例

REPORT ZMMRTEST.

*****************************TABLES
TABLES:marc.

*****************************Data Definitions
*定義ALV所要顯示的數據對應的內表數據類型及內表數據對象
TYPES: BEGIN OF  ty_data,
  matnr LIKE mara-matnr,       "物料號碼
  maktx LIKE makt-maktx,        "物料說明
  groes LIKE mara-groes,       "規格
END OF ty_data.

DATA: gt_data TYPE TABLE OF ty_data,
      gt_makt LIKE TABLE OF makt,
      wa_data LIKE LINE OF gt_data,
      wa_makt LIKE LINE OF gt_makt.

*定義一些顯示ALV時所需要使用的變量

*定義ALV所需要用到的類型池
TYPE-POOLS slis.
"定義和LAYOUT和FIELDCAT
DATA: gs_layout TYPE slis_layout_alv,
          gt_fieldcat TYPE slis_t_fieldcat_alv,
          wa_fieldcat TYPE  slis_fieldcat_alv.


*****************************Selection Screen
*定義選擇屏幕
PARAMETERS: p_werks LIKE marc-werks DEFAULT '2000' OBLIGATORY.
SELECT-OPTIONS: s_matnr FOR marc-matnr.

*****************************Main Process
*聲明各個選擇屏幕事件塊
START-OF-SELECTION.
     PERFORM get_data.
     PERFORM display_data.
END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
FORM get_data .

  DATA: l_index LIKE sy-tabix.

  SELECT marc~matnr mara~groes
            INTO CORRESPONDING FIELDS OF TABLE gt_data
            FROM marc
            INNER JOIN mara ON marc~matnr EQ mara~matnr
            WHERE marc~matnr IN s_matnr
            AND marc~werks EQ p_werks.

  SELECT * INTO TABLE gt_makt
            FROM makt
            WHERE matnr IN s_matnr
            AND spras = sy-langu.

  SORT: gt_data BY matnr,
    gt_makt BY matnr.

  LOOP AT gt_data INTO wa_data.
    l_index = sy-tabix.

    READ TABLE gt_makt INTO wa_makt WITH KEY matnr = wa_data-matnr
                BINARY SEARCH.
    IF sy-subrc = 0.
      wa_data-maktx = wa_makt-maktx.
    ENDIF.

    MODIFY gt_data FROM wa_data INDEX l_index.
  ENDLOOP.
ENDFORM.                    " GET_DATA

*&---------------------------------------------------------------------*
*&      Form  DISPLAY_DATA
*&---------------------------------------------------------------------*
FORM display_data.

  "欄位最適寬度
  gs_layout-colwidth_optimize = 'X'.

  PERFORM set_fieldcat.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program   = sy-repid
      is_layout                  = gs_layout
      it_fieldcat                 = gt_fieldcat[]
*      i_callback_pf_status_set     = 'alv_pf_status'   " 觸發事件調用子程序
*      i_callback_user_command  = 'alv_user_command'   " 鼠標事件操作子程序
      i_save                           = 'A'
    TABLES
      t_outtab                   =  gt_data
    EXCEPTIONS
      program_error        = 1
      OTHERS                  = 2.

ENDFORM.                    " DISPLAY_DATA

*&---------------------------------------------------------------------*
*&      Form  SET_FIELDCAT
*&---------------------------------------------------------------------*
FORM set_fieldcat.

  DEFINE fieldcat.
    wa_fieldcat-fieldname = &1.  "對應內表字段名
    wa_fieldcat-seltext_l = &2.       "輸出列文本
    APPEND wa_fieldcat TO gt_fieldcat.CLEAR wa_fieldcat.
  END-OF-DEFINITION.

  fieldcat 'MATNR' '物料'.
  fieldcat 'MAKTX' '物料說明'.
  fieldcat 'GROES' '規格'.

ENDFORM.                   " SET_FIELDCAT
View Code

運行效果:

三、Layout、Fieldcat相關屬性

3.1、Layout相關屬性:主要用於設定 ALV 的輸出格式,為 ALV 輸出的可選項

①公共部分

字段名稱 描述 輸入值 備注
 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    
 no_author (1)  設置是否需要系統標准權限檢查  X-不需要,space-需要  

②ALV菜單欄

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


③顯示選項

字段名稱 描述 輸入值 備注
 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-顯示  

 

④紅路燈顯示異常

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

 

⑤匯總合計

字段名稱 描述 輸入值 備注
 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)  總計和小計行,第一列顯示的文本    

 

⑥交互

字段名稱 描述 輸入值 備注
 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有效

 

⑦明細窗口

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

 

⑧顯示變式

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

 

⑨顏色

字段名稱 描述 輸入值 備注
 info_fieldname 用於設置ALV輸出報表每一行的顏色,其參數為輸出內表的欄位名稱  C000~C999 倘若其數據輸出內表名為LT_OUT,則需要在改內表增加一個欄位“COLOR”,並為內表每行賦值,LT_OUT-COLOR = ‘C500’
 coltab_fieldname  顏色值    

 

⑩其他

字段名稱 描述 輸入值 備注
 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、Fieldcat相關屬性:主要用於ALV的結構定義,包括具體的欄位及名稱、類型、格式等屬性,為 ALV 輸出的必選項

 

字段名稱 描述 輸入值 備注
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) 設置欄位是否有熱點(熱點欄位顯示有下划線)    

 

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

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

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

 


免責聲明!

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



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