嵌套动态表

2020-08-26 04:06发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好,

我有创建嵌套动态表的要求。

示例-

创建动态表(

使用上面创建的动态表创建一个嵌套的动态表()。

我尝试使用以下代码,但无法创建嵌套的动态表。

让我知道是否还有其他创建嵌套动态表的过程。

谢谢。

数据:
       lt_comptab类型cl_abap_structdescr => component_table,
       ls_comp与lt_comptab类似,
       lt_comptab2类型cl_abap_structdescr => component_table,
       ls_comp2与lt_comptab类似,
       lref_newstr类型参考cl_abap_structdescr,
       lref_tab_type类型引用到cl_abap_tabledescr,
       lt_fcat类型lvc_t_fcat,
       ls_fcat TYPE lvc_s_fcat,
       ls_dd03p类型dd03p,
       lt_data类型引用数据,
       lt_data2类型引用数据。
 字段符号:类型标准表。
 字段符号:类型标准表。
 通话功能'LVC_FIELDCATALOG_MERGE'
   出口
     i_structure_name ='SCARR'
   改变
     ct_fieldcat = lt_fcat
   例外情况
     接口不一致= 1
     程序错误= 2
     其他= 3。
 IF sy-subrc NE 0。
   消息ID sy-msgid类型sy-msgty编号sy-msgno
           与sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。
 万一。


 循环到lt_fcat INTO ls_fcat。
   如果ls_fcat-ref_table不是INITIAL。
     清除ls_dd03p。
     通话功能" BUS_DDFIELD_GET"
       出口
         i_tabnm = ls_fcat-ref_table
         i_fldnm = ls_fcat字段名称
       输入
         e_dd03p = ls_dd03p
       例外情况
         field_not_found = 1
         其他= 2。
     如果sy-subrc EQ 0。
       ls_comp-name = ls_fcat字段名。
       ls_comp-type?= cl_abap_datadescr => describe_by_name(ls_dd03p-rollname)。
       附加ls_comp至lt_comptab。
       清除ls_comp。
     万一。
   其他。
     ls_comp-name = ls_fcat字段名。
     ls_comp-type?= cl_abap_datadescr => describe_by_name(ls_fcat-rollname)。
     附加ls_comp至lt_comptab。
     清除ls_comp。
   万一。
 结局。


 清除ls_fcat。

 lref_newstr = cl_abap_structdescr => create(lt_comptab)。
 lref_tab_type = cl_abap_tabledescr => create(lref_newstr)。


 创建数据lt_data类型的句柄lref_tab_type。
 将lt_data-> *分配给。


 ls_fcat-fieldname ='NESTED_TABLE'。
 * ls_fcat-inttype ='CHAR'。
 * ls_fcat-intlen = 000006。
 ls_fcat-rollname = 。  "对于SFLIGHT
 附加ls_fcat至lt_fcat。


 ls_comp2-name = ls_fcat字段名称。
 ls_comp2-type?= cl_abap_datadescr => describe_by_name(ls_fcat-rollname)。


 将ls_comp2附加到lt_comptab2。


 DATA(lref_newstr2)= cl_abap_structdescr => create(lt_comptab)。
 DATA(lref_tab_type2)= cl_abap_tabledescr => create(lref_newstr2)。


 创建数据lt_data2类型句柄lref_tab_type2。
 将lt_data2-> *分配给

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好,

我有创建嵌套动态表的要求。

示例-

创建动态表(

使用上面创建的动态表创建一个嵌套的动态表()。

我尝试使用以下代码,但无法创建嵌套的动态表。

让我知道是否还有其他创建嵌套动态表的过程。

谢谢。

数据:
       lt_comptab类型cl_abap_structdescr => component_table,
       ls_comp与lt_comptab类似,
       lt_comptab2类型cl_abap_structdescr => component_table,
       ls_comp2与lt_comptab类似,
       lref_newstr类型参考cl_abap_structdescr,
       lref_tab_type类型引用到cl_abap_tabledescr,
       lt_fcat类型lvc_t_fcat,
       ls_fcat TYPE lvc_s_fcat,
       ls_dd03p类型dd03p,
       lt_data类型引用数据,
       lt_data2类型引用数据。
 字段符号:类型标准表。
 字段符号:类型标准表。
 通话功能'LVC_FIELDCATALOG_MERGE'
   出口
     i_structure_name ='SCARR'
   改变
     ct_fieldcat = lt_fcat
   例外情况
     接口不一致= 1
     程序错误= 2
     其他= 3。
 IF sy-subrc NE 0。
   消息ID sy-msgid类型sy-msgty编号sy-msgno
           与sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。
 万一。


 循环到lt_fcat INTO ls_fcat。
   如果ls_fcat-ref_table不是INITIAL。
     清除ls_dd03p。
     通话功能" BUS_DDFIELD_GET"
       出口
         i_tabnm = ls_fcat-ref_table
         i_fldnm = ls_fcat字段名称
       输入
         e_dd03p = ls_dd03p
       例外情况
         field_not_found = 1
         其他= 2。
     如果sy-subrc EQ 0。
       ls_comp-name = ls_fcat字段名。
       ls_comp-type?= cl_abap_datadescr => describe_by_name(ls_dd03p-rollname)。
       附加ls_comp至lt_comptab。
       清除ls_comp。
     万一。
   其他。
     ls_comp-name = ls_fcat字段名。
     ls_comp-type?= cl_abap_datadescr => describe_by_name(ls_fcat-rollname)。
     附加ls_comp至lt_comptab。
     清除ls_comp。
   万一。
 结局。


 清除ls_fcat。

 lref_newstr = cl_abap_structdescr => create(lt_comptab)。
 lref_tab_type = cl_abap_tabledescr => create(lref_newstr)。


 创建数据lt_data类型的句柄lref_tab_type。
 将lt_data-> *分配给。


 ls_fcat-fieldname ='NESTED_TABLE'。
 * ls_fcat-inttype ='CHAR'。
 * ls_fcat-intlen = 000006。
 ls_fcat-rollname = 。  "对于SFLIGHT
 附加ls_fcat至lt_fcat。


 ls_comp2-name = ls_fcat字段名称。
 ls_comp2-type?= cl_abap_datadescr => describe_by_name(ls_fcat-rollname)。


 将ls_comp2附加到lt_comptab2。


 DATA(lref_newstr2)= cl_abap_structdescr => create(lt_comptab)。
 DATA(lref_tab_type2)= cl_abap_tabledescr => create(lref_newstr2)。


 创建数据lt_data2类型句柄lref_tab_type2。
 将lt_data2-> *分配给
付费偷看设置
发送
6条回答
My梦
1楼-- · 2020-08-26 04:41

如果要动态获取TT_DEEP类型及其使用的所有类型,以使其等效于此静态代码(我使用DEFAULT而不是EMPTY来缩短答案):

 TYPES  :开始于ts_str,
          CARRID类型S_CARR_ID,
          CARRNAME类型为S_CARRNAME,
          CURRCODE类型为S_CURRCODE,
          URL类型S_CARRURL,
          nested_table TYPE标准表,带有DEFAULT KEY,
        ts_str的结尾,

        带有默认密钥的ts_scarr的tt_str类型标准表,

        ts_deep的开头,
          nested_str类型char30,
          标签类型tt_str,
        ts_deep的结尾,

        tt_deep带有默认密钥的ts_deep的标准类型表。

它对应于此伪代码:

 data(rtts_tt_scarr)= CL_ABAP_TABLEDESCR => get(p_line_type
     =强制转换#(cl_abap_typedescr => describe_by_name('SCARR')))。

 数据(rtts_ts_str)= CL_ABAP_STRUCTDESCR => get(值#(
     (名称='CARRID'类型=强制转换#(cl_abap_typedescr => describe_by_name('SCARR-CARRID'))))
     " ...
     (name ='NESTED_TABLE'type = rtts_tt_scarr)))。

 数据(rtts_tt_str)= CL_ABAP_TABLEDESCR => get(p_line_type = rtts_ts_str)。

 数据(rtts_ts_deep)= CL_ABAP_STRUCTDESCR => get(值#(
     (name ='NESTED_STR'type = cast#(cl_abap_typedescr => describe_by_name('CHAR30'))))
     (name ='TAB'type = rtts_tt_str)))。

 data(rtts_tt_deep)= CL_ABAP_TABLEDESCR => get(p_line_type = rtts_ts_deep)。
代楠1984
2楼-- · 2020-08-26 05:04

我不确定要获取哪种类型(我看到了SCARR字段,NESTED_TABLE,SFLIGHT字段), 以及您面临的问题是什么,因此很难准确回答。 您能否大致显示要使用TYPES语句获取的类型?

Haoba3210
3楼-- · 2020-08-26 05:03

嗨,Sandra Rossi,

感谢您回复我的查询。

下面是我的要求的详细说明。

使用SCARR结构中的字段,我创建了动态内部表

现在我要使用动态表创建深层动态表

下面是动态深表的结构。

Nested_table 1个表数据

预先感谢

Bunny_CDM
4楼-- · 2020-08-26 04:49

对不起,我还是很不明白。 为什么在初始代码的注释中提到SFLIGHT? 请提供您想要的TYPES类型。

让我帮助您,请根据需要更新以下代码:

 TYPES:BEGIN OF ts_deep,
          nested_table类型标准表,带有空键,
        ts_deep的结尾,
        tt_deep ts_deep的类型标准表,带空键。
compass1988
5楼-- · 2020-08-26 04:47

嗨,Sandra Rossi,

下面是类型结构。

 TYPES:类型为ts_str,
          CARRID类型S_CARR_ID,
          CARRNAME类型为S_CARRNAME,
          CURRCODE类型为S_CURRCODE,
          URL类型S_CARRURL,
          nested_table类型标准表,带有空键,
        ts_str的结尾,

        ts_scarr的tt_str类型标准表,
       

        ts_deep的开头,
        nested_str类型char30,
        ts_str的选项卡类型标准表,
        ts_deep的结尾,

        tt_deep带有空键的ts_deep的标准类型表。

在上述类型TT_STR中,我想在运行时动态创建。

并使用TT_STR来创建动态深层结构TT_DEEP。

预先感谢。

奄奄一息的小鱼
6楼-- · 2020-08-26 04:42

谢谢,我会在稍后回答。

注意:请使用注释,不要使用"答案"/按钮" 提交答案",正如SAP所说:

在回答之前

您仅应在提出解决海报问题的解决方案时才提交答案

一周热门 更多>