Abap 将内部表公开为报表

Abap 将内部表公开为报表,abap,Abap,我从Select中获得了一个内部表,其中包含一些连接,并完成了一些工作。现在我要打印整张表。我现在得到的是: LOOP AT g_it_material INTO g_wa_material. WRITE AT:/(19) g_wa_material-MATNR, ... (9) g_wa_material-LAEDA. ENDLOOP. TOP-OF-PAGE. WRITE AT:/(19)'MATNR', ... (9) 'LAEDA'. 还有比这更好的方法吗?

我从Select中获得了一个内部表,其中包含一些连接,并完成了一些工作。现在我要打印整张表。我现在得到的是:

LOOP AT g_it_material INTO g_wa_material.

  WRITE AT:/(19) g_wa_material-MATNR,
  ...
  (9) g_wa_material-LAEDA.
ENDLOOP.

TOP-OF-PAGE.
  WRITE AT:/(19)'MATNR',
  ...
  (9) 'LAEDA'.
还有比这更好的方法吗?


我不认为没有内置函数可以将内部表打印到报表中。

您可以使用class
cl\u salv\u表来尝试ALV列表:

DATA: gt_outtab TYPE STANDARD TABLE OF bkpf.

DATA: gr_table TYPE REF TO cl_salv_table.

* Fill your output table
SELECT *
  FROM bkpf
  INTO TABLE gt_outtab
  UP TO 40 ROWS.

* Try it!
TRY.
    cl_salv_table=>factory(
      EXPORTING
        list_display = abap_true
      IMPORTING
        r_salv_table = gr_table
      CHANGING
        t_table      = gt_outtab ).
  CATCH cx_salv_msg.                                 
ENDTRY.

gr_table->display( ).

您可以使用class
cl\u salv\u表来尝试ALV列表:

DATA: gt_outtab TYPE STANDARD TABLE OF bkpf.

DATA: gr_table TYPE REF TO cl_salv_table.

* Fill your output table
SELECT *
  FROM bkpf
  INTO TABLE gt_outtab
  UP TO 40 ROWS.

* Try it!
TRY.
    cl_salv_table=>factory(
      EXPORTING
        list_display = abap_true
      IMPORTING
        r_salv_table = gr_table
      CHANGING
        t_table      = gt_outtab ).
  CATCH cx_salv_msg.                                 
ENDTRY.

gr_table->display( ).

以下是我的解决方案,并附上一些评论。我用动态生成的fieldcatalog制作了一份ALV报告

首先,数据定义:

TYPE-POOLS slis. "import you need for REUSE_ALV_FIELDCATALOG_MERGE

DATA:
  lt_fieldcat TYPE slis_t_fieldcat_alv,

  BEGIN OF G_IT_MATERIAL occurs 0,
    MATNR LIKE MARA-MATNR,
    MTART LIKE MARA-MTART,
    MAKTX_DE LIKE MAKT-MAKTX,
    MAKTX_FR LIKE MAKT-MAKTX,
    MAKTX_IT LIKE MAKT-MAKTX,
    ERNAM LIKE MARA-ERNAM,
    ERSDA LIKE MARA-ERSDA,
    LAEDA LIKE MARA-LAEDA,
  END OF G_IT_MATERIAL.
绝对有必要直接用LIKE定义本地结构,否则重用的解析器将找不到它

选择您的资料:

 SELECT ma~matnr ma~mtart ma~ernam ma~ersda ma~laeda
 de~maktx as maktx_de fr~maktx as maktx_fr it~maktx as maktx_it
 FROM mara as ma
 LEFT JOIN MAKT as de ON de~matnr = ma~matnr AND de~spras = 'DE'
 LEFT JOIN MAKT as fr ON fr~matnr = ma~matnr AND fr~spras = 'FR'
 LEFT JOIN MAKT as it ON it~matnr = ma~matnr AND it~spras = 'IT'
 INTO CORRESPONDING FIELDS OF TABLE g_it_material
      WHERE ...
动态创建字段目录

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME        = sy-repid

I_INTERNAL_TABNAME    = 'G_IT_MATERIAL'

I_INCLNAME            = sy-repid
CHANGING
ct_fieldcat            = lt_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error          = 2
OTHERS                 = 3.

IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

请注意,解析器还需要最大行大小为72。

这是我的解决方案,并附有一些注释。我用动态生成的fieldcatalog制作了一份ALV报告

首先,数据定义:

TYPE-POOLS slis. "import you need for REUSE_ALV_FIELDCATALOG_MERGE

DATA:
  lt_fieldcat TYPE slis_t_fieldcat_alv,

  BEGIN OF G_IT_MATERIAL occurs 0,
    MATNR LIKE MARA-MATNR,
    MTART LIKE MARA-MTART,
    MAKTX_DE LIKE MAKT-MAKTX,
    MAKTX_FR LIKE MAKT-MAKTX,
    MAKTX_IT LIKE MAKT-MAKTX,
    ERNAM LIKE MARA-ERNAM,
    ERSDA LIKE MARA-ERSDA,
    LAEDA LIKE MARA-LAEDA,
  END OF G_IT_MATERIAL.
绝对有必要直接用LIKE定义本地结构,否则重用的解析器将找不到它

选择您的资料:

 SELECT ma~matnr ma~mtart ma~ernam ma~ersda ma~laeda
 de~maktx as maktx_de fr~maktx as maktx_fr it~maktx as maktx_it
 FROM mara as ma
 LEFT JOIN MAKT as de ON de~matnr = ma~matnr AND de~spras = 'DE'
 LEFT JOIN MAKT as fr ON fr~matnr = ma~matnr AND fr~spras = 'FR'
 LEFT JOIN MAKT as it ON it~matnr = ma~matnr AND it~spras = 'IT'
 INTO CORRESPONDING FIELDS OF TABLE g_it_material
      WHERE ...
动态创建字段目录

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME        = sy-repid

I_INTERNAL_TABNAME    = 'G_IT_MATERIAL'

I_INCLNAME            = sy-repid
CHANGING
ct_fieldcat            = lt_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error          = 2
OTHERS                 = 3.

IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

请注意,解析器还需要最大行大小为72。

您好,更好的方法可能是在ALV中显示数据,但不清楚您真正想要的是什么。您好,更好的方法可能是在ALV中显示数据,但不清楚您真正想要的是什么。我必须按照过程的方式进行,@Christian的OOvariant也很好。我必须用程序化的方法来做,@Christian的OOvariant也很好。