Geschachtelte Selects - wo liegt das Problem

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).

Geschachtelte Selects - wo liegt das Problem

Postby Pascal » Thu Oct 02, 2003 4:28 pm

Hallo zusammen !

Ich verzweifle hier langsam.
Habe folgende geschachtelte Selects programmiert und bekomme kein Ergebnis angezeigt.

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. IF chgdate-low > sy-datum OR chgdate-high > sy-datum.
  2.   MESSAGE e008 WITH 'Datum darf nicht in der Zukunft liegen !'.
  3.   SELECT * FROM  vbak
  4.            WHERE bstzd = addition.
  5.     IF sy-subrc = 0.
  6.       SELECT * FROM cdhdr
  7.                WHERE username   = changer
  8.                AND   objectid   = vbak-vbeln
  9.                AND   objectclas = 'VERKBELEG'
  10.                AND   udate     >= chgdate-low
  11.                AND   udate     <= chgdate-high.
  12.         IF sy-subrc = 0.
  13.           SELECT * FROM cdpos
  14.                    WHERE objectid   = vbak-vbeln
  15.                    AND   objectclas = cdhdr-objectclas
  16.                    AND   changenr   = cdhdr-changenr
  17.                    AND   tabname    = t_name
  18.                    AND   fname      = f_name.
  19.             WRITE: /3 chgdate-low,
  20.                    16 chgdate-high,
  21.                    29 cdpos-tabname,
  22.                    46 cdpos-fname,
  23.                    59 cdhdr-username,
  24.                    71 vbak-bstzd.
  25.             counter = counter + 1.
  26.           ENDSELECT.
  27.         ENDIF.
  28.       ENDSELECT.
  29.     ENDIF.
  30. ENDIF.           "von Datumsprüfung
  31.  
  32. IF counter = 0.
  33.   WRITE 'Kein Datensatz gefunden !'.
GeSHi ©


Ich bekomme immer "Kein Datensatz gefunden !" angezeigt.
Ist es wirklich so simpel, dass kein Datensatz mit o.g. Kriterien vorhanden ist oder habe ich einen Denkfehler bei der Schachtelung der Selects ?

Für jede Form von Hilfe wäre ich euch dankbar :wink:

Pascal
Pascal
 

Postby Walter4536 » Fri Oct 03, 2003 9:44 am

Hallo Pascal,

zur Fehleranalyse würde ich erstmal sukzessive die Tabellen auf entsprechende Einträge prüfen, z.B. mittels SE16. Zunächst einmal Tabelle VBAK. Gibt es dort Einträge auf die die Bedingung bstzd = addition zutrifft? Wert von addition?

Am einfachsten ist es sicherlich, unmittelbar nach den jeweiligen selects einen Breakpoint zu setzen, dann siehst Du sofort, welcher select nicht klappt bzw. keine Daten zurückliefert.

Gruß,
Steff
Walter4536
...
...
 
Posts: 315
Joined: Mon Dec 02, 2002 12:09 pm

Postby Eleanor356 » Mon Oct 06, 2003 9:11 am

Hallo Pascal,

1. bist du sicher , daß die "objectid" richtig gefüllt ist ?
-> gehört hier nicht noch der Mandant vor den Verkaufsbeleg.
2. du hast 2 if-Abfragen in deinem coding , die unnötig sind
(nach Selektion der vbak und cdhdr) -> Übersichtlichkeit.
3. es gibt natürlich einen Fuba (oder wie ich die SAP kenne, mehrere),
die dir die Selektion abnehmen.
-> CHANGEDOCUMENT_READ.

lg Andreas
Eleanor356
....
....
 
Posts: 558
Joined: Thu Aug 14, 2003 7:42 am

Postby Laureen5398 » Mon Oct 06, 2003 11:49 am

Außerdem kannst du dir die Abfrage von SY-SUBRC innerhalb einer Select-Schleife sparen, da SY-SUBRC immer erst NACH Ablauf der Schleife gesetzt wird.

Des weiteren wie schon von den Vorschreibern gesagt, mal überprüfen (SE16) ob tatsächlich Daten gefunden werden müßten. Da die Key-Felder der CDHDR und CDPOS nur Zeichenketten sind, auch mal prüfen, ob die fehlenden "führenden Nullen" vielleicht dran schuld sind.
Laureen5398
...
...
 
Posts: 335
Joined: Thu Jul 31, 2003 10:47 am

Postby Marion1009 » Mon Oct 06, 2003 1:38 pm

Je nachdem was vor diesem Coding passiert,
ist der subrc möglicherweise nicht null.
Weder IF noch SELECT * setzten den subrc.
Damit fliegst du ungewollt raus !

Gruss
Daniel
Marion1009
...
...
 
Posts: 225
Joined: Wed Sep 10, 2003 2:25 pm

Postby Laureen5398 » Mon Oct 06, 2003 4:27 pm

Ähh stimmt nicht ganz. Wenn Werte gefunden und damit die Select-Schleife durchlaufen wird, so ist SY-SUBRC auf jeden Fall 0.

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. tables:  bsik.
  2.  
  3.  
  4. select * from bsik where bukrs = '0001'
  5.                    and   lifnr = '0000011111'.
  6.  
  7.  
  8. select * from bsik where bukrs = '0001'
  9.                    and   lifnr = '0000000011'.
  10.  
  11.   write: / 'bla'.
  12.  
  13.  
GeSHi ©


In diesem Beispiel wird im ersten Select nichts gefunden, folglich ist sy-subrc = 4. In der zweiten Schleife wird was gefunden, die Schleife also durchlaufen und bei der Write-Anweisung innerhalb der Schleife ist sy-subrc = 0.
Laureen5398
...
...
 
Posts: 335
Joined: Thu Jul 31, 2003 10:47 am

Postby Gertrud2025 » Wed Oct 08, 2003 12:16 pm

es liegt daran, daß du beim 2. select keine führenden nullen hast, bzw. kontrollieren solltest, ob die belegnummer im richtigen format übergeben wird.
Gertrud2025
..
..
 
Posts: 24
Joined: Tue Sep 02, 2003 4:21 pm

Postby Willy1492 » Wed Oct 08, 2003 9:16 pm

zzcpak hat geschrieben:Ähh stimmt nicht ganz. Wenn Werte gefunden und damit die Select-Schleife durchlaufen wird, so ist SY-SUBRC auf jeden Fall 0.

zu 2.0 war das noch anders, da war SY-SUBRC nach einem SELECT mit ENDSELECT nicht unbedingt 0, sondern erst nach dem ENDSELECT.
Nachdem ich SAP mal eine elend lange Liste mit SAP-Standard-Programmen geschickt habe, in der dieser Fehler vorkam, habe sie das per Kernel-Patch "gefixt".
Inzwischen ist die SY-SUBRC-Abfrage also einfach nur überflüssig.
Willy1492
....
....
 
Posts: 581
Joined: Tue Dec 03, 2002 4:44 pm

Postby Quinn1225 » Thu Oct 09, 2003 10:08 am

Du könntest den
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. sy-dbcount
  2.  
GeSHi ©

verwenden.
Quinn1225
..
..
 
Posts: 30
Joined: Thu Jan 02, 2003 4:16 pm

Postby Heinz5129 » Wed Mar 24, 2004 3:22 pm

Und ein Einwand von mir Anfänger:

Ich kann mir nicht wirklich vorstellen, dass diese Schachtelung sonderlich performant ist - meiner Meinung nach sollten hier die Überlegungen dringend in Richtung JOIN gehen...

Volker
Heinz5129
..
..
 
Posts: 17
Joined: Fri Mar 19, 2004 9:25 am

Next

Return to ABAP Objects®

Who is online

Users browsing this forum: No registered users and 8 guests