Verwendung importierter interner Tabellen

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

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
9 Beiträge • Seite 1 von 1
9 Beiträge Seite 1 von 1

Verwendung importierter interner Tabellen

Beitrag von Boon (ForumUser / 12 / 4 / 0 ) »
Hey,

ich möchte eine interne Tabelle in eine Methode exportieren, um dort die Ausgabe über ein ALV zu implementieren. Da der Import einer internen Tabelle nur über den Umweg mit Types möglich ist wollte ich fragen, wie ich den die importierte Tabelle den nun weiter verarbeiten kann, so dass ich den Inhalt mithilfe des ALVs ausgeben kann. Sobald ich den Importparameter bei Changing einsetze, tritt die Fehlermeldung auf, dass ich diesen nicht verändern darf. Wenn ich den Inhalt der importierten interne Tabelle in eine andere selektieren möchte, erscheint der Fehler, dass dieser kein Tabellentyp sei. Bin leider ein richtiger Anfänger in ABAP und ich finde das schon einen komplexen Einstieg.

Code: Alles auswählen.

class ZDBS_CDATAELEMENT definition
  public
  create public .

public section.
  TYPES lt_tadir_tab TYPE TABLE OF tadir.
  METHODS import_element_tab
    IMPORTING
     li_tab TYPE lt_tadir_tab.

protected section.
private section.

ENDCLASS.

CLASS ZDBS_CDATAELEMENT IMPLEMENTATION.
METHOD import_element_tab.
    DATA go_alv TYPE REF TO cl_salv_table.
    DATA lwa_tadir TYPE TABLE OF tadir.

  TRY.
     CALL METHOD cl_salv_table=>factory
       IMPORTING
         r_salv_table = go_alv
        CHANGING
          t_table = li_tab.
    ENDTRY.

   go_alv->display( ).

  ENDMETHOD.
ENDCLASS.

REPORT ZDBS__KUNDENOBJEKTE.

DATA:
**   Interne Tabellen
       gi_tdevc TYPE TABLE OF tdevc
      ,gi_tadir TYPE TABLE OF tadir

**   Arbeitsbereiche
      ,gwa_tdevc LIKE LINE OF gi_tdevc
      ,gwa_tadir LIKE LINE OF gi_tadir

**   Klasseninstanzen
      ,cdatelement TYPE REF TO ZDBS_CDATAELEMENT.

** DATA go_alv TYPE REF TO cl_salv_table.

START-OF-SELECTION.
     SELECT-OPTIONS p_object FOR gwa_tadir-object DEFAULT 'Y*' TO 'Z*'.

** Daten laden
SELECT * FROM tadir INTO TABLE gi_tadir WHERE obj_name IN p_object AND object = 'DTEL' .

CREATE OBJECT cdatelement TYPE ZDBS_CDATAELEMENT.

 CALL METHOD cdatelement->import_element_tab( EXPORTING li_tab = gi_tadir ).

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


Re: Verwendung importierter interner Tabellen

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Hi!

Über die Transaktion SE11 kannst du dir einen "Tabellentyp" zur Struktur TADIR suchen. z.B.: SCTS_TADIR
(Verwendungsnachweise->Tabellentyp)
Diesen TYP kannst du dann bei allen Schnittstellen die du schreibst einsetzen.

Die Meldung bzgl. CHANGING kommt deswegen, weil das ALV-Grid den Parameter OUTTAB als CHANGING definiert hat. Das hat den Grund weil das ALV-Grid auch die Möglichkeit bietet die Daten zu verändern und die Werte werden dann in genau jene Tabelle die bei OUTTAB angegeben ist zurückgeschrieben.

Du musst also nun entscheiden:
Sollen Änderungen im ALV erlaubt sein, dann sollte deine Methode auch CHANGING-Parameter verwenden.
Ansonsten kannst du mit der Checkbox "Wert-Übergabe" den Parameter als Wert übergeben lassen, womit er beim CHANING vom ALV-Grid keine Probleme mehr macht. Aber ACHTUNG: Dann wird die Tabelle intern 1:1 kopiert, was bei großen Tabellen zu Speicherengpässen führen könnte.
Boon hat geschrieben:Wenn ich den Inhalt der importierten interne Tabelle in eine andere selektieren möchte, erscheint der Fehler, dass dieser kein Tabellentyp sei.
Das verstehe ich jetzt nicht. Was willst du machen? Beispiel?

Lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Boon

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Verwendung importierter interner Tabellen

Beitrag von Boon (ForumUser / 12 / 4 / 0 ) »
Werde deine Lösungsansätze gleich ausprobieren. Danke!

Hier als Beispiel:

SELECT * FROM li_tab INTO TABLE lwa_tadir.

Da erhalte ich als Fehlermeldung, dass li_tab nicht als Tabelle definiert ist. Ist logisch^^. Mein Denkfehler

Re: Verwendung importierter interner Tabellen

Beitrag von Boon (ForumUser / 12 / 4 / 0 ) »
Werde deine Lösungsansätze gleich ausprobieren. Danke!

Hier als Beispiel:

SELECT * FROM li_tab INTO TABLE lwa_tadir.

Da erhalte ich als Fehlermeldung, dass li_tab nicht als Tabelle definiert ist. Ist logisch^^. Mein Denkfehler

Re: Verwendung importierter interner Tabellen

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Jetzt versteh ich was du willst:
Du willst Daten aus der internen Tabelle auslesen!
Dazu brauchst du READ TABLE bzw. LOOP AT
SELECT ist nur für Datenbankabfragen vorgesehen!
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Verwendung importierter interner Tabellen

Beitrag von Boon (ForumUser / 12 / 4 / 0 ) »
Das Problem ist, dass li_tab bei mir keine Tabelle ist. Das würde nicht funktionieren, da ich eine interne Tabelle importieren möchte und ich bisher über den Umweg mit TYPES gegangen bin. wa_tadir ist bei mir aber eine Tabelle vom Typ tadir. Aus diesem grund hat mir LOOP AT bisher noch nicht geholfen, da folgende fehlermeldung erscheint: "Es wurde versucht zwei Datenobjekte aufeinander zu kopieren"

Re: Verwendung importierter interner Tabellen

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
WOAH!
Du verwechselst gerade Äpfel mit Birnen!

WA_TADIR ist eine STRUKTUR.
IT_TAB ist eine INTERNE TABELLE.
TADIR ist eine DATENBANKTABELLE und gleichzeitig eine STRUKTUR

Über IT_TAB hast du KEINEN Zugriff auf die Datenbanktabelle von der die Daten stammen, sondern nur auf das Ergebnis der Datenbankabfrage.
(In JAVA wäre eine "interne Tabelle" mit der Struktur der Datenbanktabelle sowas ähnliches wie das SQL-Result)

IMPORTING bedeutet in ABAP "übergeben" von Parameter an eine Methode.

Kurzes Beispiel zur Veranschaulichung:

Code: Alles auswählen.

data: 
  lt_tadir type standard table of tadir with default key, "<-- interne Tabelle
  ls_tadir type tadir. "<-- interne Struktur

select *
  from tadir "<-- Datenbanktabelle
  into table lt_tadir.

* Verarbeitung von mehreren Zeilen des Ergebnisses
loop at lt_tadir into ls_tadir. 
...
endloop.

* Verarbeitung von einer Zeile des Ergebnisses
read table lt_tadir into ls_tadir index 1.
if sy-subrc eq 0.
...
endif.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Verwendung importierter interner Tabellen

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Dann gibt es in ABAP noch wie du bereits festgestellt hast das TYPES Schlüsselwort.
Damit werden DatenTYPEN definiert:

Code: Alles auswählen.

types: tt_tadir type standard table of tadir with default key.
Erst mit DATA wird daraus eine Variable (interne Tabelle) die mit Daten befüllt werden kann.

Code: Alles auswählen.

data: lt_tadir type tt_tadir.
Alles was mit TYPES für das aktuelle Programm angelegt werden kann, lässt sich über das sog. DDIC (DataDictionary; SE11) von SAP auch GLOBAL für das ganze System definieren. Alles was für Schnittstellen von Klassen und Funktionsbausteinen benötigt wird, würde ich empfehlen dort zu definieren.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Boon

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Verwendung importierter interner Tabellen

Beitrag von Boon (ForumUser / 12 / 4 / 0 ) »
Ok vielen Dank dir. Deine Erklärung oben hat mir die Lösung gegeben. Jetzt sind ein paar Knoten gelöst

Seite 1 von 1

Vergleichbare Themen

6
Antw.
2662
Views
Verwendung interner Tabellen
von phil1982 » 02.08.2007 14:09 • Verfasst in ABAP® für Anfänger
2
Antw.
1585
Views
Verwendung von mehreren Tabellen in DB-Views
von ST22 » 17.04.2008 10:34 • Verfasst in ABAP® Core
2
Antw.
1195
Views
Verlgeich Interner Tabellen
von Ibiza90 » 15.09.2014 11:26 • Verfasst in ABAP® für Anfänger
1
Antw.
1303
Views
Perform mit Übergabe interner Tabellen
von Margolwes » 27.02.2009 11:04 • Verfasst in ABAP® Core
17
Antw.
7781
Views
Spalten Interner Tabellen nacheinander auslesen.
von JulDen » 13.02.2018 18:33 • 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

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.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 2 Tagen von Bright4.5 1 / 585
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2213
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8810