SAP Jobsuche bei DV-Treff
Yeti67
  • Yeti67
  • SAP Forum - Profi Thema Starter
vor 10 Jahre
Hallo,

wir haben eine Query, in der zu Lagerware die letzte Bestellnummer angezeigt werden soll. Leider bringt die Query nur die Erste.

Code:

data: ls_ekpo type ekpo.

clear BESTELLUNG.

select single * from ekpo into ls_ekpo where matnr = MARA-MATNR

and elikz = space

and LOEKZ ne 'L'

and ebeln BETWEEN 4300000000 AND 4599999999.

if sy-subrc = 0.

BESTELLUNG = ls_ekpo-ebeln.

endif.

Was muss wo stehen, damit die letzte Bestell-Nr. angezeigt wird?

Gruss

Yeti67

Förderer

.fetox
vor 10 Jahre
Moin,

SELECT SINGLE liest immer den ersten Datensatz von der Datenbank der die Selektionskriterien erfüllt (Und ich würde mich nie darauf verlassen das die Daten in wie auch immer gearteter Reihenfolge auf der Datenbank stehen).

Ich würde statt SELECT SINGLE einen normalen SELECT ... ENDSELECT verwenden der sich ja wie eine Schleife verhält. Wenn es wirklich die Belegnummer sein soll und nicht so etwas wie Buchungsdatum, dann würde ich das in etwa so machen:

DATA: ls_ekpo type ekpo,

bestellung like ekpo-ebeln.

CLEAR: bestellung.

SELECT SINGLE * FROM ekpo INTO ls_ekpo WHERE matnr EQ mara-matnr

AND elikz EQ space

AND loekz NE 'L'

AND ebeln BETWEEN 4300000000 AND 4599999999.

IF ls_ekpo-ebeln GT bestellung.

bestellung = ls_ekpo-ebeln.

ENDIF.

ENDSELECT.

Das ist natürlich die am wenigsten performanteste Form, besser wäre beim SELECT das ORDER BY kriterium zu verwenden (ob dann SELECT SINGLE noch funktioniert bin ich mir nicht sicher, dann wäre es am elegantesten, ansonsten EXIT nach dem ersten Durchlauf)..

Ungetesteter Code, Gruß,

Olli

Yeti67
  • Yeti67
  • SAP Forum - Profi Thema Starter
vor 10 Jahre
Hallo,

Danke für die schnelle Antwort. Leider bekomme ich zwei Fehlermeldungen.

1)"BESTELLUNG" ist bereits deklariert.

Deaktiviere ich das, kommt folgende Meldung:

Die Schachtelung ist nicht korrekt: Zur Anweisung "ENDSELECT"

existiert keine offene, mit "SELECT" begonnene Kontrollstruktur.

Was nun?

Bin leider absoluter Anfänger in ABAP. ;-)

Gruss

Yeti67

wreichelt
vor 10 Jahre
Hallo,

das war ein Vorschlag mit Data: Bestellung

kann natürlich entfallen wenn das Feld schon definiert ist.

Aus dem Select Single .... muss das Wort Single raus , dann sollte das so funktionieren.

Gruß

Wolfgang

.fetox
vor 10 Jahre
Jup, sorry, das war zwischen tür und angel freihandcoding, natürlich ohne das SINGLE, schrub ich ja weiter oben :)

Ich bau nachher noch mal in Ruhe das Coding für die ORDER BY Klausel auf, das macht Sinn um den Applikationsserver zu entlasten wenn die Tabelle EKPO schon sehr groß ist..

Olli

.fetox
vor 10 Jahre
So,

ORDER BY funktioniert nicht bei SELECT SINGLE, aber bei SELECT UP TO 1 ROWS, damit kann man das Ganze so schreiben:

SELECT ebeln FROM ekpo UP TO 1 ROWS INTO bestellung WHERE matnr EQ mara-matnr

AND elikz eq space

AND loekz ne 'L'

AND ebeln BETWEEN 4300000000 AND 4599999999 ORDER BY ebeln ASCENDING.

" Schleife wird hier nur genau einmal durchlaufen und BESTELLUNG enthält automatisch höchste EBELN

ENDSELECT.

Damit spart man dem Applikationsserver etwas Arbeit, die Datenbank belastet es allerdings genauso, das lässt sich aber leider auch nicht vermeiden.

Grüße,

Olli

Yeti67
  • Yeti67
  • SAP Forum - Profi Thema Starter
vor 10 Jahre
Super, hat geklappt.

Die letzte Bestellung wird nun angezeigt. Wird der WE gebucht ist die nächste offen und wird angezeigt.

Vielen Dank!

Gruss

Yeti67