如何让我的数据显示在我的ALV中?

时间:2010-09-17 01:30:40

标签: sap abap

我在想我可能错过了一个导出参数(来自我的函数调用POV)。

在函数调用中,我传递的参数是: 出口:    i_callback_program,    i_callback_pf_status_set,    i_callback_user_command,    is_layout,    it_fieldcat,    i_save 表:    t_outtab 以及例外和处理。

我已经检查过我传递的内部表有数据而且确实存在。

我认为我提供的信息就足够了,但如果你真的需要查看代码,我会这样做。

我是菜鸟,任何帮助都会受到赞赏。

感谢名单。

5 个答案:

答案 0 :(得分:1)

有几种方法可以使用ALV,因此我们可能确实需要有关您的代码的更多信息来提供帮助。

  • 第一种方法是使用功能模块REUSE_ALV_GRID_DISPLAY。这将直接在输出dynpro中显示表内容。如果你需要的只是一个显示,那就去吧,因为这是最简单的:如果表结构在dictionnary中,这个调用可以像下面一样简单(这将显示结构的所有成员作为列)< / LI>
  

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-Object。使用check se83作为此用途的例子。基础如下:

在Dynpro中,您声明一个具有给定名称(“ALV_CONT”)的自定义容器。然后在dynpro的PBO中初始化容器并将ALV对象放入其中:

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

希望这有帮助,
问候

Guillaume PATRY

答案 1 :(得分:1)

编辑:哦,还有一件事 - 如果你真的在POV(价值请求= F4的过程),请注意你可以做的事情有局限性。在START-OF-SELECTION之后立即在简单报告中尝试您的代码,如果可行,请在POV模块中尝试相同的代码。

===

如果未传递结构名称,则必须确保传递完整的(!)字段目录,否则ALV网格可能会开始不正常工作或根本不工作。使用功能模块LVC_FIELDCATALOG_MERGE和LVC_FIELDCAT_COMPLETE(按此顺序)获取可与类或REUSE_ALV_GRID_DISPLAY_LVC一起使用的LVC字段目录。

答案 2 :(得分: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

使用它实际上也很方便。

答案 3 :(得分:0)

感谢您的努力,但事实证明,我所做的错误是我没有在构建Field Catalog时将字段名称大写。这样的新手错误。我想我很快就不会再犯这个错误了。

-migs

答案 4 :(得分:0)

将输出内部表传递给FM参数“t_outtab”。 它将打印您的数据输出。