sorry aber ich verstehe den zusammenhang net ganz. warum nimmst du nicht eine struktur der db-tabelle???Diese interne Tabelle hat aber bei DB-Tabellen in denen gepackte Felder sind nicht die gleiche Länge (in Byte) wie die DB-Tabelle
Code: Alles auswählen.
* gs_tabinfo-tabname enthält den Namen der DB-Tabelle
* in meinem Falle 'MARA'
* <g_tab> enthält Sätze aus dieser Tabelle.
* Der Select funktioniert fehlerfrei !
........
SELECT (gt_fieldlist)
FROM (gs_tabinfo-tabname)
INTO TABLE <g_tab>
WHERE (gt_sel_matnr)
.
........
.......
DELETE (gs_tabinfo-tabname) FROM TABLE <g_tab>.
.......
INSERT (gs_tabinfo-tabname) FROM TABLE <g_tab>.
.......
UPDATE (gs_tabinfo-tabname) FROM TABLE <g_tab>.
.......
* DELETE und UPDATE funktionieren ohne Probleme
* INSERT verursacht folgenden Kurzdump:
Code: Alles auswählen.
data: ws_mara type ref to data.
field-symbols: <lf_mara> type any.
create data ws_mara type ( gs_tabinfo-tabname ). "Hier steht 'MARA'
assign ws_mara->* to <lf_mara>.
loop at <g_tab> into <lf_mara>.
* Hier den insert ausführen
endloop.
Code: Alles auswählen.
CALL FUNCTION 'DDIF_NAMETAB_GET'
EXPORTING
TABNAME = 'MARA'
* ALL_TYPES = ' '
* LFIELDNAME = ' '
* GROUP_NAMES = ' '
* IMPORTING
* X030L_WA =
* DTELINFO_WA =
* TTYPINFO_WA =
* DDOBJTYPE =
* DFIES_WA =
TABLES
* X031L_TAB =
DFIES_TAB = lt_dfies.
* EXCEPTIONS
* NOT_FOUND = 1
* OTHERS = 2
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
loop at lt_dfies into ls_dfies.
if ls_dfies-inttype eq 'P'.
ls_fieldcatalog-DATATYPE = 'QUAN'.
ls_fieldcatalog-INTTYPE = ls_dfies-inttype.
ls_fieldcatalog-INTLEN = ls_dfies-intlen.
ls_fieldcatalog-DECIMALS = ls_dfies-decimals.
else.
ls_fieldcatalog-ref_table = ls_dfies-TABNAME.
ls_fieldcatalog-ref_field = ls_dfies-FIELDNAME.
endif.
ls_fieldcatalog-FIELDNAME = ls_dfies-fieldname.
append ls_fieldcatalog to lt_fieldcatalog.
endloop.
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
IT_FIELDCATALOG = lt_fieldcatalog
IMPORTING
EP_TABLE = my_table
.