Zwischen Select und Endselect wird nicht alles selektiert

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
19 Beiträge • Seite 1 von 2 (current) Nächste
19 Beiträge Seite 1 von 2 (current) Nächste

Zwischen Select und Endselect wird nicht alles selektiert

Beitrag von Slim_Chance (ForumUser / 33 / 0 / 0 ) »
Hallo,

in meinem ABAP Report selektiere ich aus der VBRK das Belegintervall 200000 bis 210000 (Select-options) und VKORG 1000 (Parameters).

Komischerweise hat das Programm beim ersten lauf nur die Daten von 200000 bis 201678 per write ausgegeben. Ich habe das Programm dann nocheinmal laufen lassen mit den gleichen Parametern und die Daten waren dann vollständig !!!!!? :oops:

Wie kann sowas passieren?

Ein Ratloser

Slim_Chance

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


Beitrag von black_adept (Top Expert / 4116 / 129 / 951 ) »
Wie soll man darauf antworten ?


Frage: "Mein Auto funktioniert nicht korrekt. Was ist kaputt?"
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von Slim_Chance (ForumUser / 33 / 0 / 0 ) »
Hallo,

hast schon recht. Aber was soll ich für weitere Informationen liefern? Es ist ein einfacher Select über die VBRK mit den genannten Parametern.
Ich kann mir nicht erklären warum das Programm im ersten Lauf anders selektiert als im 2ten. Vielleicht noch folgendes: Bevor ich das Programm das 2te mal hab laufen lassen, bin ich erst noch mit der Transaktion /nse38 neu in das Programm eingestiegen.

Anscheinend ist das Problem anderswo noch nie aufgetreten!

Gruß

Slim_Chance

Beitrag von zzcpak (Expert / 673 / 5 / 68 ) »
hört sich erst mal mysteriös an. Poste doch mal dein Coding, dann erhellt sich das ganze vielleicht ein wenig.

Re: Zwischen Select und Endselect wird nicht alles selektier

Beitrag von Gast ( / / 0 / 3 ) »
Slim_Chance hat geschrieben:Wie kann sowas passieren?
1. Die im Batch erzeugte Liste war vollständig, aber Du hast Dir nur die ersten 10 Seiten angesehen, beim zweiten mal wurde das Programm im Dialog gestartet und Du hast die komplette Liste gesehen.

2. Die Select-Options waren bein ersten Start nicht so belegt wie Du dachtest.

3. Während des ersten SELECT ... ENDSELECT hat parallel ein anderer Prozess neue Einträge eingefügt, Du siehst natürlich dann den Snapshot vom Beginn-Zeitpunkt

...

Re: Zwischen Select und Endselect wird nicht alles selektier

Beitrag von Gast ( / / 0 / 3 ) »
quote="Slim_Chance"]Wie kann sowas passieren?[/quote]
4. Es waren alle Einträge in der Liste, aber wegen fehlendem ORDER BY beim ersten mal nicht in der von Dir erwarteten Reihenfolge.

Beitrag von Slim_Chance (ForumUser / 33 / 0 / 0 ) »
Hallo Allerseits,

das Coding ist im Anhang. Es handelt sich um einen Report, welches die PRODH aus dem Materialstamm mit der PRODH im Beleg vergleicht. Wenn sie unterschiedlich ist, wird sie ausgegeben.

An Gast:

-Punkt 1,2,3,4 -> Kann ich alles ausschliessen

Danke und Gruß

Slim_Chance

Beitrag von Gast ( / / 0 / 3 ) »

Code: Alles auswählen.

  SELECT * FROM vbrk WHERE vbeln IN s_vbeln AND
                           vkorg IN s_vkorg AND
                           erdat IN s_erdat.
    CLEAR flag.
    IF sy-subrc = 0.
Was soll denn die SY-SUBRC-Abfrage hier?

Code: Alles auswählen.

      SELECT * FROM vbrp WHERE vbeln = vbrk-vbeln AND
                               cuobj = space.
        IF sy-subrc = 0.
          SELECT SINGLE matnr vkorg prodh
            INTO CORRESPONDING FIELDS
            OF wa_matnr FROM mvke WHERE matnr = vbrp-matnr AND
                                        vkorg = vbrk-vkorg.
Die MVKE hat auch noch den Vertriebsweg im Key.
Dein SELECT SINGLE greift sich einen zufälligen Eintrag, und für den prüfst Du anschließend prodh.
Kein Wunder, wenn daa bei zwei aufeinanderfolgenden Läufen auch mal abweichende Ergebnisse herauskommen können.

Beitrag von Gast ( / / 0 / 3 ) »
Ich habe zwar seit mehr als 10 Jahren nichts mehr mit SD zu tun gehabt, aber m.E. ist auch das SELECT SINGLE auf VBRP nicht eindeutig.

Und ein ORDER BY oder SORT sehe ich in dem ganzen Programm auch nicht.

Beitrag von Slim_Chance (ForumUser / 33 / 0 / 0 ) »
Hallo,

-> die SY-SUBRC-Abfrage kann man sich auch sparen, sollte aber auch nicht stören.

-> der Select single auf MVKE -> Wir haben nur einen Vertriebsweg mit '00'.

-> Select Single auf VBRP? Finde ich nicht im Coding

-> Hat ein ORDER BY oder SORT Einfluss auf das Gesamtergebnis? Die Summe müsste doch die gleiche bleiben, oder nicht?


Danke und Gruß

Slim_Chance

Beitrag von Frank Münker (ForumUser / 16 / 0 / 0 ) »
Zusätzlich zu den anderen Kommentaren:

- Hast Du mal darüber nachgedacht, das über einen JOIN zu lösen ? Mit zigtausenden von Einzel-Selects kann man auch den stärksten DB-Server in die Knie zwingen.

- Warum machst Du zweimal einen "SELECT * " wenn Du nur eine Handvoll Felder brauchst ? VBRK und VBRP haben zusammen 328 (!) Felder, die Du jedesmal durchs Netzwerk pumpst, aber wenn ich richtig gezählt habe, benötigst Du ganze 4 davon.

Auch wenn für Dich selbst die Performance egal sein mag, Deine Mituser würden es Dir sicherlich danken ...

Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
kann man das ganze nicht einfacher in einen schönen Select mit Joins machen?

Beitrag von Slim_Chance (ForumUser / 33 / 0 / 0 ) »
Hallo,

klar kann man das auch mit einem JOIN machen. Das ist ein Programm was nur einmal in einem begrenztem Nummernintervall laufen soll. Da habe ich nicht soviel mühe gemacht... :roll:

Gruß

Slim_Chance

Beitrag von Gast ( / / 0 / 3 ) »
Frank Münker hat geschrieben: - Warum machst Du zweimal einen "SELECT * " wenn Du nur eine Handvoll Felder brauchst ? VBRK und VBRP haben zusammen 328 (!) Felder, die Du jedesmal durchs Netzwerk pumpst, aber wenn ich richtig gezählt habe, benötigst Du ganze 4 davon.

Auch wenn für Dich selbst die Performance egal sein mag, Deine Mituser würden es Dir sicherlich danken ...
Wenn man Massendaten auswertet, ist das mit der Performance und dem Speicherverbrauch sicher richtig.
Für die Wartbarkeit ist SELECT * angenehmer.
Und in Dialog-Transaktionen oder bei Auswertung sehr kleiner Datenbestände würde ich auch immer SELECT (SINGLE) * nehmen und nicht SELECT feld1 feld7 feld9 feld27 ..., auch aus Performance-Gründen!

Beitrag von Frank Münker (ForumUser / 16 / 0 / 0 ) »
Wenn man Massendaten auswertet, ist das mit der Performance und dem Speicherverbrauch sicher richtig.
Für die Wartbarkeit ist SELECT * angenehmer.
Und in Dialog-Transaktionen oder bei Auswertung sehr kleiner Datenbestände würde ich auch immer SELECT (SINGLE) * nehmen und nicht SELECT feld1 feld7 feld9 feld27 ..., auch aus Performance-Gründen!
Also, im konkreten Beispiel hier sehe ich bis zu 10.000 Rechnungsköpfe. Auch wenn jede Rechnung nur eine einzige Position hat, ergeben sich damit schon 20.000 Einzel-Selects. Da kann man nicht mehr wirklich von "frisst ja kein Brot" reden. Und wenn ich richtig gerechnet habe, werden durch die SELECT * - Anweisungen etwa 40 MB durchs Netzwerk bewegt, anstatt nur ca. 2 MB ohne den ganzen Overhead. Ich finde, das sollte man nicht unterschätzen.

Aber gut, man muss ja nicht päpstlicher als der Papst sein, aber was ich nicht verstehe ist, warum eine SELECT * Anweisung performanter sein soll als eine SELECT feld1 feld4 feld7 - Anweisung ?

Vergleichbare Themen

7
Antw.
2442
Views
Statusanzeige bei select / endselect
von nikibert » 30.05.2008 10:30 • Verfasst in ABAP® für Anfänger
3
Antw.
2520
Views
richtige Schachtelung von select / endselect ???
von barbara » 08.05.2006 11:15 • Verfasst in ABAP® für Anfänger
7
Antw.
2681
Views
Select Endselect - Shortdum beim Debuggen
von JohnLocklay » 20.11.2018 08:50 • Verfasst in ABAP® Core
8
Antw.
4432
Views
Select/Endselect in dynamisch erzeugte itab
von nickname8 » 20.07.2015 13:15 • Verfasst in ABAP® für Anfänger
1
Antw.
1511
Views
Select...Endselect...letzter Datensatz in der itab doppelt
von Kali » 27.03.2013 14:32 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Hilfe zum FB MATERIAL_MAINTAIN_DARK
Gestern von black_adept gelöst 8 / 1767
HR-Entgeltnachweis
vor 2 Tagen von ChrisB 4 / 2309

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

Hilfe zum FB MATERIAL_MAINTAIN_DARK
Gestern von black_adept gelöst 8 / 1767
HR-Entgeltnachweis
vor 2 Tagen von ChrisB 4 / 2309

Unbeantwortete Forenbeiträge

Export von Spools in XLSX
vor 4 Tagen von abapamateur 1 / 325
Feldberechnung ME32K
vor einer Woche von ZF_SAPler 1 / 917
MS-Word als Editor
letzen Monat von tekko 1 / 4427