interne Tabellen

Getting started ... Alles für einen gelungenen Start.
24 Beiträge • Seite 1 von 2 (current) Nächste
24 Beiträge Seite 1 von 2 (current) Nächste

interne Tabellen

Beitrag von bohne (Specialist / 437 / 0 / 0 ) »
Hallo Zusammen!
Mich würde es interessieren was man unter einer
internen Tabelle in Abap versteht.

1.Was ist an diesen internen Tabellen so gut?
2.Wie kann ich eine interne Tabelle definieren?
(Muss ich vorher etwas anderes tun z.B eine andere
Tabelle anlegen??)
3.Wie könnte ich mit Abap z.B eine interne Tabelle
definieren und Datensätze anfügen
BSP: Peter,Hans,John,Uli,Gerd
und diese wieder aus dieser internen Tabelle
auslesen?

Grüße
bohne

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


Beitrag von Gast ( / / 0 / 3 ) »
ad1) Interne Tabellen sind Konstrukte, die es einem ermöglichen größere Datenmengen in Tabellenform im Speicher zu halten (im Grunde ähnlich einem Array). Der Vorteil liegt aber in den Möglichkeiten, die interne Tabellen zur Verfügung stellen (Read, Insert, etc.)
Das erleichtert die Programmierung im Business-Bereich erheblich.

ad2) z.B. data: maraitab type standard table of type mara.
oder
data: maraitab type mara occurs 0.
Eine Tabelle im DDIC muß man dazu nicht anlegen (man kann). Es geht auch über die types-Anweisung (siehe F1-Hilfe zu types).

ad3) siehe Punkt 2. Datensätze an-/einfügen mit append, insert, collect. Datensätze lesen mit z.b. read.

Beispiel:

Code: Alles auswählen.

data: itab type standard table of text200 with header line.

itab = 'Peter'.
append itab.
itab = 'Hans'.
append itab.
itab = 'Uli'.
append itab.
itab = 'Gerd'.
append itab.

loop at itab.
  write: / itab.
endloop.

Beitrag von bohne (Specialist / 437 / 0 / 0 ) »
Hi!
Mir ist da noch einiges unklar.
Der Typ von "'peter'" ist nicht in den Typ von "itab " konvertierbar.
weil "with header line" fehlt. Was ist "with header line"
So lautet die Fehlermeldung!


*Code:
data: itab type standard table of text200 .
itab = 'Peter'.
append itab.
itab = 'Hans'.
append itab.
itab = 'Uli'.
append itab.
itab = 'Gerd'.
append itab.

loop at itab.
write: / itab.
endloop.

Außerdem muss eine interne Tabelle sich immer eine auf bereits bestehende Tabelle beziehen.
"Text200" gibt es bereits im Sytstem.
((((Was ist das für eine Tabelle?))))
(((( Was ist "with header line"))))
Kann ich nicht eine interne Tabelle anlegen ohne Bezug auf ein im System vorhandene Tabelle
oder Datenelement ?
Warum kann ich z.B nicht sagen

data: itab type standard table of hallo.
itab = 'Hans'.
append itab.
loop at itab.
write: / itab.
endloop.

Grüße

Beitrag von Gast ( / / 0 / 3 ) »
bohne hat geschrieben:Hi!
Mir ist da noch einiges unklar.
Der Typ von "'peter'" ist nicht in den Typ von "itab " konvertierbar.
weil "with header line" fehlt. Was ist "with header line"
So lautet die Fehlermeldung!
With header line erzeugt eine interne Tabelle mit Kopfzeile. Damit spart man sich einen Arbeitsbereich (workarea).
Man kann natürlich auch damit arbeiten, man müßte dann zusätzlich folgendes definieren:

data: wa type text200.
bohne hat geschrieben: Außerdem muss eine interne Tabelle sich immer eine auf bereits bestehende Tabelle beziehen.
"Text200" gibt es bereits im Sytstem.
Wie bereits erwähnt: Nein, eine interne Tabelle muß sich nicht auf eine bereits bestehende Tabelle beziehen. Bitte schau Dir dazu die F1-Hilfe zum Befehl 'types' an. Damit können lokale Typen im Programm definiert werden, auf deren Basis man ebenfalls eine interne Tabelle definieren kann.

Text200 ist im übrigen keine Tabelle, sondern lediglich ein Datenelement. Die interne Tabelle wird definiert mit:

data: itab type standard table of text200.

bohne hat geschrieben: Warum kann ich z.B nicht sagen

data: itab type standard table of hallo.
itab = 'Hans'.
append itab.
loop at itab.
write: / itab.
endloop.

Grüße
Das kannst Du, aber nur, wenn Du vorher 'hallo' als Datenelement(Struktur) definiert hast (mit types), z.B.:

Code: Alles auswählen.

types: begin of hallo,
         feld1(100) type c,
       end of hallo. 

Beitrag von bohne (Specialist / 437 / 0 / 0 ) »
Hallo!

Also ich habe das genau so eingegegeben und bekomme
darufhin folgende Fehlermeldung:

Der Typ von "'ITAB'" ist nicht in den Typ von "Hans " konvertierbar.
weil "with header line" fehlt. Was ist "with header line"


Code: Alles auswählen.

REPORT  ZINTERN                                              .

types: begin of hallo, 
         feld1(100) type c, 
       end of hallo. 


data: itab type standard table of hallo. 
itab = 'Hans'. 
append itab. 
loop at itab. 
write: / itab. 
endloop. 

Grüße

Editor Hilfe

Beitrag von meinrad (ForumUser / 67 / 0 / 0 ) »
Hallo,
Da es keinen Sinn macht die gesamte SAP_Hilfe des Editors zu kopieren, rate ich dir in der Hilfe den
ABAP_Begriff "Standard Table" einzugeben.
Des Gleichen hilft das offfizielle SAP_Handbuch/HIlfe
die auch im Netz steht weiter.
http://help.sap.com/
"data begin of ... occurs" ist seit Release 4xx veraltet, aber noch oft üblich. Definiert eine Tabelle, die aus zwei Teilen besteht: Kopfzeile(Feldleiste/Arbeitsbereich) und Tabellenkörper.
Da hier unterschiedliche Objekte mit dem gleichen Namen bezeichnet werden, widerspricht dies der reinen Programmierlehre/ OBJEKT_ORIENTIERUNG.
Da sich auf den Arbeitsbereich und den Tabellenkörper in der Regel unterschiedliche Anweisungen beziehen (LOOP auf den Körper, MOVE auf die Kopfzeile), gibt es in der Regel keine Probleme.
Wenn man bei diesen "altmodischen" Tabellen den Körper direkt ansprechen will, schrebt man ITAB[].
z.B. ITAB1[] = ITAB[2]. => kopiert alle Zeilen der Tabelle. Die Kopfzeilen/Arbeitsbereiche aber nicht.

Beitrag von bohne (Specialist / 437 / 0 / 0 ) »
Hi!
Vielen Dank für die Bemühungen aber ich bin ein Abap
Anfänger und versuche erst die Grundzüge zu kapieren
und mit der Antwort auf meine Frage hin warum man hier bei dem Code eine Fehlermeldung bekommt
bin ich ehrlich gesagt nicht arg weiter gekommen

Hier nochmal der Code
(Was fehlt da noch damit geht es auch nicht
itab[] = 'Hans'. )

Code: Alles auswählen.

REPORT  ZINTERN                                              . 

types: begin of hallo, 
         feld1(100) type c, 
       end of hallo. 


data: itab type standard table of hallo. 
itab[] = 'Hans'. 
append itab. 
loop at itab. 
write: / itab. 
endloop. 

Beitrag von Hermann ( / / 0 / 3 ) »
Wenn Du versuchst die Grundzüge zu kapieren, dann fängst Du das ganze meiner Ansicht nach etwas falsch an.
Du solltest Dir erstmal die Grundlagen über interne Tabellen in der Dokumentation durchlesen und erarbeiten, bevor Du anfängst zu programmieren.

Dann wird es leichter, Beispielprogramme zu verstehen und auch leichter, bestimmte Dinge hier zu erklären.

Ich gehe mal davon aus, Du hast ein eigenes Mini-SAP installiert hast (o.ä.). Schau Dir in der Hilfe, die Kapitel zu den internen Tabellen an. Das hilft auf jeden Fall, die Grundlagen zu verstehen.

siehe auch Transaktion ABAPDOCU.

Hermann

header line

Beitrag von GastX (Specialist / 277 / 4 / 18 ) »
Hallo Bohne,
wenn Du eine Tabelle mit Kopfzeile definierst, dann erhältst Du einen Datenbereich mit gleichem Namen(!) wie die Tabelle, über den du recht nett Daten für diese Tabelle ansprechen kannst.
Konkret und ausgehend vom Coding, welches "Gast" weiter oben in seiner Antwort stehen hatte:

Code: Alles auswählen.

data: itab type standard table of text200 with header line. " definiert Tabelle und Kopfzeile

itab = 'Peter'. "hier füllst du die Kopfzeile, nicht die Tabelle !!! 
append itab.    "hier hängst du die Kopfzeile an die Tabelle 
...
...
loop at itab. "der loop stellt die Daten der Tabelle in die Kopfzeile 
  write: / itab. "hier gibst du die Kopfzeile(!) aus
endloop. 
Wird die Tabelle ohne Kopfzeile definiert, z.B.

Code: Alles auswählen.

types: begin of hallo, 
         feld1(100) type c, 
       end of hallo. 

data: itab type standard table of hallo.
dann geht folgendes Coding halt nicht, da keine Zeile / kein Datenbereich "itab" definiert wurde:

Code: Alles auswählen.

itab = 'Hans'.
Hier muss man sich selber einen Datenbereich definieren, aus dem heraus man die Daten an die Tabelle anhängt, komplett sieht das dann so aus:

Code: Alles auswählen.

types: begin of hallo, 
         feld1(100) type c, 
       end of hallo. 

data: itab type standard table of hallo. "die Tabelle 

data: zwischen type hallo. "der eigene Datenbereich


zwischen = 'Hans'.         "füllt den Datenbereich 
append zwischen to itab.   "hängt selbstdef. Datenbereich an Tabelle itab an 
...
...
loop at itab into zwischen.  " der loop stellt die Daten in den selbstdefinierten Arbeitsbereich
write: / zwischen. "schreibe Datenbereich 
endloop.  
Letztlich passiert also das gleiche, wäre noch deutlicher, wenn ich den Datenbereich nicht "zwischen" sondern ebenfalls "itab" nennen würde.
Gruß, Frank

Beitrag von bohne (Specialist / 437 / 0 / 0 ) »
Hallo Zusammen!
Zunächst vielen Dank für Eure Bemühungen.
Ich möchte niemanden nerven aber ist diese Kopfzeile
soetwas wie Spaltenname?
Ich weiss damit wird zwar ein Datenbereich definiert
(vergleichbar wie wenn ich eine Variable definieren
würde reserviere quasi einen Speicherbereich)
trotzdem aber tue ich mich mit dem Begriff Kopfzeile
in dem Zusammnhang schwer.
Wie muss man sich das vorstellen?
Oder ist damit vielmehr ein Zeilenname gemeint.
Immer wenn ein neuer Datensatz hinzugefügt wird
geht diese Kopfzeile voran ????


Grüße

Beitrag von GastX (Specialist / 277 / 4 / 18 ) »
Nein.
Genauer:
Du schreibst Daten in eine Tabelle mit Append oder Insert, aber dabei sprichst Du die Tabellenzeilen nicht direkt an.
Stattdessen gibst Du an, woher die Daten kommen sollen.

Entweder benutzt Du dabei Kopfzeilen oder einen selbstdefinierten Arbeitsbereich (s. Beispiele oben).

In beiden Fällen ist das eine Datenstruktur, die denselben(!) Aufbau wie eine Tabellenzeile hat.
Erstmal ohne Kopfzeile: Bei einer Tabelle wie dieser

Code: Alles auswählen.

Code: 
types: begin of hallo, 
         vorname(100)  type c,
         nachname(100) type c,
         comment(200)  type c 
       end of hallo. 

data: itab type standard table of hallo. 

data: wa type hallo.
hast Du drei Spalten, d.h. jede Zeile enthält drei Felder.
WA ist ebenfalls wie eine Tabellenzeile aufgebaut. Füllen kannst Du die Tabelle ja mit dem "Umweg" über wa:

Code: Alles auswählen.

wa-vornahme = 'ernst'.
wa-nachnahme = 'august'.
wa-comment = 'kein kommentar'.
append wa to hallo.
Du hängst hier also die "Zeile" wa an die Tabelle hallo an.

Wenn Du das mit Kopfzeile tust, bleibt das Prinzip das gleiche. Die Kopfzeile spielt die Rolle von "wa", hat aber "zufällig" den gleichen Namen wie die dazugehörige Tabelle und muss / darf daher nicht explizit angegeben werden:

Code: Alles auswählen.

types: begin of hallo, 
         vorname(100)  type c,
         nachname(100) type c,
         comment(200)  type c 
       end of hallo. 

data: itab type standard table of hallo occurs 0 with header line.

* hier wird die Kopfzeile gefüllt, analog zu WA aus dem vorigen Beispiel, d.h. mit der Tabelle hat das eigentlich nix zu tun
hallo-vornahme = 'ernst'.
hallo-nachnahme = 'august'.
hallo-comment = 'kein kommentar'.

* hier wird die Kopfzeile an die Tabelle angehängt.
append hallo. 
Kopfzeile und Tabelle haben den gleichen Namen, Abap verlangt daher diese Syntax, obwohl "append hallo to hallo" konsistenter wäre und genauer beschreiben würde, was passiert: es wird nämlich die (Kopf-)Zeile hallo an die Tabelle hallo angehängt.

Verwirrung komplett?
Frank[/i]

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Bohne,

schau dir die beiden Beispiele von Frank dem Geduldigen am Besten mal im Debugger an. Dann sollte es eigentlich klar werden.

Enno.

Beitrag von bohne (Specialist / 437 / 0 / 0 ) »
Hi!
Was mache hier falsch. Ich bin am Verzweifeln:

Code: Alles auswählen.

REPORT  ZNEU .
types: begin of hallo, 
         vorname(100)  type c, 
         nachname(100) type c, 
         comment(200)  type c,
       end of hallo. 

data: itab type standard table of hallo occurs 0 with header line.
hallo-vorname = 'ernst'. 
hallo-nachname = 'august'. 
hallo-comment = 'kein kommentar'. 
append hallo.
 
loop at hallo. 
  write: / hallo. 
endloop. 
geht auch nicht

Code: Alles auswählen.

REPORT  ZNEU .
types: begin of hallo, 
         vorname(100)  type c, 
         nachname(100) type c, 
         comment(200)  type c,
       end of hallo. 

data: itab type standard table of hallo. 
data: wa type hallo.

wa-vorname = 'ernst'. 
wa-nachname = 'august'. 
wa-comment = 'kein kommentar'. 
append wa to hallo.

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »

Code: Alles auswählen.

types: begin of hallo,
         vorname(100)  type c,
         nachname(100) type c,
         comment(200)  type c,
       end of hallo.

data: itab type hallo occurs 0 with header line.
itab-vorname = 'ernst'.
itab-nachname = 'august'.
itab-comment = 'kein kommentar'.
append itab.

loop at itab.
  write: / itab.
endloop.

Code: Alles auswählen.

append wa to itab.

Beitrag von bohne (Specialist / 437 / 0 / 0 ) »
Hi ewx!

Hier bekomme ich die Fehlermeldung
Die Angabe occurs 0 ist nicht vorgesehen

Code: Alles auswählen.

REPORT  ZNEU . 
types: begin of hallo, 
         vorname(100)  type c, 
         nachname(100) type c, 
         comment(200)  type c, 
       end of hallo. 

data: itab type standard table of hallo occurs 0 with header line. 
hallo-vorname = 'ernst'. 
hallo-nachname = 'august'. 
hallo-comment = 'kein kommentar'. 
append hallo. 
  
loop at hallo. 
  write: / hallo. 
endloop. 

Und das hat mit
append wa to itab.
soweit geklappt nun kann ich aber den Inhalt nicht ausgeben
loop at itab.

Code: Alles auswählen.

REPORT  ZNEU .

types: begin of hallo,
         vorname(100)  type c,
         nachname(100) type c,
         comment(200)  type c,
       end of hallo.

data: itab type standard table of hallo.
data: wa type hallo.

wa-vorname = 'ernst'.
wa-nachname = 'august'.
wa-comment = 'kein kommentar'.
append wa to itab.

loop at itab. 
  write: / itab. 
endloop. 
Grüße
bohne

Vergleichbare Themen

3
Antw.
409
Views
4
Antw.
3394
Views
Interne Tabellen
von Fools » 19.01.2005 16:04 • Verfasst in ABAP® für Anfänger
8
Antw.
3546
Views
interne Tabellen
von niermaj » 20.07.2005 10:15 • Verfasst in ABAP® für Anfänger
1
Antw.
1165
Views
RFC und interne Tabellen
von Mr.Black » 23.01.2007 18:22 • Verfasst in ABAP® Core
4
Antw.
3344
Views
Interne Tabellen mit Key
von Nicole » 13.10.2004 11:04 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

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

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 107
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 140