Tabelle auf Tabelle kopieren (unterschiedliche Feldnamen,-längen)

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
10 Beiträge • Seite 1 von 1
10 Beiträge Seite 1 von 1

Tabelle auf Tabelle kopieren (unterschiedliche Feldnamen,-längen)

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Hi Leute,

ich steh gerade auf dem Schlauch...

Wie kopiere ich den Inhalt einer int.Tabelle in eine andere.

Problematik ist, die Strukturen der beiden sind unterschiedlich (eine untypisiert (Quelle), andere mit DDIC Elementen typisiert(Ziel) )

Also ein
Tabelle_ziel = Tabelle_quelle.
klappt nicht, nicht konvertierbar.

Es ist aber sichergestellt, dass Feld 1 von Tabelle1 in Feld 1 von Tabelle2 passt usw.

Wie macht man das am besten ohne Loop und und feld für Feld zu moven :-S

Danke

Grüße
Markus

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Tabelle auf Tabelle kopieren (unterschiedliche Feldnamen,-längen)

Beitrag von PeterPaletti (Specialist / 337 / 29 / 96 ) »
Loop über die Tabelle und dann mit do-Schleife und assign component of structure Felder über Feldsymbole zu weisen.

Folgende Benutzer bedankten sich beim Autor PeterPaletti für den Beitrag:
MarkusW


Re: Tabelle auf Tabelle kopieren (unterschiedliche Feldnamen,-längen)

Beitrag von black_adept (Top Expert / 3950 / 105 / 886 ) »
Tabelle2 = corresponding #( Tabelle1 )
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Tabelle auf Tabelle kopieren (unterschiedliche Feldnamen,-längen)

Beitrag von PeterPaletti (Specialist / 337 / 29 / 96 ) »
corresponding bei unterschiedlichen Feldnamen? 🤔

Re: Tabelle auf Tabelle kopieren (unterschiedliche Feldnamen,-längen)

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
black_adept hat geschrieben:
26.01.2024 01:24
Tabelle2 = corresponding #( Tabelle1 )

Hab jetzt 3 verschiedene Möglichkeiten probiert:

1. CL_ABAP_CORRESPONDING

Code: Alles auswählen.

  cl_abap_corresponding=>create(  source      = <gt_data>
                                  destination = <gt_data_chk>
                                  mapping     = VALUE cl_abap_corresponding=>mapping_table( )
                               )->execute( EXPORTING source      = <gt_data>
                                           CHANGING  destination = <gt_data_chk> ).
Die mapping_table könnte man noch infos mitgeben, aber auch da muss man dann die Spaltennamen wissen ... 🙄
Vorteil: Bricht nicht ab... Funktioniert aber nicht

2. CORESSPONDING Funktion

Code: Alles auswählen.

  <gt_data_chk> = CORRESPONDING #( <gt_data> ).
Vorteil: Bricht nicht ab... Funktioniert aber nicht

3. direktzuweisung

Code: Alles auswählen.

  <gt_data_chk> = <gt_data>.
Vorteil: gibts keinen...
Es kommt zum Dump

Code: Alles auswählen.

Category               ABAP programming error
Runtime Errors         OBJECTS_TABLES_NOT_COMPATIBLE

Ich glaub ich muss dass wirklich Oldschoolmäßig, wie PeterPaletti geschrieben hat, machen.

Nochmal zur Veranschaulichung:
Aufbau <GT_DATA>
Spaltennamen: A; B; C; D; E; F
Jede einzelne Spalte ist ein STRING

Aufbau <GT_DATA_CHK>
Spaltennamen: MANDT, KONTO, PARTNER, NAME, EINTRITTSDATUM, ANZAHL
Durch DDIC Typen typisiert

Re: Tabelle auf Tabelle kopieren (unterschiedliche Feldnamen,-längen)

Beitrag von PeterPaletti (Specialist / 337 / 29 / 96 ) »
Bei Eintrittsdatum würde ich erst noch testen, ob das Format im String ABAP-like ist.

Re: Tabelle auf Tabelle kopieren (unterschiedliche Feldnamen,-längen)

Beitrag von ewx (Top Expert / 4787 / 295 / 629 ) »
wenn du wirklich nicht weißt, wie die Feldname heißen, bleibt dir nichts anderes als ein LOOP mit ASSIGN COMPONENT sy-index.
Aber irgendwie liest du die Daten doch ein? also hast du auch hier eine Struktur mit Feldnamen, oder nicht?
Und dann kannst du sie beim Mapping bei CORRESPONDING angeben.

Re: Tabelle auf Tabelle kopieren (unterschiedliche Feldnamen,-längen)

Beitrag von PeterPaletti (Specialist / 337 / 29 / 96 ) »
ewx hat geschrieben:
26.01.2024 12:43
wenn du wirklich nicht weißt, wie die Feldname heißen, bleibt dir nichts anderes als ein LOOP mit ASSIGN COMPONENT sy-index.
Aber irgendwie liest du die Daten doch ein? also hast du auch hier eine Struktur mit Feldnamen, oder nicht?
Und dann kannst du sie beim Mapping bei CORRESPONDING angeben.
Wenn ich Markus richtig verstanden habe, heißen die Spalten der Quelltabelle A;B;C;D;E;F (riecht für mich nach Excel) und die der Zieltabelle haben sprechende Namen. Wenn man da ein Mapping beim Corresponding machen will, kann man ja gleich die einzelnen Felder zuweisen.

Re: Tabelle auf Tabelle kopieren (unterschiedliche Feldnamen,-längen)

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
PeterPaletti hat geschrieben:
26.01.2024 13:11
Wenn ich Markus richtig verstanden habe, heißen die Spalten der Quelltabelle A;B;C;D;E;F (riecht für mich nach Excel) und die der Zieltabelle haben sprechende Namen. Wenn man da ein Mapping beim Corresponding machen will, kann man ja gleich die einzelnen Felder zuweisen.
Korrekt...dachte es irgendwo erwähnt zu haben...quelle ist Excel...und das auch nicht immer die gleiche Datei... somit ändern sich die Strukturbreiten je nachdem welche Excel eingelesen wird.

Hab es mit dem Loop und DO und Assign Component gemacht...hatte auf eine schönere Lösung gehofft ;)

Re: Tabelle auf Tabelle kopieren (unterschiedliche Feldnamen,-längen)

Beitrag von DeathAndPain (Top Expert / 1806 / 214 / 396 ) »
PeterPaletti hat geschrieben:
26.01.2024 13:11
Wenn ich Markus richtig verstanden habe, heißen die Spalten der Quelltabelle A;B;C;D;E;F (riecht für mich nach Excel) und die der Zieltabelle haben sprechende Namen. Wenn man da ein Mapping beim Corresponding machen will, kann man ja gleich die einzelnen Felder zuweisen.
Nö. Eine längere Mappingliste im Code ist immer noch allemal eleganter, besser lesbar und mutmaßlich auch schneller als ein händischer LOOP. Zumal Dir beim LOOP das Mapping ja auch nicht erspart bleiben würde; da müsstest Du dann

Code: Alles auswählen.

<tabelle1>-feldname1 = <tabelle2>-anderer_feldname1.
<tabelle1>-feldname2 = <tabelle2>-anderer_feldname2.
usw.
schreiben.

Allenfalls wenn es sehr viele Spalten sind und sie in beiden Tabellen genau in der gleichen Reihenfolge stehen, könnte man über einen inneren

Code: Alles auswählen.

DO spaltenanzahl TIMES.
  ASSIGN COMPONENT sy-index of tabelle1 to FIELD-SYMBOL(<tab1>).
  ASSIGN COMPONENT sy-index of tabelle2 to FIELD-SYMBOL(<tab2>).
  <tab2> = <tab1>.
ENDDO.
nachdenken. Aber selbst dafür müsste die Spaltenanzahl schon sehr groß oder die Spaltennamen nicht statisch bekannt sein, damit das einen Vorteil bringt.

Seite 1 von 1

Vergleichbare Themen

4
Antw.
2016
Views
Select in Tabelle mit ungleichen Feldnamen
von gs3rr4 » 27.12.2016 16:30 • Verfasst in ABAP® für Anfänger
1
Antw.
2837
Views
Daten aus DB-Tabelle in interne Tabelle kopieren
von b0rsti » 07.02.2008 10:52 • Verfasst in ABAP® für Anfänger
4
Antw.
2285
Views
Feldnamen einer internen Tabelle variabel festlegen.
von Kojak » 03.11.2005 12:08 • Verfasst in ABAP® für Anfänger
2
Antw.
7105
Views
Über Struktur die Tabelle, dazugehörigen Feldnamen bekommen?
von PMK » 28.11.2005 11:18 • Verfasst in ABAP® für Anfänger
11
Antw.
8691
Views
Tabelle in interne Tabelle kopieren
von Kai999 » 24.05.2017 12:09 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Artikel automatisch in va01
vor 2 Tagen von wreichelt 2 / 53
langtexte beim Fertigungsauftrag
vor 2 Tagen von ByteMeBaby 7 / 6423
Updates der Daten, Fehlermeldung
vor 3 Tagen von Egzon gelöst 1 / 73

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Artikel automatisch in va01
vor 2 Tagen von wreichelt 2 / 53
langtexte beim Fertigungsauftrag
vor 2 Tagen von ByteMeBaby 7 / 6423
Updates der Daten, Fehlermeldung
vor 3 Tagen von Egzon gelöst 1 / 73

Unbeantwortete Forenbeiträge

Updates der Daten, Fehlermeldung
vor 3 Tagen von Egzon 1 / 73
Zwischensumme Adobe Forms
letzen Monat von Lucyalison 1 / 290