2010-09-17 63 views
2

我在想我可能會缺少一個導出參數(來自我的函數調用POV)。如何將我的數據顯示在我的ALV中?

在函數調用,我傳過來的參數是: 出口: i_callback_program, i_callback_pf_status_set, i_callback_user_command, is_layout, it_fieldcat, i_save 表: t_outtab 的例外處理加。

我已經檢查過,我傳遞的內部表有數據,它有。

我認爲我提出的信息就足夠了,但如果你真的需要看代碼,我會這樣做。

我是一個noob和任何幫助,將不勝感激。

Thanx。

+0

你在打什麼功能模塊? – BenV 2010-09-17 13:24:55

+0

如果可能的話,你應該總是提供一些示例代碼,這將使答案更容易。 – vwegert 2010-09-18 14:23:37

回答

1

有幾種使用ALV的方法,所以我們確實需要更多的代碼信息來幫助。

  • 第一種方法是使用功能模塊REUSE_ALV_GRID_DISPLAY。這將直接在輸出dynpro中顯示錶格內容。如果你所需要的只是一個顯示,那就去做吧,因爲這是最簡單的:如果表結構在字典中,這個調用可以像下面這樣簡單(這將顯示結構的所有成員作爲列)

myreport = sy-repid. 
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' 
     EXPORTING 
      i_callback_program   = myreport 
      it_excluding    = exclude_tab 
     TABLES 
      t_outtab     = display_data 
     EXCEPTIONS 
      program_error    = 1 
      OTHERS      = 2. 

如果結構在程序中聲明,那麼你必須創建一個字段目錄。 下面的代碼可以作爲基礎:

FORM fill_fieldcat CHANGING p_fieldcat TYPE slis_t_fieldcat_alv. 

* Data definition 
    DATA ls_fieldcat TYPE slis_fieldcat_alv. 

* Macro definition 
    DEFINE append_fieldcat. 
    clear ls_fieldcat. 

    ls_fieldcat-fieldname  = &1. * name of the field in struct 
    ls_fieldcat-tabname  = &2. * name of the table 
    ls_fieldcat-row_pos  = &3. * column 
    ls_fieldcat-ref_fieldname = &4. * field in ref table 
    ls_fieldcat-ref_tabname = &5. * ref table 
    ls_fieldcat-outputlen  = &6. * size of output 
    ls_fieldcat-seltext_m  = &7. * text (space if using the element typetext) 
    ls_fieldcat-ddictxt  = 'M'. 
    ls_fieldcat-key   = &8. * is this a key field in table 
    ls_fieldcat-emphasize  = &9. * emphisze column display 

    append ls_fieldcat to p_fieldcat. 
    END-OF-DEFINITION. 

* Init. 
    REFRESH p_fieldcat. 

* Append fielcatalog for ALV 
    append_fieldcat: 
    'FORMATIONCODE' 'DISPLAY_TAB' 1 'SHORT' 'HRP1000' 12 'Code Stage'  space space, 
    'FORMATIONTEXT' 'DISPLAY_TAB' 1 'STEXT' 'HRP1000' 20 'Libelle Stage' space space, 
    'SESSIONID'  'DISPLAY_TAB' 1 'OBJID' 'HRP1000' space 'Session'  space space, 
    'BEGDA'   'DISPLAY_TAB' 1 'BEGDA' 'HRP1000' space 'Debut'   space space, 
    'ENDDA'   'DISPLAY_TAB' 1 'BEGDA' 'HRP1000' space 'Fin'   space space, 
ENDFORM.     "fill_fieldCat 

你再調用形式來創建字段目錄,並在函數調用的參數it_fieldcat使用它。

  • 第二種方法是使用ABAP對象。使用檢查se83作爲這種用法的例子。基礎如下:

在您的Dynpro中,您聲明瞭一個具有給定名稱(「ALV_CONT」)的自定義容器。然後,在隨後的dynpro的PBO初始化容器,並把一個ALV objct內:

* global variables : 
DATA : delegationlist_table  TYPE REF TO cl_gui_alv_grid, 
     delegationlist_container TYPE REF TO cl_gui_custom_container. 
data : gs_layout TYPE lvc_s_layo. 

在PBO

IF delegationlist_container IS INITIAL. 
* create a custom container control for our ALV Control 
    CREATE OBJECT delegationlist_container 
     EXPORTING 
     container_name    = 'ALV_CONT' 
     EXCEPTIONS 
     cntl_error     = 1 
     cntl_system_error   = 2 
     create_error    = 3 
     lifetime_error    = 4 
     lifetime_dynpro_dynpro_link = 5. 

* create an instance of alv control 
    CREATE OBJECT delegationlist_table 
     EXPORTING 
     i_parent = delegationlist_container. 

* Set a titlebar for the grid control 
    gs_layout-grid_title = 'Délégations'. 
    gs_layout-sel_mode = 'A'. 
    gs_layout-cwidth_opt ='X'. 

* set table as data source 
* the struct name *must* be uppercase 
* the table must have this struc 
    CALL METHOD delegationlist_table->set_table_for_first_display 
     EXPORTING 
     i_structure_name = 'ZPRT_DELEGATIONLIST' 
     is_layout  = gs_layout 
     CHANGING 
     it_outtab  = delegationlist. 

    ENDIF. 

希望,這幫助下,
問候

紀堯姆·帕特里

+0

對此的三點評論:1.在當前的R/3版本中,myrepid不再是必需的(請參閱關於SY-REPID的ABAP發行說明)。 2.我建議使用REUSE_ALV_GRID_DISPLAY_LVC,它會做同樣的事情,但使用更多的當前參數結構。 3.如果可以避免,請不要手動創建字段目錄 - 如果稍後更改基礎結構,則可能會忘記調整程序。 – vwegert 2010-09-18 12:55:51

1

編輯:哦,還有一件事 - 如果你真的在POV(Value-Request = F4的過程),請注意,有什麼限制你可以做。在START-OF-SELECTION之後立即嘗試使用簡單報告中的代碼,如果可行,請在POV模塊中嘗試相同的代碼。

===

如果不通過一個結構的名字,你必須確保你通過一個完整的(!)字段目錄,否則ALV網格可能開始不正常或根本不工作。使用功能模塊LVC_FIELDCATALOG_MERGE和LVC_FIELDCAT_COMPLETE(按此順序)獲取可用於類或REUSE_ALV_GRID_DISPLAY_LVC的LVC字段目錄。

0

感謝您的努力,但事實證明,我所做的錯誤是我沒有在構建字段目錄時大寫字段名。這樣的新手錯誤。我想我不會再犯這個錯誤了。

-migs

+0

您應該將此標記爲接受的答案。 – BenV 2011-03-15 15:10:10

1

一對夫婦在這裏的人使用REUSE_ALV_GRID_DISPLAY建議。我確信這是完成任務的常用方式(我曾經自己使用它),但最近我參加了sap delta課程,他們強烈建議不要再使用它(您可以查看它,REUSE_ALV_GRID_DISPLAY是不再受SAP的官方支持)。

相反,使用CL_SALV_TABLE,文檔瀏覽:http://help.sap.com/erp2005_ehp_04/helpdata/EN/d7/b22041aa7df323e10000000a155106/frameset.htm

它實際上是相當方便的使用了。

0

將輸出內部表傳遞給FM參數「t_outtab」。 它將打印您的數據輸出。

相關問題