Q/A:创建动态内表,有的时候出现GENERATE_SUBPOOL_DIR_FULL异常怎么办

创建动态内表时,个人推荐使用CL_ABAP_TABLEDESCR这个类去创建(点击查看代码示例)。

如果使用CL_ALV_TABLE_CREATE这个类,就可能会遇到标题中提到的异常。接下来我们看一下原因。

1、打开类CL_ALV_TABLE_CREATE,查看方法CREATE_DYNAMIC_TABLE

2、查看代码中的函数LVC_TABLE_CREATE

3、继续查看代码中的ALV_TABLE_CREATE方法

4、继续点开FORM fb_table_create_string 

5、看代码,到第600行

这个类是通过GENERATE SUBROUTINE POOL创建一个动态程序,然后再来执行后续动作的。 我们可以看到标准程序在这里catch了标题中的异常。

F1详细了解一下GENERATE SUBROUTINE POOL,可以看到文档中有最多36次的一个说明。

也就是说,当我们在一个程序中频繁创建时,就会出现此异常了。

【特殊说明:当在一个非report类型的程序中,用户不退出屏幕,而且我们需要根据用户的不同操作创建不同类型的动态内表时,是坚决不能使用这个类的。】

总之,还是推荐使用CL_ABAP_TABLEDESCR这个类。


你可能感兴趣的:(Q/A:创建动态内表,有的时候出现GENERATE_SUBPOOL_DIR_FULL异常怎么办)