Performance / Laufzeit Fragen

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

Performance / Laufzeit Fragen

Beitrag von sp89 (ForumUser / 37 / 0 / 0 ) »
Hallo zusammen,

ich bin ja noch relativ neu und mir wurde hier schon super geholfen =)

Ich hab nun ein Coding welches grob gesagt bestände ausliest/auswertet.

Nun weiß ich allerdings nicht ob man einige Codepassagen zusammenfassen / verbessern / vereinfachen oder so kann
evtl. das es perfomanter läuft .

Auch über sonstige hinweise oder tipps was ich besser machen könnte würde ich mich freuen.

im anhang mal der teil um den es geht.

danke & gruß sp89

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*&      Form  GET_REQUIRED_STARTING_STOCK
*&---------------------------------------------------------------------*
*       get required starting stock
*----------------------------------------------------------------------*
FORM get_required_starting_stock .
  CLEAR: gt_allrecs[],
         gt_intime[],
         gt_outtime[],
         gf_budat,
         gf_abgang,
         gf_zugang,
         lf_endbestand,
         lf_stocktd .

* get actual stock - 'today'
  SELECT SINGLE labst FROM mard INTO lf_stocktd
    WHERE matnr = s_matnr-low
    AND   werks = s_werks-low.

* get all records mseg
  SELECT mblnr mjahr zeile bwart matnr werks lifnr ebeln ebelp menge meins smbln smblp sjahr FROM mseg INTO CORRESPONDING FIELDS OF TABLE gt_allrecs
    WHERE xauto = space
    AND   matnr = s_matnr-low
    AND   werks = s_werks-low.

* split data - intime / outtime
  LOOP AT gt_allrecs INTO gs_allrecs.
    SELECT SINGLE budat FROM mkpf INTO gf_budat
      WHERE mblnr = gs_allrecs-mblnr
      AND   mjahr = gs_allrecs-mjahr.
    IF gf_budat EQ s_datum-low OR gf_budat EQ s_datum-high OR gf_budat BETWEEN s_datum-low AND s_datum-high.
      APPEND gs_allrecs TO gt_intime.
    ELSEIF gf_budat > s_datum-high.
      APPEND gs_allrecs TO gt_outtime.
    ENDIF.
    CLEAR: gs_allrecs.
  ENDLOOP.

  LOOP AT gt_intime INTO gs_intime.
    IF gs_intime-smbln NE space.
      SELECT SINGLE budat FROM mkpf INTO gf_budat
        WHERE mblnr = gs_intime-smbln.
    ENDIF.
    IF gf_budat EQ s_datum-low OR gf_budat EQ s_datum-high OR gf_budat BETWEEN s_datum-low AND s_datum-high.
    ELSEIF gf_budat > s_datum-high.
      DELETE gt_intime WHERE smbln = gs_intime-smbln.
    ENDIF.
    CLEAR: gs_intime.
  ENDLOOP.

* calculate lf_endbestand
  IF sy-datum EQ s_datum-low OR sy-datum EQ s_datum-high OR sy-datum BETWEEN s_datum-low AND s_datum-high.
    lf_endbestand = lf_stocktd.
  ELSE.

    LOOP AT gt_outtime INTO gs_outtime.
      SELECT SINGLE xstbw zu_ab  sign  FROM zmmkg_zoll INTO CORRESPONDING FIELDS OF gs_outtime_t
        WHERE bwart = gs_outtime-bwart.
      gs_outtime_t-mblnr = gs_outtime-mblnr.
      gs_outtime_t-mjahr = gs_outtime-mjahr.
      gs_outtime_t-menge = gs_outtime-menge.
      APPEND gs_outtime_t TO gt_outtime_t.
      CLEAR: gs_outtime.
    ENDLOOP.

    LOOP AT gt_outtime_t INTO gs_outtime_t.
      CASE gs_outtime_t-zu_ab.
        WHEN 'A'.
          IF gs_outtime_t-sign EQ '-'.
            gf_abgang = gf_abgang - gs_outtime_t-menge.
          ELSE.
            gf_abgang = gf_abgang + gs_outtime_t-menge.
          ENDIF.
        WHEN 'Z'.
          IF gs_outtime_t-sign EQ '-'.
            gf_zugang = gf_zugang - gs_outtime_t-menge.
          ELSE.
            gf_zugang = gf_zugang + gs_outtime_t-menge.
          ENDIF.
      ENDCASE.
      CLEAR: gs_outtime_t.
    ENDLOOP.
    lf_endbestand = lf_stocktd - gf_zugang + gf_abgang.
  ENDIF.
ENDFORM.                    " GET_REQUIRED_STARTING_STOCK
*&---------------------------------------------------------------------*
*&      Form  GET_ALL_RECORDS_WO_REVERSAL
*&---------------------------------------------------------------------*
*      1. GET_ALL_RECORDS_WO_REVERSAL
*----------------------------------------------------------------------*
FORM get_all_records_wo_reversal .
  CLEAR: gs_intime,
         lf_bwart.

* delete records with unrequired bwart
  LOOP AT gt_intime INTO gs_intime.
    SELECT SINGLE bwart FROM zmmkg_zoll INTO lf_bwart
      WHERE bwart = gs_intime-bwart.
    IF sy-subrc EQ 0.
    ELSE.
      DELETE gt_intime WHERE bwart = gs_intime-bwart.
    ENDIF.
    CLEAR: gs_intime.
  ENDLOOP.

* delete storno records
  LOOP AT gt_intime INTO gs_intime.
    SELECT SINGLE xstbw zu_ab sign FROM zmmkg_zoll INTO CORRESPONDING FIELDS OF gs_intime
      WHERE bwart = gs_intime-bwart.
    MODIFY gt_intime FROM gs_intime.
    IF gs_intime-xstbw EQ 'X' AND gs_intime-smbln EQ space.
      APPEND gs_intime TO gt_reversal2.
    ENDIF.
  ENDLOOP.

  DELETE gt_intime WHERE xstbw NE space.
ENDFORM.                    " GET_ALL_RECORDS_WO_REVERSAL
*&---------------------------------------------------------------------*
*&      Form  GET_ALL_REVERSAL_W_REFERENCE
*&---------------------------------------------------------------------*
*     2.  GET_ALL_REVERSAL_W_REFERENCE
*----------------------------------------------------------------------*
FORM get_all_reversal_w_reference .

* delete records with unrequired bwart
  LOOP AT gt_allrecs INTO gs_allrecs.
    SELECT SINGLE bwart FROM zmmkg_zoll INTO lf_bwart
      WHERE bwart = gs_allrecs-bwart.
    IF sy-subrc EQ 0.
    ELSE.
      DELETE gt_allrecs WHERE bwart = gs_allrecs-bwart.
    ENDIF.
    CLEAR: gs_allrecs.
  ENDLOOP.

* get storno records with reference outtime
  LOOP AT gt_allrecs INTO gs_allrecs.
    SELECT SINGLE xstbw zu_ab sign FROM zmmkg_zoll INTO CORRESPONDING FIELDS OF gs_allrecs
      WHERE bwart = gs_allrecs-bwart.
    MODIFY gt_allrecs FROM gs_allrecs.
    IF gs_allrecs-xstbw EQ 'X' AND gs_allrecs-smbln NE space.
      APPEND gs_intime TO gt_reversal1.
    ENDIF.
  ENDLOOP.

ENDFORM.                    " GET_ALL_REVERSAL_W_REFERENCE

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


Re: Performance / Laufzeit Fragen

Beitrag von ewx (Top Expert / 4911 / 331 / 651 ) »
Loops mit ASSIGNING
Anstatt im "Loop at ITAB" einen SELECT SINGLE auf dbtabx zu machen:
select * from dbtabx into table for all entries in itab where...
und dann im Loop einen Read

Performance-Workshop:
http://tricktresor.de/content/index.php ... =110&aID=0

Viel Spaß!

Re: Performance / Laufzeit Fragen

Beitrag von sp89 (ForumUser / 37 / 0 / 0 ) »
Danke schön für die Tipps - habs gleich mal ausprobiert =)

aber ich hätte jetzt noch eine frage:

Coding:

Code: Alles auswählen.

  LOOP AT gt_intime INTO gs_intime.
    lf_new = gs_intime-budat+4(2).

    IF NOT lf_old IS INITIAL AND lf_old NE lf_new.
      gs_intime-labst = gf_abgang.
      gs_intime-menge = gf_zugang.
      gs_intime-budat = lf_old.
      APPEND gs_intime TO lt_test.
      CLEAR: gf_zugang,
             gf_abgang.
    ELSE.

      IF gs_intime-zu_ab EQ 'Z'.
        gf_zugang = gf_zugang + gs_intime-menge.
      ELSE.
        gf_abgang = gf_abgang + gs_intime-menge.
      ENDIF.

    ENDIF.

    lf_old = gs_intime-budat+4(2).

    CLEAR: gs_intime.
  ENDLOOP.
Es soll immer für die Einträge mit dem gleichen Wert in -budat bzw - lf_new addiert werden, wenn dann ein neuer wert kommt, sollen die werte asl "summenzeile" in die tabelle lt_test schreiben.

Problem:Für den letzten Eintrag erzeugt er mir keine "Summenzeile".

gruß

Seite 1 von 1

Vergleichbare Themen

2
Antw.
1565
Views
GUI Fragen
von il.ost » 09.07.2019 13:23 • Verfasst in ABAP® für Anfänger
2
Antw.
4045
Views
Fragen zum ALV
von ABAP_User » 10.04.2012 19:41 • Verfasst in ABAP® für Anfänger
3
Antw.
2934
Views
Performance
von schick » 29.03.2018 14:48 • Verfasst in ABAP® für Anfänger
3
Antw.
3314
Views
Performance von INE vs. EEQ
von Birdy » 14.08.2013 11:35 • Verfasst in ABAP® für Anfänger
3
Antw.
3735
Views
Performance
von SAP_ENTWICKLER » 19.02.2018 07:06 • Verfasst in SAP HANA für Anfänger

Über diesen Beitrag


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.

Unbeantwortete Forenbeiträge

Benutzerdefinierte Felder PSP
letzen Monat von Rabea1103 1 / 46623
Spool vereinen OTF und PDF
letzen Monat von anna2205 1 / 62963
XSLT und Loipro05 Transformation
December 2025 von Torsten1965 1 / 72213