Tabinhalte einer anderen Tab mit ähnlicher Struktur übergebe

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
5 Beiträge • Seite 1 von 1
5 Beiträge Seite 1 von 1

Tabinhalte einer anderen Tab mit ähnlicher Struktur übergebe

Beitrag von Nichtskönner ( / / 0 / 3 ) »
Hallo,

ich versuche verzweifelt Inhalte einer Tabelle, die ich von einem BAPI geliefert bekommen habe, in eine andere Tabelle zu übergeben, um mit ihr anschließend weiterarbeiten zu können. Es muss nicht der komplette Inhalt übergeben werden, sondern nur 6 - 8 Felder.

Kann mir bei diesem Problem jemand helfen?

vielen Dank und Gruss,
Nichtskönner

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


Beitrag von Gast ( / / 0 / 3 ) »
Hi,

soweit ich weiß bleibt dir nicht anderes übrig wie ein loop über die gefüllte tabelle.
ungefähr so:

Code: Alles auswählen.

loop at [BapiTabelle] into [StruckturVonBapiTabelle].
move-corresponding [StruckturVonBapiTabelle] to [StruckturNeueTabelle].
append [StruckturNeueTabelle] to [NeueTabelle].
endloop.
Mußt halt jeden eintrag einzeln aus der Bapitabelle nehmen und die neue Tabelle damit befüllen...
Hoffe ich konnte dir helfen. :wink:
Gruß Herbert

Beitrag von root (Site Admin / 12 / 0 / 0 ) »
Hey,

nicht so pessimistisch. Das Können kommt ganz von alleine ;-), schließlich fängt jeder mal an.
Leider kann ich Dir auch nichts smarteres raten wie mein Vorgänger mit den loop-Anweisungen, denn eine direkte Zuweisung wie z.B.:

table1[] = table2[].

funktioniert nur bei absoluter Strukturgleichheit.

Beitrag von Frank Dittrich (Expert / 674 / 0 / 15 ) »
Eine Zuweisung itab2[] = itab1[] funktioniert nicht nur bei absoluter Strukturgleichheit der itabs.
Problemlos ist auf jeden Fall, wenn in der Quell-itab linksbündig die Felder mit gleichem Typ und gleicher Länge drinstehen wie in der Ziel-itab. Nicht mal der Name muß übereinstimmen, es werden einfach die ersten N Bytes übernommen.
Wenn diese Voraussetzung gegeben ist, kann man die Zuweisung bedenkenlos verwenden.
Ich selbst habe solche Zuweisungen bisher allerdings nur benutzt, wenn die itabs flache Strukturen hatten (also keine Komponenten vom Typ STRING oder Komponenten, die selbst wieder itabs sind.)

Bei abweichenden Typen wird das nicht mehr funktionieren.
(Für Nicht-Unicode-fähige Systeme könnte sogar noch ein Kopieren von Typ X nach C klappen. Selbst wenn es klappt, ist es aber nicht zu empfehlen.)

Wenn die Ziel-itab zusätzliche Felder hat, ist das Verhalten m.E.zumindest für die zusätzlichen Felder undefiniert.
Ich mich nicht darauf verlassen, daß diese initial sind. Es sei denn, man findet es in der Doku.
Ansonsten funktioniert Dein Programm evtl. mit dem nächsten Kernel-Patch nicht mehr.

Frank

Beitrag von DRABAP (ForumUser / 30 / 0 / 1 ) »
Interne Tabellen sind genau dann zuweisbar, wenn ihre Zeilentypen konvertierbar sind. Die Regel, wann Struktur einander zugeweisen werden können ist leider recht kompliziert. Wichtig ist jedoch, dass das Zielfeld mit Initialwerten aufgefüllt wird.
Die Online-Dokumentation gibt folgende Auskunft:

Konvertierung zwischen flachen Strukturen
Strukturen außerhalb von Unicode-Programmen

Außerhalb von Unicode-Programmen werden die beteiligten flachen Strukturen als Einzelfelder vom Typ c betrachtet (Casting), deren Länge durch die Länge ihrer Komponenten und mögliche Ausrichtungslücken bestimmt wird. Die Zuweisung zwischen den Strukturen erfolgt dann nach den Konvertierungsregeln für den Datentyp c. Insbesondere werden bei der Zuweisung einer kürzeren Struktur in eine längere die Komponenten am Ende der Zielstruktur nicht typspezifisch initialisiert, sondern mit Leerzeichen aufgefüllt.

Hinweis
Zuweisungen dieser Art sind nur dann sinnvoll, wenn die beteiligten Strukturen ausschließlich zeichenartige oder byteartige Komponenten besitzen.

Flache Strukturen in Unicode-Programmen

Für die Konvertierung flacher Strukturen in Unicode-Programmen spielt die Unicode-Fragmentsicht der beteiligten Strukturen eine Rolle.

Unicode-Fragmentsicht

Die Unicode-Fragmentsicht zerlegt eine Struktur in Fragmente. Ein Fragment ist eine Zusammenfassung von Strukturkomponenten gleicher oder ähnlicher Datentypen bestimmter Länge. In geschachtelten Strukturen werden bei der Bildung der Fragmente die elementaren Komponenten der untersten Schachtelungsebene betrachtet. Folgende Teile einer Struktur werden jeweils zu einem Fragment zusammengefasst:

Aufeinander folgende flache zeichenartige Komponenten vom Typ c, n, d, t, zwischen denen keine Ausrichtungslücken liegen, bilden zeichenartige Fragmente.
Aufeinander folgende flache byteartige Komponenten vom Typ x, zwischen denen keine Ausrichtungslücken liegen, bilden byteartige Fragmente.
Aufeinander folgende numerische Komponenten vom Typ i und f, zwischen denen keine Ausrichtungslücken liegen, bilden jeweils eigene Fragmente.
Jede einzelne numerischen Komponente vom Typ p bildet ein eigenes Fragment.
Jede Ausrichtungslücke wird als Fragment betrachtet.
Hinweis
In geschachtelten Strukturen ist zu beachten, dass bei ausgerichteten Unterstrukturen vor und nach den Unterstrukturen Ausrichtungslücken auftreten können.

Beispiel

Code: Alles auswählen.

BEGIN OF struc, 
  a TYPE c LENGTH 3, 
  b TYPE n LENGTH 4, 
  c TYPE d, 
  d TYPE t, 
  e TYPE f, 
  f TYPE x LENGTH 2, 
  g TYPE x LENGTH 4, 
  h TYPE i, 
  i TYPE i, 
  j TYPE i, 
  k TYPE i, 
END OF struc. 
Die Struktur struc enthält in einem Unicode-Programm , in dem zeichenartige Felder durch 2 Byte je Zeichen repräsentiert werden, folgende Unicode-Fragmente. Ausrichtungslücken sind mit A bezeichnet.

Fragment Komponenten Bytes

Code: Alles auswählen.

1 a, b, c, d 6+8+16+12 
2 A 6 
3 e 8 
4 f, g 2+4 
5 A 2 
6 h, i, j, k 4+4+4+4 
Konvertierungsregeln

In Unicode-Programmen gelten folgende Regeln für die Konvertierung einer flachen Struktur in eine andere flache Struktur:

Bei Zuweisungen von Strukturen mit gleicher Fragmentsicht wird die Struktur unkonvertiert zugewiesen.


Bei Zuweisungen von Strukturen unterschiedlicher Länge, deren Fragmentsicht in der Länge der kürzeren Struktur exakt übereinstimmt, erfolgt eine unkonvertierte Zuweisung in der Länge der kürzeren Struktur. Wenn die Zielstruktur länger als die Quellstruktur ist, werden die Komponenten der Zielstruktur, die hinter den gemeinsamen Fragmenten liegen, mit typgerechten Initialwerten gefüllt und Ausrichtungslücken auf hexadezimal 0 gesetzt. Wenn die Zielstruktur kürzer als die Quellstruktur ist, werden die Komponenten der Qellstruktur, die hinter den gemeinsamen Fragmenten liegen, abgeschnitten.


Bei Zuweisungen von Strukturen unterschiedlicher Länge, deren Fragmentsicht bis zum vorletzten Fragment der kürzeren Struktur übereinstimmt und bei denen das nächste Fragment jeweils byte- oder zeichenartig ist, erfolgt eine unkonvertierte Zuweisung des fragmentgleichen Anfangsstücks. Die Zeichen des nächsten Fragments der Quellstruktur werden linksbündig und unkonvertiert dem entsprechenden Fragment der Zielstruktur zugewiesen. Falls dieses Fragment in der Zielstruktur größer als in der Quellstruktur ist, wird je nach Datentyp rechts mit Leerzeichen oder mit hexadezimal 0 aufgefüllt. Falls es kürzer ist, wird rechts abgeschnitten. Die restlichen Komponenten hinter diesem Fragment werden entweder abgeschnitten oder mit typgerechten Initialwerten gefüllt.
Für alle anderen Fälle ist keine Konvertierungsregel definiert und daher keine Zuweisung möglich.

Hinweis
Falls ein Syntaxfehler wegen einer unerlaubten Zuweisung zwischen flachen Strukturen auftritt, kann man sich die Fragmentsichten der beteiligten Strukturen durch Auswahl der Drucktaste mit der Informationsikone anzeigen lassen.

Beispiele
Eine Zuweisung struc1 = struc2 und umgekehrt ist in Unicode-Programmen nicht erlaubt, weil die Fragmentsicht nicht übereinstimmt (struc1-x belegt im Gegensatz zu struc2-b immer nur ein Byte).

Code: Alles auswählen.

DATA:                 DATA: 
  BEGIN OF struc1       BEGIN OF struc2, 
    a(1) TYPE c           a(1) TYPE c, 
    x(1) TYPE x           b(1) TYPE c, 
  END OF struc1.        END OF struc2. 
Eine Zuweisung struc3 = struc4 und umgekehrt ist zulässig, weil die Fragmentsicht der kürzeren Struktur struc3 mit der Fragmentsicht des Anfangsstücks der längeren Struktur struc4 übereinstimmt.

Code: Alles auswählen.

DATA:                 DATA: 
  BEGIN OF struc3       BEGIN OF struc4, 
    a(2) TYPE c           a(8) TYPE c, 
    n(6) TYPE n           i    TYPE i, 
    i    TYPE i           f    TYPE f, 
  END OF struc3.        END OF struc4. 
Eine Zuweisung struc5 = struc6 und umgekehrt ist wiederum verboten, weil die Fragmentsichten der beiden Strukturen durch die Ausrichtungslücken vor struc5-b und vor struc6-struc0-b nicht übereinstimmen.

Code: Alles auswählen.

DATA:                 DATA: 
  BEGIN OF struc5       BEGIN OF struc6, 
    a(1) TYPE x           a(1) TYPE x, 
    b(1) TYPE x           BEGIN OF struc0, 
    c(1) TYPE c             b(1) TYPE x, 
  END OF struc5.            c(1) TYPE c, 
                          END OF struc0, 
                        END OF struc6. 
Eine Zuweisung struc7 = struc8 und umgekehrt ist möglich, weil die Fragmentsicht bis zum vorletzten Fragment p der kürzeren Struktur struc7 übereinstimmt.

Code: Alles auswählen.

DATA:                 DATA: 
  BEGIN OF struc7       BEGIN OF struc8, 
    a    TYPE i           a    TYPE i, 
    p(8) TYPE p           p(8) TYPE p, 
    c(1) TYPE c           c(5) TYPE c, 
  END OF struc7.          o(8) TYPE p, 
                        END OF struc8. 
Dr. ABAP

Seite 1 von 1

Vergleichbare Themen

6
Antw.
1945
Views
Mysql-ähnlicher Join benötigt!
von curlyhairedguitarist » 22.11.2007 14:50 • Verfasst in ABAP® für Anfänger
2
Antw.
1685
Views
Struktur als Kopie von vorhandener Struktur anlegen
von Marwin » 20.04.2005 15:29 • Verfasst in ABAP® Core
1
Antw.
258
Views
3
Antw.
1693
Views
Struktur
von swonny » 04.09.2008 17:16 • Verfasst in ABAP® für Anfänger
8
Antw.
5853
Views
struktur
von swonny » 19.06.2007 10:34 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

SELECT CHAR16 in CHAR12-Feld
vor einer Stunde von Patrick1982 gelöst 5 / 56
alv_grid aktualisieren
vor 6 Stunden von Egzon gelöst 4 / 82

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

SELECT CHAR16 in CHAR12-Feld
vor einer Stunde von Patrick1982 gelöst 5 / 56
alv_grid aktualisieren
vor 6 Stunden von Egzon gelöst 4 / 82

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 4 Wochen von Lucyalison 1 / 134
Group Items auf einer Filterbar
vor 5 Wochen von Bright4.5 1 / 170