interne Tabellen


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

Moderatoren: Jan, Steff

interne Tabellen

Beitragvon bohne » 27.11.2004, 16:37

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
bohne
Specialist
 
Beiträge: 437
Registriert: 21.07.2004, 21:49
Dank erhalten: 0 mal

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Beitragvon Gast » 28.11.2004, 15:55

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.
 
Gast
 

Beitragvon bohne » 29.11.2004, 08:30

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
bohne
Specialist
 
Beiträge: 437
Registriert: 21.07.2004, 21:49
Dank erhalten: 0 mal

Beitragvon Gast » 29.11.2004, 09:58

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.
 
Gast
 

Beitragvon bohne » 29.11.2004, 17:09

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
bohne
Specialist
 
Beiträge: 437
Registriert: 21.07.2004, 21:49
Dank erhalten: 0 mal

Editor Hilfe

Beitragvon meinrad » 29.11.2004, 18:01

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.
meinrad
ForumUser
 
Beiträge: 67
Registriert: 06.03.2003, 15:24
Wohnort: Südbaden
Dank erhalten: 0 mal

Beitragvon bohne » 30.11.2004, 00:32

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.
bohne
Specialist
 
Beiträge: 437
Registriert: 21.07.2004, 21:49
Dank erhalten: 0 mal

Beitragvon Hermann » 30.11.2004, 10:17

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
Hermann
 

header line

Beitragvon GastX » 30.11.2004, 10:52

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
GastX
Specialist
 
Beiträge: 249
Registriert: 26.07.2004, 08:45
Wohnort: Detmold
Dank erhalten: 5 mal
Ich bin: Berater/in

Beitragvon bohne » 30.11.2004, 18:38

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
bohne
Specialist
 
Beiträge: 437
Registriert: 21.07.2004, 21:49
Dank erhalten: 0 mal

Beitragvon GastX » 01.12.2004, 11:34

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]
GastX
Specialist
 
Beiträge: 249
Registriert: 26.07.2004, 08:45
Wohnort: Detmold
Dank erhalten: 5 mal
Ich bin: Berater/in

Beitragvon ewx » 01.12.2004, 11:39

Bohne,

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

Enno.
ewx
Top Expert
 
Beiträge: 3338
Registriert: 04.08.2003, 19:55
Wohnort: Schleswig-Holstein
Dank erhalten: 194 mal

Beitragvon bohne » 01.12.2004, 16:22

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.
bohne
Specialist
 
Beiträge: 437
Registriert: 21.07.2004, 21:49
Dank erhalten: 0 mal

Beitragvon ewx » 01.12.2004, 16:40

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.
ewx
Top Expert
 
Beiträge: 3338
Registriert: 04.08.2003, 19:55
Wohnort: Schleswig-Holstein
Dank erhalten: 194 mal

Beitragvon bohne » 01.12.2004, 17:45

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
bohne
Specialist
 
Beiträge: 437
Registriert: 21.07.2004, 21:49
Dank erhalten: 0 mal

Nächste

Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
Große Umsatzprobe Differenz SAPF190
vor 17 Stunden von wreichelt 1 Antw.
gelöst CL_ABAP_CLASSDESCR und Syntaxfehler
vor 10 Stunden von GastX 4 Antw.
gelöst Parameter-ID für Z-Programme einrichten
vor 15 Stunden von Roddy 2 Antw.
PDF-Datei nach Upgrade deutlich zu groß
vor 2 Tagen von ewx 1 Antw.
Vier-Augen-Prinzip auf dem Geschäftspartner
vor 2 Tagen von ralf.wenzel 3 Antw.

  Ähnliche Beiträge beta
interne tabellen
30.07.2004, 09:50 von LordDeath 3 Antw.
Interne Tabellen mit Key
13.10.2004, 12:47 von Nicole 4 Antw.
Interne Tabellen
19.01.2005, 17:05 von Gino 4 Antw.
interne tabellen
02.06.2005, 12:29 von rolle 3 Antw.
interne Tabellen
20.07.2005, 10:46 von niermaj 8 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

Feedback ...?

Was können wir verbessern? Hinterlasse deine Kontaktdaten, wenn du eine direkte Antwort möchtest.

... Absenden!
cron