Performance-Problem

Getting started ... Alles für einen gelungenen Start.
71 Beiträge • Seite 1 von 5 (current) Nächste
71 Beiträge Seite 1 von 5 (current) Nächste

Performance-Problem

Beitrag von cuncon (Specialist / 143 / 98 / 1 ) »
Hallo zusammen,

ich habe im Moment ein Performance-Problem und zwar ich habe 2 Schleifen, zB:
LOOP AT gt_itab_1 INTO gs_itab_1.
LOOP AT gt_itab_2 INTO gs_itab_2 WHERE .....
IF ...

ENDIF.
ENDLOOOP.
ENDLOOP.

Wenn gt_itab_2 groß ist , dann ist das Programm hängen geblieben. Wie kann man Performance verbessern? Vielleicht FIELD-Symbol verwenden? Wenn es nur ein bißchen schneller mit FIELD-Symbol läuft, was kann man noch machen?

Vielen Dank.

cuncon

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


Re: Performance-Problem

Beitrag von ralf.wenzel (Top Expert / 3921 / 200 / 280 ) »
Verschachtelte LOOPs sollte man grundsätzlich vermeiden und in aller Regel geht das auch. Ohne das Umfeld zu kennen (und zu wissen, warum du die so verschachtelst) ist es allerdings schwierig, dir eine entflechtete Version vorzuschlagen.


Ralf

Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
cuncon

Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Performance-Problem

Beitrag von Somani (ForumUser / 81 / 12 / 20 ) »
Hallo

Mal zum Anfangen: https://wiki.scn.sap.com/wiki/display/S ... +with+ABAP

Ansonsten gibt es möglicherweise je nach Situation auch andere Optionen als ein Nested Loop, aber da kann ich genauso gut s Wetter vorhersagen mit dem Code-Beispiel von dir :)
Mit 7.40 gibt es z.B. auch die Möglichkeit gewisse Dinge mit FOR zu machen.. kommt halt stark darauf an was du willst. => http://zevolving.com/2015/05/abap-740-f ... xpression/ (Example 4 ff)

Gruss

Edit: Da war mal weider wer schneller... ich werd alt :x

Folgende Benutzer bedankten sich beim Autor Somani für den Beitrag:
cuncon


Re: Performance-Problem

Beitrag von ralf.wenzel (Top Expert / 3921 / 200 / 280 ) »
Sorry, aber die Tipps sind auch nicht besonders gut (die aus dem SCN), weil veraltet. Statt die Tabellen zu sortieren (was gerade bei großen Tabellen auf die Uhr geht) und mit BINARY SEARCH zuzugreifen, würde ich direkt Schlüssel erstellen für die Tabelle, bei denen ich LOOP AT...WHERE machen will. Denn dann und nur dann bringt die Einschränkung nach WHERE etwas. Bei Standardtabellen kann man genausogut ein IF in den LOOP hängen....

Siehe auch Zusatz 3, beide Spiegelstriche. Also schon für die Deklaration mal diese Seite und die verlinkten lesen....

Aber wie gesagt: Man müsste mehr wissen darüber, was der Entwickler vor hat.



Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Performance-Problem

Beitrag von cuncon (Specialist / 143 / 98 / 1 ) »
Unten ist mein COde:

Code: Alles auswählen.

*1.Schleife
LOOP AT  gt_output ASSIGNING <gs_output>.
      CALL FUNCTION 'MD_STOCK_REQUIREMENTS_LIST_API'
        EXPORTING
*       PLSCN                          =
          MATNR                          = <gs_output>-matnr
          WERKS                          = '1000'
*       BERID                          =
*       ERGBZ                          =
*       AFIBZ                          =
*       INPER                          =
*       DISPLAY_LIST_MDPSX             =
*       DISPLAY_LIST_MDEZX             =
*       DISPLAY_LIST_MDSUX             =
*       NOBUF                          =
*       PLAUF                          =
     IMPORTING
*       E_MT61D                        =
          E_MDKP                         = gs_mdkp
*       E_CM61M                        =
*       E_MDSTA                        =
*       E_ERGBZ                        =
       TABLES
*       MDPSX                          =
         MDEZX                          = gt_bestandliste
*       MDSUX                          =
       EXCEPTIONS
         MATERIAL_PLANT_NOT_FOUND       = 1
         PLANT_NOT_FOUND                = 2
         OTHERS                         = 3
                .
      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ELSE.
        gs_output-hoebe = gs_mdkp-hoebe.
        CLEAR gs_mdkp.

        SORT gt_bestandliste BY delb0 DESCENDING.
        DELETE gt_bestandliste WHERE delb0 = 'AR-RES'.
        gt_bestandliste_temp[] = gt_bestandliste[].
*2.Schleife
        LOOP AT gt_bestandliste ASSIGNING <gs_bestandliste>  WHERE delb0 = 'W-BEST' OR delb0 = 'KD-BST' OR delb0 = 'K-AUFT' OR delb0 = 'LIEFER' OR delb0 = 'SK-BED'.
          IF <gs_bestandliste>-delb0 = 'W-BEST'.
            gs_output-wbmng02 = <gs_bestandliste>-mng02.
          ENDIF.

          IF <gs_bestandliste>-delb0 = 'KD-BST'.
            <gs_output>-sum_kb = <gs_output>-sum_kb + <gs_bestandliste>-mng02.
*Kennzeichen"X" setzen,wenn mindestens ein negativer Kundenauftragsbestand vorliegt
            IF <gs_bestandliste>-mng02 < 0.
              <gs_output>-nkbflag = 'X'.
            ENDIF.
            "Kennzeichen "X" setzen, wenn Kundenauftragsbestände ohne Vorgang existieren, dh, wenn mng01 <> 0 und nächste Eintrag ist auch KD-BST und hat nicht gleiche planr
            IF <gs_bestandliste>-mng01 <> 0.
              IF <gs_output>-ovflag IS INITIAL.
                i = best_idx + 1.
                READ TABLE gt_bestandliste_temp INDEX i INTO gs_bestandliste_temp.
                IF sy-subrc = 0.
                  IF gs_bestandliste_temp-planr <> <gs_bestandliste>-planr.
                    <gs_output>-ovflag = 'X'.
                  ENDIF.
                ENDIF.
              ENDIF.
            ENDIF.
          ENDIF.

          IF <gs_bestandliste>-delb0 = 'K-AUFT'.
            <gs_output>-sum_bdm_kauf = <gs_output>-sum_bdm_kauf + <gs_bestandliste>-mng01.
          ENDIF.

          IF <gs_bestandliste>-delb0 = 'LIEFER'.
            <gs_output>-sum_bdm_liefer = <gs_output>-sum_bdm_liefer + <gs_bestandliste>-mng01.
          ENDIF.
          IF <gs_bestandliste>-delb0 = 'SK-BED'.
            <gs_output>-sum_bdm_sek = <gs_output>-sum_bdm_sek + <gs_bestandliste>-mng01.
          ENDIF.

          CLEAR <gs_bestandliste>-mng01.
          CLEAR <gs_bestandliste>-mng02.
        ENDLOOP.
      ENDIF.
      CLEAR gt_bestandliste_temp. REFRESH gt_bestandliste_temp.
      CLEAR gt_mdez_sum.  REFRESH gt_mdez_sum.
      CLEAR gt_mdez.  REFRESH gt_mdez.
    ENDIF.
ENDLOOP.

Das Programm ist stehen geblieben bei 2. Schleife, wenn gt_bestandliste groß ist, aber ich habe mich gewundert, wenn gt_bestandliste ungefähr 600 Einträge , dann steht das Programm schon. Das kann aber nicht sein.

Hat jemand eine Idee, wie man besser machen kann?

Danke

cuncon

Re: Performance-Problem

Beitrag von ralf.wenzel (Top Expert / 3921 / 200 / 280 ) »
Ich hab gerade nur begrenzt Zeit, aber ich hab mal draufgeguckt, ob mir was auffällt. Ein paar Dinge sind mir aufgefallen.

Die Bestandsliste ist eine Standardtabelle, weil sie als solche aus dem Funktionsbaustein rauskommt - ich würde sie umkopieren in eine Tabelle mit einem entsprechenden Schlüssel auf DELB0. Außerdem würde ich darauf achten, dass die MATNR in GT_OUTPUT jeweils einmalig ist (damit du nicht für dieselbe Mateiralnummer das Zeugs mehrfach durchläufst).

Wenn man länger guckt, findet man sicher noch mehr ;)

Zum Beispiel KÖNNTE man die Bestandslisten in einer großen Tabelle sammeln (insert linse of gt_bestandsliste into table gt_bestandsliste_gesamt, über DIE machst du dann den LOOP), je größer die Tabelle ist, umso eher bringen die Schlüssel was, würde ich meinen.

Insbesondere kannst du die beiden LOOPs dann hintereinander machen und musst sie nicht "ineinander" machen. Zu den Feldsymbolen: Es gibt in meinen Augen keinen Grund, KEINE Feldsymbole zu verwenden und je größer die Tabellen sind, umso eher bringen Feldsymbole was.

Das wären also meine drei ersten Tipps: Auf einmalige MATNRn achten, im LOOP AT gt_output nur den FuBau aufrufen und die gt_bestandsliste sammeln einer großen itab, die einen entsprechenden Schlüssel haben sollte, damit der LOOP AT WHERE auch wirklich nur für die Sätze angesprungen wird, für den die WHERE Bedingung auch gilt und die LOOPs hintereinander machen statt "ineinander".


Ralf

Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
cuncon

Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Performance-Problem

Beitrag von zzcpak (Expert / 673 / 5 / 68 ) »
nur mal als Verdacht, da ich nicht weiß, unter welchem Release-Stand dein Programm arbeitet.

Der Funktionsbaustein MD_STOCK_REQUIREMENTS_LIST_API hatte mal den Fehler, alte Daten zu liefern. Ursache war ein fehlendes CLEAR/REFRESH auf die Tabellenparameter des Funktionsbausteines.

Siehe dazu SAP-Hinweis https://launchpad.support.sap.com/#/corrins/396372/1
Der ist allerdings steinalt und für 46B/46C gültig. Aber es soll ja noch solche Installationen geben, auch produktiv.

Sonst prüf doch spaßeshalber mal im Debugger, ob deine interne Tabelle GT_BESTANDSLISTE auch noch die Daten des vorigen Laufes enthält, bzw. ob diese im Funktionsbaustein geleert wird.

Folgende Benutzer bedankten sich beim Autor zzcpak für den Beitrag:
cuncon


Re: Performance-Problem

Beitrag von ralf.wenzel (Top Expert / 3921 / 200 / 280 ) »
Ich würde Parameter, die ein Funktionsbaustein füllt, immer leer übergeben. Aber das macht nicht jeder - insofern ein wichtiger Tipp.

Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Performance-Problem

Beitrag von cuncon (Specialist / 143 / 98 / 1 ) »
zzcpak hat geschrieben:nur mal als Verdacht, da ich nicht weiß, unter welchem Release-Stand dein Programm arbeitet.

Der Funktionsbaustein MD_STOCK_REQUIREMENTS_LIST_API hatte mal den Fehler, alte Daten zu liefern. Ursache war ein fehlendes CLEAR/REFRESH auf die Tabellenparameter des Funktionsbausteines.

Siehe dazu SAP-Hinweis https://launchpad.support.sap.com/#/corrins/396372/1
Der ist allerdings steinalt und für 46B/46C gültig. Aber es soll ja noch solche Installationen geben, auch produktiv.

Sonst prüf doch spaßeshalber mal im Debugger, ob deine interne Tabelle GT_BESTANDSLISTE auch noch die Daten des vorigen Laufes enthält, bzw. ob diese im Funktionsbaustein geleert wird.
ich habe gerade bei mir gesehen, wir haben ERP 6.0.

Re: Performance-Problem

Beitrag von cuncon (Specialist / 143 / 98 / 1 ) »
zzcpak hat geschrieben:nur mal als Verdacht, da ich nicht weiß, unter welchem Release-Stand dein Programm arbeitet.

Der Funktionsbaustein MD_STOCK_REQUIREMENTS_LIST_API hatte mal den Fehler, alte Daten zu liefern. Ursache war ein fehlendes CLEAR/REFRESH auf die Tabellenparameter des Funktionsbausteines.

Siehe dazu SAP-Hinweis https://launchpad.support.sap.com/#/corrins/396372/1
Der ist allerdings steinalt und für 46B/46C gültig. Aber es soll ja noch solche Installationen geben, auch produktiv.

Sonst prüf doch spaßeshalber mal im Debugger, ob deine interne Tabelle GT_BESTANDSLISTE auch noch die Daten des vorigen Laufes enthält, bzw. ob diese im Funktionsbaustein geleert wird.
Ich habe auch geprüft bei Debugger, dass es bei jedem Lauf die Tabelle GT_BESTANDSLISTE neu erfüllt wird, dh. die alten Daten waren wirklich weg. Aber zur Sicherheit mache ich sie leer vor dem Übergeben.

Re: Performance-Problem

Beitrag von cuncon (Specialist / 143 / 98 / 1 ) »
ralf.wenzel hat geschrieben:Ich hab gerade nur begrenzt Zeit, aber ich hab mal draufgeguckt, ob mir was auffällt. Ein paar Dinge sind mir aufgefallen.

Die Bestandsliste ist eine Standardtabelle, weil sie als solche aus dem Funktionsbaustein rauskommt - ich würde sie umkopieren in eine Tabelle mit einem entsprechenden Schlüssel auf DELB0. Außerdem würde ich darauf achten, dass die MATNR in GT_OUTPUT jeweils einmalig ist (damit du nicht für dieselbe Mateiralnummer das Zeugs mehrfach durchläufst).

Wenn man länger guckt, findet man sicher noch mehr ;)

Zum Beispiel KÖNNTE man die Bestandslisten in einer großen Tabelle sammeln (insert linse of gt_bestandsliste into table gt_bestandsliste_gesamt, über DIE machst du dann den LOOP), je größer die Tabelle ist, umso eher bringen die Schlüssel was, würde ich meinen.

Insbesondere kannst du die beiden LOOPs dann hintereinander machen und musst sie nicht "ineinander" machen. Zu den Feldsymbolen: Es gibt in meinen Augen keinen Grund, KEINE Feldsymbole zu verwenden und je größer die Tabellen sind, umso eher bringen Feldsymbole was.

Das wären also meine drei ersten Tipps: Auf einmalige MATNRn achten, im LOOP AT gt_output nur den FuBau aufrufen und die gt_bestandsliste sammeln einer großen itab, die einen entsprechenden Schlüssel haben sollte, damit der LOOP AT WHERE auch wirklich nur für die Sätze angesprungen wird, für den die WHERE Bedingung auch gilt und die LOOPs hintereinander machen statt "ineinander".


Ralf
Hallo Ralf,
vielen Dank für die gute Tipps. Ich werde mit LOOPs hintereinander statt ineinander probieren. Ich glaube es wird schneller.

Re: Performance-Problem

Beitrag von black_adept (Top Expert / 4086 / 126 / 940 ) »
cuncon hat geschrieben:

Code: Alles auswählen.

            "Kennzeichen "X" setzen, wenn Kundenauftragsbestände ohne Vorgang existieren, dh, wenn mng01 <> 0 und nächste Eintrag ist auch KD-BST und hat nicht gleiche planr
Mal abgesehen von der Performance. Wenn der Code das tun soll, was in dem Kommentar gesagt wird, dann tut er das nur zufällig. Grund: Du fragst nicht ab ob die folgende Zeile auch "KD-BST" ist. Außerdem die Frage: Ist garantiert, dass das Sortieren und Löschen das du machst die Reihenfolge die der FuBa zurückgegeben hat nicht ändert?

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
cuncon

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Performance-Problem

Beitrag von cuncon (Specialist / 143 / 98 / 1 ) »
black_adept hat geschrieben:
cuncon hat geschrieben:

Code: Alles auswählen.

            "Kennzeichen "X" setzen, wenn Kundenauftragsbestände ohne Vorgang existieren, dh, wenn mng01 <> 0 und nächste Eintrag ist auch KD-BST und hat nicht gleiche planr
Mal abgesehen von der Performance. Wenn der Code das tun soll, was in dem Kommentar gesagt wird, dann tut er das nur zufällig. Grund: Du fragst nicht ab ob die folgende Zeile auch "KD-BST" ist. Außerdem die Frage: Ist garantiert, dass das Sortieren und Löschen das du machst die Reihenfolge die der FuBa zurückgegeben hat nicht ändert?
Ich werde das noch mal kucken. Danke

Re: Performance-Problem

Beitrag von DeathAndPain (Top Expert / 1939 / 257 / 412 ) »
Also das ist alles noch keine zufriedenstellende Erklärung. Was Du da im inneren LOOP machst, ist performancetechnisch eigentlich ein Lacher. Das sollte nicht auf einen Timeout laufen, selbst wenn gt_bestandliste 60.000 Einträge hätte! Da muss noch irgendwo anders der Hund begraben sein.

Allerdings finde ich den Inhalt der Tabelle gt_bestandliste gar nicht so interessant, denn der ändert sch ja mit jedem Durchlauf der äußeren Tabelle. Wieviel ist denn in gt_output drin? Das ist doch viel wichtiger, denn das multipliziert sich ja mit den jeweiligen Einträgen aus gt_bestandliste aus! Im übrigen wird der Funktionsbaustein so oft durchlaufen, wie gt_output Zeilen hat. Und den FB habe ich viel mehr im Verdacht, Laufzeit zu ziehen! Der wird vermutlich auch Datenbankzugriffe machen.

Die anderen Optimierungen sind nett, aber nur Kleinkram. Was Du dabei noch machen kannst:

Code: Alles auswählen.

SORT gt_bestandliste BY delb0 DESCENDING.
DELETE gt_bestandliste WHERE delb0 = 'AR-RES'.
Du sortierst die AR-RES-Zeilen erst aufwändig rein, um sie anschließend rauszulöschen. Würde ich gefühlsmäßig andersrum machen: Erst die unnützen Zeilen rauslöschen, und dann nur den interessanten Rest sortieren. Aber vielleicht ist Dein Weg sogar schneller, weil er so nur einmal sequenziell durch die Tabelle muss. Müsste man mal austesten. Hängt sicherlich auch davon ab, wie viele AR-RES-Zeilen es in der Tabelle gibt. Taugt aber auch nicht als zufriedenstellende Erklärung für Deinen Tmeout.

Aber wie Ralf schon sagte, ein LOOP WHERE hat (im Gegensatz zum READ TABLE mit BINARY SEARCH) nur dann etwas von einer Sortierung, wenn die Tabelle selbst als SORTED definiert ist. Dabei tunlichst genau den Tabellenschlüssel festlegen, mit dem Dein LOOP später suchen wird. Wobei ich befürchte, dass mit dem OR der Sortierungsvorteil auch wieder den Bach runtergeht; das wird der LOOP so nicht nutzen können. Der Aufzählungs-IN, den der SELECT-Befehl kennt, wird vom LOOP leider nicht unterstützt. Da müsstest Du Dir eine RANGES-Tabelle mit den möglichen Werten für delb0 aufbauen und dann LOOP AT gt_bestandsliste WHERE delbo IN deine_ranges_tabelle schreiben. Dann könnte die Optimierung klappen.

Ansonsten nochmal die Frage: War euer Systemstand nicht schon auf 7.40? (Herausfinden im SAPGui über Menü System -> Status, Klicken auf Lupe -> Release der Komponente SAP_ABA anschauen. Wenn ja, dann solltest Du Dir unbedingt einen grundlegend anderen Programmierstil angewöhnen. Dann ist Dein Codingstil nämlich als ziemlich veraltet einzuschätzen; das kann man mit den neuen Mitteln von 7.40 alles viel kürzer und schöner programmieren.

Aber wie gesagt, als erstes mal klären, wieviel Zeilen gt_output hat.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
cuncon


Re: Performance-Problem

Beitrag von cuncon (Specialist / 143 / 98 / 1 ) »
DeathAndPain hat geschrieben:Also das ist alles noch keine zufriedenstellende Erklärung. Was Du da im inneren LOOP machst, ist performancetechnisch eigentlich ein Lacher. Das sollte nicht auf einen Timeout laufen, selbst wenn gt_bestandliste 60.000 Einträge hätte! Da muss noch irgendwo anders der Hund begraben sein.

Allerdings finde ich den Inhalt der Tabelle gt_bestandliste gar nicht so interessant, denn der ändert sch ja mit jedem Durchlauf der äußeren Tabelle. Wieviel ist denn in gt_output drin? Das ist doch viel wichtiger, denn das multipliziert sich ja mit den jeweiligen Einträgen aus gt_bestandliste aus! Im übrigen wird der Funktionsbaustein so oft durchlaufen, wie gt_output Zeilen hat. Und den FB habe ich viel mehr im Verdacht, Laufzeit zu ziehen! Der wird vermutlich auch Datenbankzugriffe machen.

Die anderen Optimierungen sind nett, aber nur Kleinkram. Was Du dabei noch machen kannst:

Code: Alles auswählen.

SORT gt_bestandliste BY delb0 DESCENDING.
DELETE gt_bestandliste WHERE delb0 = 'AR-RES'.
Du sortierst die AR-RES-Zeilen erst aufwändig rein, um sie anschließend rauszulöschen. Würde ich gefühlsmäßig andersrum machen: Erst die unnützen Zeilen rauslöschen, und dann nur den interessanten Rest sortieren. Aber vielleicht ist Dein Weg sogar schneller, weil er so nur einmal sequenziell durch die Tabelle muss. Müsste man mal austesten. Hängt sicherlich auch davon ab, wie viele AR-RES-Zeilen es in der Tabelle gibt. Taugt aber auch nicht als zufriedenstellende Erklärung für Deinen Tmeout.

Aber wie Ralf schon sagte, ein LOOP WHERE hat (im Gegensatz zum READ TABLE mit BINARY SEARCH) nur dann etwas von einer Sortierung, wenn die Tabelle selbst als SORTED definiert ist. Dabei tunlichst genau den Tabellenschlüssel festlegen, mit dem Dein LOOP später suchen wird. Wobei ich befürchte, dass mit dem OR der Sortierungsvorteil auch wieder den Bach runtergeht; das wird der LOOP so nicht nutzen können. Der Aufzählungs-IN, den der SELECT-Befehl kennt, wird vom LOOP leider nicht unterstützt. Da müsstest Du Dir eine RANGES-Tabelle mit den möglichen Werten für delb0 aufbauen und dann LOOP AT gt_bestandsliste WHERE delbo IN deine_ranges_tabelle schreiben. Dann könnte die Optimierung klappen.

Ansonsten nochmal die Frage: War euer Systemstand nicht schon auf 7.40? (Herausfinden im SAPGui über Menü System -> Status, Klicken auf Lupe -> Release der Komponente SAP_ABA anschauen. Wenn ja, dann solltest Du Dir unbedingt einen grundlegend anderen Programmierstil angewöhnen. Dann ist Dein Codingstil nämlich als ziemlich veraltet einzuschätzen; das kann man mit den neuen Mitteln von 7.40 alles viel kürzer und schöner programmieren.

Aber wie gesagt, als erstes mal klären, wieviel Zeilen gt_output hat.
Hallo DeathAndPain,

vielen Dank für die Antwort. Die gt_output beträgt unter 5000 Einträge und die innere Schleife gt_bestandliste beträgt bei manche MATNR fast 30000 Einträge. Ich habe FUBA SAPGUI_PROGRESS_INDICATOR vor dem Aufruf FUBA MD_STOCK_REQUIREMENTS_LIST_API und nach jedem LOOP AT gebaut und habe gesehen mein Programm ist nur bei innerer Schleife gt_bestandliste hängen geblieben auch schon bei nicht so große gt_bestandliste, zB. 600 Einträge von gt_bestandliste stand das Programm schon. Das habe ich nicht verstanden. Jetzt versuche ich die LOOPs hinterander statt ineinander zu bauen.

PS: Mein Programm soll online laufen können. Mit Hintergrund hat es geklappt.
Übrigends: bei manchen gt_bestandliste stehen viele Zeile von delb0 = 'AR-RES' und solche Zeile brauche ich nicht , daher habe ich gelöscht , um schneller zu sein. Aber es hat auch nicht viel geholfen :(

cuncon
Zuletzt geändert von cuncon am 27.02.2018 12:11, insgesamt 1-mal geändert.

Vergleichbare Themen

14
Antw.
2900
Views
Performance Problem
von ChrissixD » 26.09.2017 09:13 • Verfasst in ABAP® für Anfänger
2
Antw.
1226
Views
Performance Problem
von ChrissixD » 21.11.2017 07:49 • Verfasst in ABAP® für Anfänger
18
Antw.
6899
Views
Performance-Problem bei SELECT
von Charadin » 22.10.2007 08:10 • Verfasst in ABAP® Core
8
Antw.
4552
Views
Speicher & Performance Problem bei XML einlesen
von Zubasa » 15.06.2011 13:48 • Verfasst in ABAP® für Anfänger
5
Antw.
3335
Views
Performance-Problem bei Aufruf einer SAP-Klasse
von xforce » 12.07.2018 13:19 • Verfasst in ABAP® für Anfänger

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.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
Gestern von Bright4.5 1 / 499
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2139
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8735