2008 Jun 08 5:20 PM
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
2008 Jun 08 5:57 PM
What is the dump message it shows??. Check it in ST22
Regards,
Chaithanya.
2008 Jun 08 9:59 PM
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
2008 Jun 08 10:21 PM
That is the main point.
I need to have them all and more.
The issue is how to get over this...
Itay
2008 Jun 08 10:30 PM
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
2008 Jul 29 4:46 PM
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
2008 Jul 29 7:42 PM
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>.
2014 Feb 13 7:57 PM