0

我目前正在做一个项目,将数据提取到几个 itabs 中,并将它们全部保存到我本地电脑上的一个 excel 文件中。

为了将我的数据移动到 excel 文件中,我必须遍历似乎可以使用cl_abap_structdescr=>describe_by_dataandcl_abap_tabledescr=>create函数归档的表格字段。在我阅读的原始文章中,作者将它们与 ABAP 字典表一起使用,我的目标是将其与任意内部表一起使用。

我在测试报告中尝试过,并使用 T005 进行测试:

data:
        lt_t005         type standard table of  t005,
        ls_t005         like line of            lt_t005,
        tablestructure  type ref to             cl_abap_structdescr,
        tabletype       type ref to             cl_abap_tabledescr.

*tablestructure ?= cl_abap_structdescr=>describe_by_name( 'lt_t005' ).
tablestructure ?= cl_abap_structdescr=>describe_by_data( lt_t005 ).
tabletype ?= cl_abap_tabledescr=>create(  p_line_type = tablestructure ).

两者都describe_by_name()不起作用describe_by_data(),按名称描述会导致“NOT_FOUND”异常。因为它不是 ABAP 字典表,所以这对我来说很有意义。用数据描述会CX_SY_MOVE_CAST_ERROR告诉我源类型\CLASS=CL_ABAP_TABLEDESC不能转换为"\CLASS=CL_ABAP_STRUCTDESC.

提前致谢

4

2 回答 2

3

使用此变体:

tablestructure ?= cl_abap_structdescr=>describe_by_data( ls_t005 ).
tabletype ?= cl_abap_tabledescr=>create(  p_line_type = tablestructure ).

DATA table TYPE REF TO data.
FIELD-SYMBOLS: <tab> TYPE ANY TABLE.

CREATE DATA table TYPE HANDLE tabletype.
ASSIGN table->* TO <tab>.

SELECT *
  FROM t005
  INTO TABLE <tab>.

请注意与您的不同的第一行,describe_by_data方法接受平面结构,而不是 itab。

这是对所有 RTTS 对象及其可用方法的一个很好的概述。

于 2020-11-17T11:17:10.297 回答
2

您正在尝试使用类创建表描述cl_abap_structdescr。这是行不通的,因为该类是用于结构的,而不是用于表的。

当您需要表格描述时,请使用 class cl_abap_tabledescr

tabletype ?= cl_abap_tabledescr=>describe_by_data( lt_t005 ).

当还需要该表的一行结构描述时,可以通过表描述获取:

tablestructure ?= tabletype->get_table_line_type( ).

请注意,CX_SY_MOVE_CAST_ERROR如果内部表的行类型不是结构(如 a TYPE TABLE OF string),则最后一行将引发异常。

于 2020-11-18T11:52:40.553 回答