CREATE DATA dref TYPE (ls_fields-tabname).
? ASSIGN dref->* TO FIELD-SYMBOL(<fs_data>).
? lo_datatype = cl_abap_typedescr=>describe_by_data( <fs_data> ).
? CASE lo_datatype->type_kind.
? ? WHEN cl_abap_typedescr=>typekind_struct1
? ? ? OR cl_abap_typedescr=>typekind_struct2.
? ? ? CREATE DATA dyn_table TYPE TABLE OF (ls_fields-tabname).
? ? ? ASSIGN dyn_table->* TO <dyn_table>.
? ? ? CREATE DATA dyn_wa LIKE LINE OF <dyn_table>.
? ? ? ASSIGN dyn_wa->* TO <dyn_wa>.
? ? WHEN cl_abap_typedescr=>typekind_table.
? ? ? CREATE DATA dyn_table TYPE (ls_fields-tabname).
? ? ? ASSIGN dyn_table->* TO <dyn_table>.
? ? ? CREATE DATA dyn_wa LIKE LINE OF <dyn_table>.
? ? ? ASSIGN dyn_wa->* TO <dyn_wa>.
? ENDCASE.