Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

How to eliminate GENERATE_SUBPOOL_DIR_FULL?

Former Member
0 Kudos
5,317

Hi,

I am using a dynamic table creation.

I run it in loops and I delete the field symbol holding the table.

After a fixed amount of created tables I get the dump: GENERATE_SUBPOOL_DIR_FULL.

Do you know how I can get over that?

Thanks,

Itay

7 REPLIES 7

Former Member
0 Kudos
804

What is the dump message it shows??. Check it in ST22

Regards,

Chaithanya.

uwe_schieferstein
Active Contributor
0 Kudos
804

Hello Itay

If a subroutine pool is called more than 36 times within a given report or transaction you get this kind of overflow dump.

For example, if you have report using the out-dated class CL_ALV_TABLE_CREATE and call method CREATE_DYNAMIC_TABLE more than 36 times the report will dump.

Therefore, you need to analyse where these dynamic subroutine are used and avoid the overflow.

Regards

Uwe

0 Kudos
804

That is the main point.

I need to have them all and more.

The issue is how to get over this...

Itay

Former Member
0 Kudos
804

Hi Itay,

1. Create your field catalog either manually or automatically using the function module, LVC_FIELDCATALOG_MERGE. Add more rows to the field catalog table (T_FIELDCAT) at run time.

2. Use the field catalog to create a table dynamically using the method below.

DATA: T_OUTPUT TYPE REF TO DATA 

FIELD-SYMBOLS: <T_OUTPUT> TYPE TABLE 

Call Method CL_ALV_TABLE_CREATE->CREATE_DYNAMIC_TABLE 

Exporting 

IT_FIELDCATALOG = T_FIELDCAT 

Importing 

EP_TABLE = T_OUTPUT 

ASSIGN T_OUTPUT->* TO <T_OUTPUT>.

Now the field symbol <T_OUTPUT> is pointing to an output table of the structure that contains the fields which were determined at runtime. Now fill this table with the data and pass <T_OUTPUT> to the method SET_TABLE_FOR_FIRST_DISPLAY and the ALV grid should show the data properly.

However, if you want to access or modify or fill in the data for specific columns, you have to use the ASSIGN COMPONENT statement for the specific field name and do it.

Edited by: Raj on Jun 9, 2008 3:07 AM

Former Member
0 Kudos
804

Hi Itay,

Did Raj's suggestion solve your issue ? I have the same problem, but it does not look like a code issue to me.

I found OSS note 1209556 that points to a problem with SAP drivers. I am having difficulties finding the correct area to check the drivers.

Regards,

Steve

0 Kudos
804

Hi,

No.

He has no new info.

It did not solve my issue since he is repeating the code that is to be used and not referring to the issue that you cannot do this more than 36 times.

I solved the issue myself.

since I had set of dynamic checks that I wated to do repeatedly for lots of materials, I soon ran out of the 36 times you can do it.

so what I did is this:

I created types that are tables types for the stuff i need by checking what is available on SAP tables dynamically. once I find that I put all of this together in one new table <PARAM>. This way I do not have to create the whole thing again and again. I just refer to the column name in table <dynamic_table> which is a table by itself. I take the first line of it: <dynamic> and I work of that.

this is more than enough this way.

this is the code (it might not give you exactly what you need but may give direction):

FORM create_global_dynamic_table.

DATA: dref TYPE REF TO data,

ref_line TYPE REF TO data,

lt_fcat TYPE lvc_t_fcat,

lt_cond_val TYPE STANDARD TABLE OF zmm_obs_cond_val,

lv_datatype TYPE datatype_d,

lv_leng TYPE ddleng,

lv_decimals TYPE decimals

.

FIELD-SYMBOLS: <fcat> TYPE lvc_s_fcat,

<val> TYPE zmm_obs_cond_val

.

lt_cond_val = gt_cond_value.

DELETE lt_cond_val WHERE cond_type <> 'S'.

SORT lt_cond_val BY tab_name fld_name.

DELETE ADJACENT DUPLICATES FROM lt_cond_val

COMPARING tab_name fld_name.

LOOP AT lt_cond_val ASSIGNING <val>.

SELECT SINGLE datatype leng decimals

FROM dd03l

INTO (lv_datatype, lv_leng, lv_decimals)

WHERE tabname = <val>-tab_name

AND fieldname = <val>-fld_name

AND as4local = 'A'

.

IF NOT sy-subrc IS INITIAL.

MESSAGE e061(mc) WITH <val>-tab_name <val>-fld_name.

ENDIF.

APPEND INITIAL LINE TO lt_fcat ASSIGNING <fcat>.

SELECT SINGLE ttabname tfieldname

FROM dd03l AS s JOIN dd40l AS d

ON stabname = drowtype

JOIN dd03vv AS t

ON trollname = dtypename

INTO (<fcat>-ref_table, <fcat>-ref_field)

WHERE s~fieldname = 'LOW'

AND s~as4local = 'A'

AND s~position = 3

AND s~datatype = lv_datatype

AND s~leng = lv_leng

AND s~decimals = lv_decimals

AND d~as4local = 'A'

AND d~accessmode = 'T'

.

CHECK sy-subrc IS INITIAL.

CONCATENATE <val>-tab_name '_' <val>-fld_name

INTO <fcat>-fieldname.

<fcat>-inttype = 'v'.

ENDLOOP.

CALL METHOD cl_alv_table_create=>create_dynamic_table

EXPORTING

it_fieldcatalog = lt_fcat

IMPORTING

ep_table = dref.

ASSIGN dref->* TO <dynamic_tbl>.

CREATE DATA ref_line LIKE LINE OF <dynamic_tbl>.

ASSIGN ref_line->* TO <dynamic>.

ENDFORM. " create_global_dynamic_table

then in later phase I do:

ASSIGN COMPONENT lv_str OF STRUCTURE <dynamic> TO <table>.

CREATE DATA ref_line LIKE LINE OF <table>.

ASSIGN ref_line->* TO <line>.

CLEAR <table>.

Former Member
0 Kudos
804

This message was moderated.