Tabinhalte einer anderen Tab mit ähnlicher Struktur übergebe

Getting started ... Alles für einen gelungenen Start.

Tabinhalte einer anderen Tab mit ähnlicher Struktur übergebe

Postby Emir3446 » Wed Dec 04, 2002 2:56 pm

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
Emir3446
.
.
 
Posts: 4
Joined: Wed Dec 04, 2002 2:56 pm

Postby Alva1590 » Wed Dec 04, 2002 3:10 pm

Hi,

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

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. loop at [BapiTabelle] into [StruckturVonBapiTabelle].
  2. move-corresponding [StruckturVonBapiTabelle] to [StruckturNeueTabelle].
  3. append [StruckturNeueTabelle] to [NeueTabelle].
GeSHi ©


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
Alva1590
.....
.....
 
Posts: 4387
Joined: Mon Dec 02, 2002 3:01 pm

Postby Malina4029 » Wed Dec 04, 2002 3:28 pm

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.
Malina4029
..
..
 
Posts: 12
Joined: Wed Dec 04, 2002 3:28 pm

Postby Willy1492 » Wed Dec 04, 2002 6:04 pm

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
Willy1492
....
....
 
Posts: 581
Joined: Tue Dec 03, 2002 4:44 pm

Postby Quinn1225 » Fri Jan 03, 2003 1:06 pm

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: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. BEGIN OF struc,
  2.   a TYPE c LENGTH 3,
  3.   b TYPE n LENGTH 4,
  4.   c TYPE d,
  5.   d TYPE t,
  6.   e TYPE f,
  7.   f TYPE x LENGTH 2,
  8.   g TYPE x LENGTH 4,
  9.   h TYPE i,
  10.   i TYPE i,
  11.   j TYPE i,
  12.   k TYPE i,
  13. END OF struc.
GeSHi ©

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: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. 1 a, b, c, d 6+8+16+12
  2. 2 A 6
  3. 3 e 8
  4. 4 f, g 2+4
  5. 5 A 2
  6. 6 h, i, j, k 4+4+4+4
GeSHi ©


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: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. DATA:                 DATA:
  2.   BEGIN OF struc1       BEGIN OF struc2,
  3.     a(1) TYPE c           a(1) TYPE c,
  4.     x(1) TYPE x           b(1) TYPE c,
  5.   END OF struc1.        END OF struc2.
GeSHi ©

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: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. DATA:                 DATA:
  2.   BEGIN OF struc3       BEGIN OF struc4,
  3.     a(2) TYPE c           a(8) TYPE c,
  4.     n(6) TYPE n           i    TYPE i,
  5.     i    TYPE i           f    TYPE f,
  6.   END OF struc3.        END OF struc4.
GeSHi ©

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: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. DATA:                 DATA:
  2.   BEGIN OF struc5       BEGIN OF struc6,
  3.     a(1) TYPE x           a(1) TYPE x,
  4.     b(1) TYPE x           BEGIN OF struc0,
  5.     c(1) TYPE c             b(1) TYPE x,
  6.   END OF struc5.            c(1) TYPE c,
  7.                           END OF struc0,
  8.                         END OF struc6.
GeSHi ©

Eine Zuweisung struc7 = struc8 und umgekehrt ist möglich, weil die Fragmentsicht bis zum vorletzten Fragment p der kürzeren Struktur struc7 übereinstimmt.

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. DATA:                 DATA:
  2.   BEGIN OF struc7       BEGIN OF struc8,
  3.     a    TYPE i           a    TYPE i,
  4.     p(8) TYPE p           p(8) TYPE p,
  5.     c(1) TYPE c           c(5) TYPE c,
  6.   END OF struc7.          o(8) TYPE p,
  7.                         END OF struc8.
GeSHi ©
Quinn1225
..
..
 
Posts: 30
Joined: Thu Jan 02, 2003 4:16 pm


Return to ABAP® für Anfänger

Who is online

Users browsing this forum: No registered users and 3 guests