02-10-2009 2:03 PM
Hi!
I have a problem creating a transparent table dynamical in a report. I tried both function modules that I could find (DDIF_TABL_PUT and RPY_TABLE_INSERT) but I wasn't able to get a table created.
Now I'm trying it with RPY_TABLE_INSERT (seems easier) but I'm getting an error (i think IX008) after running the report that the name is not proper for a view... I don't even want to create an view... I want to create a transparent table.
Here is the coding passage:
...
lv_tabname = 'ZD000000_0000000'.
CLEAR: lt_tabl_fields.
lt_tabl_fields-tablname = lv_tabname.
lt_tabl_fields-fieldname = 'GUID'.
lt_tabl_fields-dtelname = 'ZMODULE_GUID'.
lt_tabl_fields-checktable = ''.
lt_tabl_fields-keyflag = 'X'.
lt_tabl_fields-position = 1.
lt_tabl_fields-reftable = ''.
lt_tabl_fields-reffield = ''.
lt_tabl_fields-inclname = ''.
lt_tabl_fields-notnull = 'X'.
APPEND lt_tabl_fields.
CLEAR: lt_tabl_fields.
lt_tabl_fields-tablname = lv_tabname.
lt_tabl_fields-fieldname = 'TIMESTAMP'.
lt_tabl_fields-dtelname = 'ZCREATION_TSTMP'.
lt_tabl_fields-checktable = ''.
lt_tabl_fields-keyflag = ''.
lt_tabl_fields-position = 2.
lt_tabl_fields-reftable = ''.
lt_tabl_fields-reffield = ''.
lt_tabl_fields-inclname = ''.
lt_tabl_fields-notnull = 'X'.
APPEND lt_tabl_fields.
j = 3.
*& Get structure of current module
CALL METHOD lr_analysis_module->get_field_list
IMPORTING
er_field_list = lr_field_list.
*& Get first field
i = 1.
CALL METHOD lr_field_list->get_field
EXPORTING
index = i
RECEIVING
field = lr_field.
WHILE lr_field IS NOT INITIAL.
CLEAR: lt_tabl_fields.
lt_tabl_fields-tablname = lv_tabname.
lt_tabl_fields-fieldname = lr_field->get_name( ). "fieldname in module
lt_tabl_fields-dtelname = lr_field->get_reference_type( ). "fieldtype for current field
IF lt_tabl_fields-dtelname IS INITIAL.
lt_tabl_fields-dtelname = lr_field->get_type( ).
ENDIF.
lt_tabl_fields-checktable = ''.
lt_tabl_fields-keyflag = ''.
lt_tabl_fields-position = j.
lt_tabl_fields-reftable = ''.
lt_tabl_fields-reffield = ''.
lt_tabl_fields-inclname = ''.
lt_tabl_fields-notnull = 'X'.
APPEND lt_tabl_fields.
j = j + 1.
i = i + 1.
CALL METHOD lr_field_list->get_field
EXPORTING
index = i
RECEIVING
field = lr_field.
ENDWHILE.
CLEAR: ls_tabl_inf.
ls_tabl_inf-tablname = lv_tabname.
ls_tabl_inf-language = sy-langu.
ls_tabl_inf-tablclass = 'TRANSP'.
ls_tabl_inf-sqltab = ''.
ls_tabl_inf-buffered = ''.
ls_tabl_inf-shorttext = lv_comment.
ls_tabl_inf-acttype = '00'.
ls_tabl_inf-inclexist = ''.
ls_tabl_inf-masterlang = sy-langu.
ls_tabl_inf-maintflag = 'X'.
ls_tabl_inf-deliverycl = 'A'.
ls_tabl_inf-mod_user = sy-uname.
ls_tabl_inf-mod_date = sy-datum.
ls_tabl_inf-mod_time = sy-uzeit.
CLEAR: ls_tabl_technics.
ls_tabl_technics-tablname = lv_tabname.
ls_tabl_technics-language = sy-langu.
ls_tabl_technics-tablcat = 4.
ls_tabl_technics-tablclass = 'APPL0'.
ls_tabl_technics-buffering = ''.
ls_tabl_technics-keyfieldno = ''.
ls_tabl_technics-logging = ''.
ls_tabl_technics-storetype = ''.
ls_tabl_technics-moduser = sy-uname.
ls_tabl_technics-moddate = sy-datum.
ls_tabl_technics-modtime = sy-uzeit.
ls_tabl_technics-transpflag = 'X'.
ls_tabl_technics-translate = ''.
CALL FUNCTION 'RPY_TABLE_INSERT'
EXPORTING
* LANGUAGE = SY-LANGU
table_name = lv_tabname
* WITH_DOCU = ' '
* DOCUTYPE = 'T'
* TRANSPORT_NUMBER = ' '
DEVELOPMENT_CLASS = 'ZD000000'
tabl_inf = ls_tabl_inf
tabl_technics = ls_tabl_technics
TABLES
tabl_fields = lt_tabl_fields
* DOCU_TABLE_USER =
* DOCU_TABLE_TECH =
* EXCEPTIONS
* CANCELLED = 1
* ALREADY_EXIST = 2
* PERMISSION_ERROR = 3
* NAME_NOT_ALLOWED = 4
* NAME_CONFLICT = 5
* DB_ACCESS_ERROR = 6
* OTHERS = 7
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
...
Any ideas?
Thanks and best regards.
02-10-2009 2:11 PM
02-10-2009 2:39 PM
thanks for the quick response Volker.
When I use the DB_CREATE_TABLE fm I only can create fields with datatype declaration (ddfield-datatype), but I need a fm where I can also create a field with a data element, because I'm generating the fields dynamically in the report based on the datatype/data element for a field.
edit: I'll use the datatype/length/decimal of the corresponding data element. this should work...
Edited by: Toni Fabijancic on Feb 10, 2009 3:42 PM