Fuba für Selektionskriterien | Perfomance-Frage

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

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

Fuba für Selektionskriterien | Perfomance-Frage

Beitrag von ABAPlerv (ForumUser / 84 / 24 / 1 ) »
Hi,

gibt es einen Fuba oder eine Klasse, die mir alle Selektionsfelder mit den Werten aus einem Screen rausliest?

Danke
Zuletzt geändert von ABAPlerv am 17.05.2022 15:22, insgesamt 1-mal geändert.

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



Re: Klasse oder Funktionsbaustein für Selektionskriterien

Beitrag von ABAPlerv (ForumUser / 84 / 24 / 1 ) »
sap_enthusiast hat geschrieben:
17.05.2022 14:44
Hi ABAPlerv

vlt das hilft weiter:
https://www.berater-wiki.de/Funktionsba ... ALUES_READ

sap_enthusiast
Danke.

Ich nutze den Beitrag für eine andere Frage:

Es soll ja vermieden werden in einem Loop mehrere Selects zu platzieren wegen Perfomanceproblemen..

Code: Alles auswählen.

SELECT "irgendwelche Felder aus 2 verschiedenen Tabellen 
FROM TabelleA 
INNER JOIN TabelleB
ON ......
INTO CORRESPONDING FIELDS OF TABLE lt_tab.

LOOP AT lt_tab .ASSIGNING <fs>.
SELECT SINGLE "Irgendwelche Felder aus einer anderen Tabelle C
FROM TabelleC INTO <fs>-feldC   .

SELECT SINGLE "Irgendwelche Felder aus einer anderen Tabelle D 
FROM TabelleD INTO <fs>-feldD   .

SELECT SINGLE "Irgendwelche Felder aus einer anderen Tabelle E
FROM TabelleE INTO <fs>-feldE  .

usw..

ENDLOOP.
  
Wie kann dieser LOOP umgangen werden?
Mit mehreren INNER JOIN im ersten SELECT wird die lt_tab immer weniger Datensätze haben, das möchte ich nicht.
Mit einem LEFT JOIN kommen sehr viele Daten dazu, die nicht dazugehören

DANKE

Re: Fuba für Selektionskriterien | Perfomance-Frage

Beitrag von sap_enthusiast (ForumUser / 95 / 25 / 23 ) »
Einerseits kannst einfach JOIN nehmen und die ansehen wie das dein Ergebnis beeinflusst.

Andererseits versuch folgendes:
(als beispiel)

Code: Alles auswählen.

SELECT vbeln, posnr, matnr 
      FROM vbap
FOR ALL ENTRIES IN @lt_sdnr
        WHERE vbeln = @lt_sdnr-vbeln AND 
                    posnr = @lt_sdnr-posnr
      INTO TABLE @DATA(lt_data).
FOR ALL ENTRIES ermöglicht eine Sammel-Abfrage

danach solltest du in einem Loop eventuell mit READ TABLE oder per direkter Zuweisung die Daten mit eindeutigen ID Feldern suchen und übertragen:

Code: Alles auswählen.

LOOP AT itab ASSIGNING FIELD-SYMBOL(<fs>).

READ TABLE.....
oder
TRY.
<fs>-feldx = itab2[ feldy = <fs>-feldy ]-feldx.
CATCH cx_root.
ENDTRY.

ENDLOOP.
Mehr fällt mir nicht ein.
Viel Erfolg!

Re: Fuba für Selektionskriterien | Perfomance-Frage

Beitrag von ABAPlerv (ForumUser / 84 / 24 / 1 ) »
sap_enthusiast hat geschrieben:
17.05.2022 15:38
Einerseits kannst einfach JOIN nehmen und die ansehen wie das dein Ergebnis beeinflusst.

Andererseits versuch folgendes:
(als beispiel)

Code: Alles auswählen.

SELECT vbeln, posnr, matnr 
      FROM vbap
FOR ALL ENTRIES IN @lt_sdnr
        WHERE vbeln = @lt_sdnr-vbeln AND 
                    posnr = @lt_sdnr-posnr
      INTO TABLE @DATA(lt_data).
FOR ALL ENTRIES ermöglicht eine Sammel-Abfrage

danach solltest du in einem Loop eventuell mit READ TABLE oder per direkter Zuweisung die Daten mit eindeutigen ID Feldern suchen und übertragen:

Code: Alles auswählen.

LOOP AT itab ASSIGNING FIELD-SYMBOL(<fs>).

READ TABLE.....
oder
TRY.
<fs>-feldx = itab2[ feldy = <fs>-feldy ]-feldx.
CATCH cx_root.
ENDTRY.

ENDLOOP.
Mehr fällt mir nicht ein.
Viel Erfolg!

wenn ich trotzdem ein Loop machen muss, dann ändert sich doch nichts oder? Hätte dann einfach ein READ statt einem select single.

Ist es möglich über "for all entries" direkt die eine Tabelle zu füllen ohne eine zweite Tabelle zu verwenden?

Re: Fuba für Selektionskriterien | Perfomance-Frage

Beitrag von sap_enthusiast (ForumUser / 95 / 25 / 23 ) »
Also dann hast keine Selects in den Loops sondern nur 1-2 Massenabfrage.
Das erspart schon mal signifikante Zeit.

Ansonsten anhand des unteren Beispiels ist es zwar möglich aber dann sind deine Ausgang-Daten für die du die Abfrage durchführst weg und dann ist es ja eher nicht so geschickt. Jede derartige Suche initialisiert deine Source itab außer du benutzt statt INTO den Zusatz APPENDING TABLE itab. Aber das hilft auch nicht weiter.

Code: Alles auswählen.

DATA: lt_vbap TYPE STANDARD TABLE OF vbap.

SELECT vbeln FROM
  vbak
  INTO CORRESPONDING FIELDS OF TABLE @lt_vbap
  UP TO 50 ROWS.

SELECT vbeln, posnr FROM vbap
  FOR ALL ENTRIES IN @lt_vbap
  WHERE vbeln = @lt_vbap-vbeln
  INTO CORRESPONDING FIELDS OF TABLE @lt_vbap.

LOOP AT lt_vbap ASSIGNING FIELD-SYMBOL(<fs>).
  WRITE: / <fs>-vbeln && | / | && <fs>-posnr.
ENDLOOP.

Re: Klasse oder Funktionsbaustein für Selektionskriterien

Beitrag von ewx (Top Expert / 4854 / 313 / 644 ) »
sap_enthusiast hat geschrieben:
17.05.2022 14:44
Hi ABAPlerv

vlt das hilft weiter:
https://www.berater-wiki.de/Funktionsba ... ALUES_READ

sap_enthusiast
das ist nicht der richtige Baustein für einen Report mit Selektionsbild!

Richtig ist der Baustein mit dem für den vorgesehenen Zweck leicht irritierendem Namen RS_REFRESH_FROM_SELECTOPTIONS.

Hier ein Code-Beispiel:
http://zevolving.com/2015/07/oo-abap-se ... ctoptions/

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
Icke0801


Re: Klasse oder Funktionsbaustein für Selektionskriterien

Beitrag von sap_enthusiast (ForumUser / 95 / 25 / 23 ) »
ewx hat geschrieben:
17.05.2022 19:04
sap_enthusiast hat geschrieben:
17.05.2022 14:44
Hi ABAPlerv

vlt das hilft weiter:
https://www.berater-wiki.de/Funktionsba ... ALUES_READ

sap_enthusiast
das ist nicht der richtige Baustein für einen Report mit Selektionsbild!

Richtig ist der Baustein mit dem für den vorgesehenen Zweck leicht irritierendem Namen RS_REFRESH_FROM_SELECTOPTIONS.

Hier ein Code-Beispiel:
http://zevolving.com/2015/07/oo-abap-se ... ctoptions/
Danke Enno!
Dann habe ich die Frage bissl missverstanden.

Re: Fuba für Selektionskriterien | Perfomance-Frage

Beitrag von ABAPlerv (ForumUser / 84 / 24 / 1 ) »
Frage, die hier vielleicht gut dazu passt.

- Selects in Loops vermeiden und lieber mit READ TABLE arbeiten wegen Performance.

Kann das hier bitte jemand bestätigen?

Danke

Re: Fuba für Selektionskriterien | Perfomance-Frage

Beitrag von sap_enthusiast (ForumUser / 95 / 25 / 23 ) »
Hi ABAPlerv,

so pauschal kann man nicht sagen, es kommt auf die Situation drauf an.
Am besten testest du selber bis du eine performante Methodik hast.
Hier weitere Links die dir weiterhelfen können:

https://codezentrale.de/category/sap/sa ... rformance/

https://help.sap.com/doc/abapdocu_750_i ... BCbergeben.

https://www.berater-wiki.de/Performance-Tuning

Re: Fuba für Selektionskriterien | Perfomance-Frage

Beitrag von ewx (Top Expert / 4854 / 313 / 644 ) »
sap_enthusiast hat geschrieben:
20.05.2022 07:52
so pauschal kann man nicht sagen, es kommt auf die Situation drauf an.
Doch. so pauschal kann man das eigentlich schon sagen.
Der Flaschenhals ist der Datentransport von der Datenbank zum Programm.
Je weniger Daten und je seltener Daten ins Programm geschafft werden müssen, desto schneller.

Bei sehr vielen Datensätzen (millionen+) muss man die Verarbeitung evtl. in Pakete aufteilen, aber ein SELECT in einem LOOP ist dann erst recht immer langsamer.

Hier auch noch von mir ein etwas älterer Leitfaden:
https://tricktresor.de/blog/series/perf ... -workshop/

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
ABAPlerv


Re: Fuba für Selektionskriterien | Perfomance-Frage

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
ewx hat geschrieben:
20.05.2022 09:19
sap_enthusiast hat geschrieben:
20.05.2022 07:52
so pauschal kann man nicht sagen, es kommt auf die Situation drauf an.
Doch. so pauschal kann man das eigentlich schon sagen.
Nee - kann man nicht. Wenn der LOOP aus lediglich ein paar Zeilen besteht: So what? Wenn es aufwändiger ist, die relevanten Kombinationen für den SELECT zu ermitteln und einem das im LOOP geschenkt wird, dann im LOOP ( aber gerne Ergebnisse puffern falls mehrfach verwendbar ). Und ich kenne noch diverse andere Situationen, wo ich das lieber innerhalb des LOOPs als außerhalb verwende.
ABER: Die Performance ist wie von Enno schon beschrieben deutlich besser wenn man wenige große SELECTs absetzt als wenn man viele kleine macht. Manchmal leidet allerdings dabei die Lesbarkeit darunter - da muss man sich dann schon etwas Mühe geben, das sauber einzutüten. Aber als Daumenregel kann man
ABAPlerv hat geschrieben:
19.05.2022 23:10
Selects in Loops vermeiden und lieber mit READ TABLE arbeiten wegen Performance.
stehen lassen.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Fuba für Selektionskriterien | Perfomance-Frage

Beitrag von ewx (Top Expert / 4854 / 313 / 644 ) »
black_adept hat geschrieben:
20.05.2022 14:02
Aber als Daumenregel kann man
ABAPlerv hat geschrieben:
19.05.2022 23:10
Selects in Loops vermeiden und lieber mit READ TABLE arbeiten wegen Performance.
stehen lassen.
Also doch pauschal... 😋

Seite 1 von 1

Vergleichbare Themen

0
Antw.
2822
Views
5
Antw.
1129
Views
FUBA mit FUBA RSPO_OUTPUT_DEVICEDATA eine Liste ausgeben
von Thomas E » 06.05.2021 12:49 • Verfasst in ABAP® Core
3
Antw.
2506
Views
SAP IS-U: Frage zum CIC
von c-harms » 26.07.2005 11:48 • Verfasst in SAP - Allgemeines
3
Antw.
2268
Views
Frage zu OLE
von Mark33 » 26.09.2013 23:24 • Verfasst in ABAP® für Anfänger
1
Antw.
1250
Views
ISU-Frage
von CSZ_Berater » 05.12.2017 13:07 • Verfasst in SAP - Allgemeines

Ü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.