Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Spookykid
Code: Alles auswählen.
loop at t_dbtab into wa_dbtab .
cl_abap_typedescr=>describe_by_name(
EXPORTING p_name = wa_dbtab-tname
RECEIVING p_descr_ref = type_descr
EXCEPTIONS type_not_found = 4 ).
if sy-subrc = 4.
write: 'typedescr', wa_dbtab-tname, '/'.
* Message 'Type not found ' TYPE 'I' DISPLAY LIKE 'E'.
* return.
endif.
try.
struct_descr ?= type_descr.
catch cx_sy_move_cast_error into error.
* MESSAGE error type 'I' DISPLAY LIKE 'E'.
write: 'structdescr', '/'.
return.
endtry.
try.
components = struct_descr->get_components( ).
struct_descr = cl_abap_structdescr=>create( components ).
table_descr = cl_abap_tabledescr=>create( struct_descr ).
catch cx_sy_struct_creation
cx_sy_table_creation into error.
*Message error type 'I' Display like 'E'.
write: 'cx_sy_struct_creation', '/'.
return.
endtry.
try .
create data table_ref type handle table_descr.
assign table_ref->* to <table>.
catch cx_sy_create_data_error into error.
* message error type 'I' DISPLAY LIKE 'E'.
write: 'table ref', '/'.
return.
endtry.
try.
Select (wa_dbtab-cols)
FROM (wa_dbtab-tname) into CORRESPONDING FIELDS OF TABLE <table>.
catch cx_sy_sql_error into error.
* Message error type 'I' display like 'E'.
write: 'sql error', '/'.
return.
endtry.
display( <table> ).
endloop.
Code: Alles auswählen.
select dd02l~tabname dd03l~fieldname dd03l~languflag from dd02l
inner join dd03l on dd02l~tabname = dd03l~tabname
into table t_itab
where ( dd02l~contflag = 'C' or
dd02l~contflag = 'G' ) and
dd02l~tabclass = 'TRANSP'.
sort t_itab ascending by tname.
* Interne Tabelle wird geloopt, sollte ein Sprachfeld vorhanden sein, wird das interne Sprachkennzeichen gesetzt und an eine weitere interne Tabelle übergeben.
loop at t_itab into wa_dbtab.
*Abfangen der Daten beim ersten Durchgang.
if wa_dbtab_temp-tname is initial.
wa_dbtab_temp-tname = wa_dbtab-tname.
endif.
*Wenn die Tabellennamen identisch sind werden die Spaltenfelder miteinander verbunden.
if wa_dbtab_temp-tname = wa_dbtab-tname.
*Sollte die Spalte Include oder ähnlich heißen, wird diese nicht übernommen, da Select damit nicht umgehen kann.
if wa_dbtab-cols cp '.*'.
continue.
endif.
concatenate wa_dbtab_temp-cols wa_dbtab-cols into wa_dbtab_temp-cols separated by space.
*Sollte die Tabelle ein Sprachfeld haben, wird dies vermerkt.
if wa_dbtab-langu = 'X' or wa_dbtab_temp-langu = 'X'.
langu_sign = 'X'.
endif.
endif.
*Sollten die Tabellennamen ungleich und das Sprachkennzeichen gesetzt sein, wird der Satz in die interne Tabelle gespeichert werden
if wa_dbtab_temp-tname <> wa_dbtab-tname and
langu_sign = 'X' and
wa_dbtab_temp-tname is not initial.
*Solle das erste Zeichen des Spaltenchars ein Leerzeichen sein, wird dieses gelöscht.
if wa_dbtab_temp-cols(1) = ' '.
shift wa_dbtab_temp-cols by 1 places left.
endif.
append wa_dbtab_temp to t_dbtab.
clear: wa_dbtab_temp, langu_sign.
* Sicherung der ersten Spalte der folgenden (Vergleichs)Tabelle.
wa_dbtab_temp = wa_dbtab.
* Sollte die Tabelle kein Sprachfeld haben
elseif wa_dbtab_temp-tname <> wa_dbtab-tname and langu_sign <> 'X'.
clear wa_dbtab_temp.
* Sicherung der ersten Spalte der folgenden (Vergleichs)Tabelle.
wa_dbtab_temp = wa_dbtab.
endif.
endloop.
*Hier wird sichergestellt, dass die letzte Tabelle ebenfalls mitaufgenommen wird.
if langu_sign = 'X'.
*Solle das erste Zeichen des Spaltenchars ein Leerzeichen sein, wird dieses gelöscht.
if wa_dbtab_temp-cols(1) = ' '.
shift wa_dbtab_temp-cols by 1 places left.
endif.
append wa_dbtab_temp to t_dbtab.
clear: wa_dbtab_temp, wa_dbtab, langu_sign.
endif.
Code: Alles auswählen.
loop at t_dbtab into wa_dbtab." where tname <> '/IXOS/RM_TDL1' or
" tname <> 'ACCACCOUNT0T'.
cl_abap_typedescr=>describe_by_name(
exporting p_name = wa_dbtab-tname
receiving p_descr_ref = type_descr
exceptions type_not_found = 4 ).
if sy-subrc = 4.
write: 'Type not found ', wa_dbtab-tname, /.
* Message 'Type not found ' TYPE 'I' DISPLAY LIKE 'E'.
continue.
endif.
try.
struct_descr ?= type_descr.
catch cx_sy_move_cast_error into error.
* MESSAGE error type 'I' DISPLAY LIKE 'E'.
write: 'structdescr',wa_dbtab-tname, /.
continue.
endtry.
try.
components = struct_descr->get_components( ).
struct_descr = cl_abap_structdescr=>create( components ).
table_descr = cl_abap_tabledescr=>create( struct_descr ).
catch cx_sy_struct_creation
cx_sy_table_creation into error.
*Message error type 'I' Display like 'E'.
write: 'cx_sy_struct_creation',wa_dbtab-tname, /.
continue.
endtry.
try .
create data table_ref type handle table_descr.
assign table_ref->* to <table>.
catch cx_sy_create_data_error into error.
* message error type 'I' DISPLAY LIKE 'E'.
write: 'table ref',wa_dbtab-tname, /.
continue.
endtry.
try.
select (wa_dbtab-cols)
from (wa_dbtab-tname) into corresponding fields of table <table>.
catch cx_sy_sql_error into error.
* Message error type 'I' display like 'E'.
write: 'sql error bei tabelle', wa_dbtab-tname, /.
continue.
endtry.
* call METHOD display( EXPORTING result = <table> ).
endloop.
endmethod. "main
Code: Alles auswählen.
REPORT.
PARAMETERS: p_tab TYPE tabname OBLIGATORY DEFAULT 'T000'.
DATA: dref TYPE REF TO data.
FIELD-SYMBOLS: <tab> TYPE STANDARD TABLE.
CREATE DATA dref TYPE STANDARD TABLE OF (p_tab) WITH NON-UNIQUE DEFAULT KEY.
ASSIGN dref->* TO <tab>.
SELECT *
INTO TABLE <tab>
FROM (p_tab).
BREAK-POINT.
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Spookykid
Code: Alles auswählen.
loop at t_dbtab into wa_dbtab
where
tname ne 'IWADM' or
tname ne '/IXOS/RM_TDL1'.
Elementare Aussagenlogik:where
tname ne 'IWADM' or
tname ne '/IXOS/RM_TDL1'.
Komischerweise bekomme ich trotz der where-Klausel diese noch in mein wa. Irgendwie sehe ich den Wald vor Bäumen nicht mehr.
Das Problem ist, dass einige Tabellen mehrere Nicht-Key-Felder haben und diese auch kein einheitliches Datenelement besitzen.Hilfsstruktur 1 mit Hilfsstruktur 2 vergleichen (Gruppierungsbedingung) und dann prüfen ob der gesuchte Text (Feld welches nicht im KEY der Tabelle vorkommt; siehe DDIF_FIELDINFO_GET) in der Sprache XYZ vorkommt.