Problem beim Loopen einer internen Tabelle

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

Problem beim Loopen einer internen Tabelle

Beitrag von kurdy91x (ForumUser / 3 / 3 / 0 ) »
Hallo,

ich soll ein Suchprogramm für eine Tabelle schreiben.
Dass will ich mit einer select anweisung umsetzen.
Mein Problem ist jedoch, dass der Kompiler die Loop nicht richtig ausführt - vielleicht habe ich auch einen wichtigen Punkt übersehen - wäre nett wenn ihr mal kurz schauen könnt.

Code: Alles auswählen.

* Beschreibung: Programm zum durchsuchen der Tabelle YSD_SEARCH
*---------------------------------------------------------------------*
REPORT YSD_SEARCH.

TABLES YSD_die_richtige_tabelle.

TYPES: BEGIN OF T_DATA,
  MANDT     TYPE MANDT,
  KUNWE     TYPE KUNWE,
  KUNRE     TYPE KUNRE,
END OF T_DATA .

DATA:  tempTable TYPE TABLE OF T_DATA WITH HEADER LINE,
       tempLine TYPE T_DATA.

* selektionsfenster
*---------------------------------------------------------------------*

PARAMETERS:  s_KUNWE(15) TYPE c,  "NO-DISPLAY.
                       s_KUNRE(15) TYPE c.

START-OF-SELECTION.

* getData
*---------------------------------------------------------------------*

  SELECT *
    FROM YSD_die_richtige_tabelle
    INTO tempTable.
  ENDSELECT.

* Bis hierher füllt er tempTable mit den Datensätzen und soweit erst einmal alles gut - Jedoch springt er danach nicht in die Loop sondern überspringt sie jedes mal

* showData
*---------------------------------------------------------------------*

  LOOP AT tempTable INTO tempLine.
    WRITE:   tempLine-LIFNR,
             tempLine-HERK,
             tempLine-KUNWE,
             tempLine-VONR,
             tempLine-KUNRE.
  ENDLOOP.

  WRITE  'KTHXBB'.
Als Alternative habe ich auch über SE11 einen "Search Helper" gebaut, dieser tut was er soll.
Aber ich komm einfach nicht darauf warum er den Loop nicht ausführt.

Gruß
Felix

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


Re: Problem beim Loopen einer internen Tabelle

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »

Code: Alles auswählen.

  SELECT *
    FROM YSD_die_richtige_tabelle
    INTO tempTable.
  ENDSELECT.
Nach diesem Select ist tempTable leer. Dann kann man auch nicht drüber loopen.
entweder INTO TABLE oder APPEND tempTable einbauen.

Verzichte am besten auf WITH HEADER LINE, ist sowieso veraltet und braucht man nicht. Hier erschwert sie die Fehlersuche, da unter einem Namen zwei DATAs angesprochen werden können.

Folgende Benutzer bedankten sich beim Autor JHM für den Beitrag:
kurdy91x

Gruß Hendrik

Re: Problem beim Loopen einer internen Tabelle

Beitrag von kurdy91x (ForumUser / 3 / 3 / 0 ) »
JHM hat geschrieben:

Code: Alles auswählen.

  SELECT *
    FROM YSD_die_richtige_tabelle
    INTO tempTable.
  ENDSELECT.
Nach diesem Select ist tempTable leer. Dann kann man auch nicht drüber loopen.
entweder INTO TABLE oder APPEND tempTable einbauen.

Verzichte am besten auf WITH HEADER LINE, ist sowieso veraltet und braucht man nicht. Hier erschwert sie die Fehlersuche, da unter einem Namen zwei DATAs angesprochen werden können.
Habe den Header entfernt und die Select-Anweisung korrigiert (mit INTO Table).
Er führt nun nach der Selectanweisung erfolgreich den Loop aus.

Vielen Dank!

Aber warum er mir davor beim debugging angezeigt hat, dass tempTable nach der Select Anweisung gefüllt wurde - im loop aber nicht bearbeitet wurde verstehe ich immer noch nicht.

Re: Problem beim Loopen einer internen Tabelle

Beitrag von PeterPaletti (Specialist / 348 / 32 / 97 ) »
Du hast mit der SELECT Anweisung die Daten von der Datenbank in die Kopfzeile deiner Tabelle tempTable gelesen. Wenn du im Debugger das Feld tempTable angeshcuat hast, hat er dir nur die Kopfzeile gezeigt und da waren die Daten drin.
Die Daten sind aber nie in die Tabelle selbst gelangt.Dazu fehlte das APPEND tempTable.

Gruß
Peter

Folgende Benutzer bedankten sich beim Autor PeterPaletti für den Beitrag:
kurdy91x


Re: Problem beim Loopen einer internen Tabelle

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
kurdy91x hat geschrieben:Aber warum er mir davor beim debugging angezeigt hat, dass tempTable nach der Select Anweisung gefüllt wurde - im loop aber nicht bearbeitet wurde verstehe ich immer noch nicht.
tempTable wurde als Standardtabelle mit Headerzeile definiert. Das Programm führt also eine interne Tabelle mit dem Namen tempTable und eine Kopfzeile mit dem Namen tempTable. Der Select hat nur die Kopfzeile gefüllt, nach dem Select stand also in der Kopfzeile der letzte gelesene DB-Satz. Es fehlte die Übernahme der Kopfzeile in die interne Tabelle.

Im neuen Debbuger wird mWn immer beide Variablen angezeigt, im alten Debugger erst mal nur die Kopfzeile. Mittels tempTable[] (zwei eckige Klammern) kann explizit auf die interne Tabelle zugegriffen werden (Editor und Debugger).

Der Zusatz WITH HEADER LINE sollte nicht mehr verwendet werden (ist obsolet), sondern mit expliziten Kopfzeilen gearbeitet werden. Solch eine hast du ja unter tempLine bereits definiert und arbeitest im LOOP damit.
Gruß Hendrik

Re: Problem beim Loopen einer internen Tabelle

Beitrag von Pyro (Specialist / 121 / 14 / 18 ) »
JHM hat geschrieben:
kurdy91x hat geschrieben:Mittels tempTable[] (zwei eckige Klammern) kann explizit auf die interne Tabelle zugegriffen werden (Editor und Debugger).
Noch kurz ergänzend: Wenn du die Variable im Debugger via "tempTable[]" wie oben beschrieben einträgst, bekommst du etwas in der Form zahl x zahl (z.B. 23x4 o.ä.) angezeit. Die erste Zahl zeigt dir dann die Anzahl der Einträge im Tabellen-Body und die zweite die Anzahl der Spalten, welche die Tabelle besitzt. In dem gerade gesagten Beispiel wären es also 23 Datensätze mit jeweils 4 Spalten.

Folgende Benutzer bedankten sich beim Autor Pyro für den Beitrag:
kurdy91x


Re: Problem beim Loopen einer internen Tabelle

Beitrag von kurdy91x (ForumUser / 3 / 3 / 0 ) »
Danke für die ausführlichen Erklärungen!
Das mit der Kopfzeile habe ich davor nicht verstanden gehabt - eigentlich ganz simpel, aber fatal wenn man es falsch benutzt.

Re: Problem beim Loopen einer internen Tabelle

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
kurdy91x hat geschrieben:aber fatal wenn man es falsch benutzt.
Deshalb nicht mehr benutzten ;-)
Im ABAP-OO Kontext sind Kopfzeilen eh nicht möglich. Wenn du jetzt anfängst ABAP zu lernen, musst du nur wissen, das es sie gibt (ebim fremden, alten Code lesen), selber verwenden muss man das nicht.
Gruß Hendrik

Seite 1 von 1

Vergleichbare Themen

9
Antw.
5419
Views
Problem mit Join von internen & DB-Tabellen
von debianfan » 10.11.2017 09:10 • Verfasst in ABAP® für Anfänger
2
Antw.
2095
Views
Problem, mit Wertübergabe bei zwei internen Tabellen
von scott111 » 06.04.2006 21:44 • Verfasst in Dialogprogrammierung
9
Antw.
7821
Views
Problem mit Zeilen einer internen Liste
von ostpower » 22.04.2010 16:49 • Verfasst in ABAP® für Anfänger
2
Antw.
3764
Views
Daten aus internen Tabelle in Tabelle speichern
von Stahle71 » 03.06.2015 11:03 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Daten an Tabelle binden
vor 13 Stunden von Bright4.5 3 / 1485
Regex in where
vor 14 Stunden von tar 6 / 158

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

Daten an Tabelle binden
vor 13 Stunden von Bright4.5 3 / 1485
Regex in where
vor 14 Stunden von tar 6 / 158

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9821