Letzten Wert im Loop ausgeben

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

Letzten Wert im Loop ausgeben

Beitrag von le_fuka (ForumUser / 4 / 0 / 0 ) »
Hey Leute,

ich steh grad ein bisschen auf dem Schlauch und bräuchte mal kurz eure Hilfe, und zwar möchte ich gerne nur den letzten Wert der summierten Zeiten für einen Mitarbeiter ausgeben.

Mein jetziger Code:

Code: Alles auswählen.

 LOOP AT lt_test INTO ls_test.


      IF lv_name_alt <> ls_test-name.
        WRITE: / ls_test-name, 20 ls_test-buper USING EDIT MASK '____.__' .

        CLEAR: lv_stunden_full,
         lv_stunden_fakt,
         lv_stunden_fahr,
         lv_stunden_sonst.

      ENDIF.

      REPLACE ',' IN ls_test-fahrzeiten WITH '.'.
      REPLACE ',' IN ls_test-sonst_stunden WITH '.'.
      REPLACE ',' IN ls_test-fakt_stunden WITH '.'.
      lv_stunden = ls_test-fahrzeiten + ls_test-sonst_stunden + ls_test-fakt_stunden.
      lv_stunden_full = lv_stunden_full + lv_stunden.
      lv_stunden_sonst = lv_stunden_sonst + ls_test-sonst_stunden.
      lv_stunden_fahr = lv_stunden_fahr + ls_test-fahrzeiten.
      lv_stunden_fakt = lv_stunden_fakt + ls_test-fakt_stunden.

        WRITE: /30 lv_stunden_fahr,lv_stunden_sonst,lv_stunden_fakt,
               lv_stunden_full.

   lv_name_alt = ls_test-name.

Durch den Code resultierende Ausgabe z.B.:
Mitarbeiter1 2012.01
0 0 1 1
0 1 1 2
0 1 5 6
Mitarbeiter2 2012.01
0 0 1 1
0 1 7 8


Für jeden Tipp dankbar :)

LG
le_fuka

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


Re: Letzten Wert im Loop ausgeben

Beitrag von Thomas R. (Expert / 758 / 78 / 34 ) »
Hallo le_fuka,
warum nutzt Du nicht die Gruppenwechsel (vorher sortieren, Feldreihenfolge muss passen).
Such doch mal in der Hilfe nach
AT

MfG
Thomas R.

Re: Letzten Wert im Loop ausgeben

Beitrag von a-dead-trousers (Top Expert / 4419 / 224 / 1189 ) »
hi!
Thomas R. hat geschrieben:warum nutzt Du nicht die Gruppenwechsel (vorher sortieren, Feldreihenfolge muss passen).
Also laut Code macht er das ja:

Code: Alles auswählen.

IF lv_name_alt <> ls_test-name.
...
lv_name_alt = ls_test-name.
Die Variante ist noch dazu flexibler als das AT, da man so mehrere Felder auf Änderungen prüfen kann.

@le_fuka
Der Ansatz passt, nur musst du dir die ganze Zeile merken und die "alten" Daten bei jedem "Gruppenwechsel" ausgeben

Code: Alles auswählen.

CLEAR ls_test2.
LOOP AT lt_test INTO ls_test.
  IF ls_test2-name NE ls_test-name AND ls_test2 IS NOT INITIAL. 
* Ausgeben von ls_test2
  ENDIF.
  ls_test2 = ls_test1.
ENDLOOP.
* Ausgeben von ls_test2
Durch das IS NOT INITIAL verhinderst du, dass beim ersten Durchlauf schon was ausgegeben wird und am Schluss musst du nur noch den übriggebliebenen Eintrag ausgeben.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Letzten Wert im Loop ausgeben

Beitrag von le_fuka (ForumUser / 4 / 0 / 0 ) »
Hallo Leute,

ich hab es mit "At End Of name" probiert. Allerdings bei mehr als einer Buchungsperiode funktioniert das nicht mehr warum auch immer?
Die ausgabe sieht dann wie folgt aus:
Mitarbeiter_1 2012.01
(hier steht nichts)
Mitarbeiter_1 2012.02
8


Bei dem zweiten Vorschlag bin ich mir nicht sicher wie ich es umsetzen soll. Dadurch das jetzt mehrere Buchungsperioden betroffen sind hab ich den Code etwas angepasst.

Code: Alles auswählen.

LOOP AT lt_test INTO ls_test.
IF lv_name_alt <> ls_test-NAME OR lv_buper <> ls_test-buper.
        WRITE: / ls_test-NAME, 20 ls_test-buper USING EDIT MASK '____.__' .

ENDIF.
      IF ls_test2-name NE ls_test-name.
        WRITE : / lv_stunden_full.
        CLEAR: lv_stunden_full.
      ENDIF.

      lv_name_vnw = ls_test-name.
      lv_buper = ls_test-buper.
      ls_test2 = ls_test.

      REPLACE ',' IN ls_test-fahrzeiten WITH '.'.
      REPLACE ',' IN ls_test-sonst_stunden WITH '.'.
      REPLACE ',' IN ls_test-fakt_stunden WITH '.'.
      lv_stunden = ls_test-fahrzeiten + ls_test-sonst_stunden + ls_test-fakt_stunden.
      lv_stunden_full = lv_stunden_full + lv_stunden.


    ENDLOOP.

    WRITE:/ lv_stunden_full.

Hier wird aber für den ersten Mitarbeiter in der liste keine Gesamt Zeit ausgegeben sondern nur eine 0.

Danke für die Hilfe schon mal :)

LG
le_fuka

Re: Letzten Wert im Loop ausgeben

Beitrag von Thomas R. (Expert / 758 / 78 / 34 ) »
Hallo le_fuka,
anbei eine Lösung, die Dein Coding (Version 1) weitestgehend verwendet.

Code: Alles auswählen.

REPORT  zrt_test.
*---- Rate man mit Rosendahl die Struktur
TYPES:
  BEGIN OF lst_test,
    name type char20,
    buper type buper,
    fahrzeiten type char5,
    sonst_stunden type char5,
    fakt_stunden type char5,
  END OF lst_test.
DATA:
  ls_test TYPE lst_test,
  lt_test TYPE SORTED TABLE OF lst_test "hier kann man diskutieren ob standard und sort oder sorted Table
    WITH NON-UNIQUE KEY name buper,
  lv_stunden type i,
  lv_stunden_full type i,
  lv_stunden_fakt type i,
  lv_stunden_fahr type i,
  lv_stunden_sonst type i.
*---- Testdaten
ls_test-name = 'Mitarbeiter1'.
ls_test-buper = '201201'.
ls_test-fahrzeiten = '0,00'.
ls_test-sonst_stunden = '0,00'.
ls_test-fakt_stunden = '1,00'.
insert ls_test into table lt_test.
ls_test-name = 'Mitarbeiter1'.
ls_test-buper = '201201'.
ls_test-fahrzeiten = '0,00'.
ls_test-sonst_stunden = '1,00'.
ls_test-fakt_stunden = '0,00'.
insert ls_test into table lt_test.
ls_test-name = 'Mitarbeiter1'.
ls_test-buper = '201201'.
ls_test-fahrzeiten = '0,00'.
ls_test-sonst_stunden = '0,00'.
ls_test-fakt_stunden = '4,00'.
insert ls_test into table lt_test.
ls_test-name = 'Mitarbeiter2'.
ls_test-buper = '201201'.
ls_test-fahrzeiten = '0,00'.
ls_test-sonst_stunden = '0,00'.
ls_test-fakt_stunden = '1,00'.
insert ls_test into table lt_test.
ls_test-name = 'Mitarbeiter2'.
ls_test-buper = '201201'.
ls_test-fahrzeiten = '0,00'.
ls_test-sonst_stunden = '1,00'.
ls_test-fakt_stunden = '6,00'.
insert ls_test into table lt_test.
*--- Testdaten Periode 2
ls_test-name = 'Mitarbeiter1'.
ls_test-buper = '201202'.
ls_test-fahrzeiten = '1,00'.
ls_test-sonst_stunden = '2,00'.
ls_test-fakt_stunden = '3,00'.
insert ls_test into table lt_test.
ls_test-name = 'Mitarbeiter1'.
ls_test-buper = '201202'.
ls_test-fahrzeiten = '4,00'.
ls_test-sonst_stunden = '5,00'.
ls_test-fakt_stunden = '6,00'.
insert ls_test into table lt_test.
ls_test-name = 'Mitarbeiter1'.
ls_test-buper = '201202'.
ls_test-fahrzeiten = '7,00'.
ls_test-sonst_stunden = '8,00'.
ls_test-fakt_stunden = '9,00'.
insert ls_test into table lt_test.
ls_test-name = 'Mitarbeiter2'.
ls_test-buper = '201202'.
ls_test-fahrzeiten = '3,00'.
ls_test-sonst_stunden = '2,00'.
ls_test-fakt_stunden = '1,00'.
insert ls_test into table lt_test.
ls_test-name = 'Mitarbeiter2'.
ls_test-buper = '201202'.
ls_test-fahrzeiten = '0,00'.
ls_test-sonst_stunden = '1,00'.
ls_test-fakt_stunden = '2,00'.
insert ls_test into table lt_test.

*---- Beispiel - möglichst nah an der Vorgabe 1
LOOP AT lt_test INTO ls_test.
  AT NEW buper.
    WRITE: / ls_test-name, 20 ls_test-buper USING EDIT MASK '____.__' .

    CLEAR: lv_stunden_full,
     lv_stunden_fakt,
     lv_stunden_fahr,
     lv_stunden_sonst.
  ENDat.

  REPLACE ',' IN ls_test-fahrzeiten WITH '.'.
  REPLACE ',' IN ls_test-sonst_stunden WITH '.'.
  REPLACE ',' IN ls_test-fakt_stunden WITH '.'.
  lv_stunden = ls_test-fahrzeiten + ls_test-sonst_stunden + ls_test-fakt_stunden.
  lv_stunden_full = lv_stunden_full + lv_stunden.
  lv_stunden_sonst = lv_stunden_sonst + ls_test-sonst_stunden.
  lv_stunden_fahr = lv_stunden_fahr + ls_test-fahrzeiten.
  lv_stunden_fakt = lv_stunden_fakt + ls_test-fakt_stunden.

  AT END OF buper.
    WRITE: /30 lv_stunden_fahr,lv_stunden_sonst,lv_stunden_fakt,
           lv_stunden_full.
  ENDAT.

ENDLOOP.
Wie bereits gesagt, schau die die Hilfe zu AT an.

Willst Du bei mehreren Perioden zuerst alle Mitarbeiter einer Periode andrucken musst Du in der Typdefinition das Feld Buper vor Name stellen und auch die Sortierung der Tabelle so definieren.


MfG

Thomas R.

Seite 1 von 1

Vergleichbare Themen

2
Antw.
8039
Views
In einer LOOP AT Schleife bedingt zum nächsten Wert
von zideshowbob » 13.04.2010 10:41 • Verfasst in ABAP® für Anfänger
1
Antw.
388
Views
Wert einer Spalte mit Loop Anweisung ändern
von Gekomo » 30.09.2022 15:14 • Verfasst in ABAP® für Anfänger
5
Antw.
2102
Views
Zeichenfolge bis bestimmten Wert ausgeben
von nicetoknow » 10.08.2012 10:17 • Verfasst in ABAP® für Anfänger
1
Antw.
475
Views
Schleifenzähler vor Loop ausgeben
von Niklas Lapp » 20.02.2023 08:30 • Verfasst in ABAP® für Anfänger
1
Antw.
1766
Views

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Absprung VA02 Position
vor einer Stunde von gs3rr4 3 / 20
OPD Druck im SPOOL
vor 2 Stunden von Manfred K. 1 / 12
Hilfe zum FB MATERIAL_MAINTAIN_DARK
Gestern von black_adept gelöst 8 / 1801
HR-Entgeltnachweis
vor 2 Tagen von ChrisB 4 / 2335

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

Absprung VA02 Position
vor einer Stunde von gs3rr4 3 / 20
OPD Druck im SPOOL
vor 2 Stunden von Manfred K. 1 / 12
Hilfe zum FB MATERIAL_MAINTAIN_DARK
Gestern von black_adept gelöst 8 / 1801
HR-Entgeltnachweis
vor 2 Tagen von ChrisB 4 / 2335

Unbeantwortete Forenbeiträge

OPD Druck im SPOOL
vor 2 Stunden von Manfred K. 1 / 12
Export von Spools in XLSX
vor 5 Tagen von abapamateur 1 / 384
Feldberechnung ME32K
vor einer Woche von ZF_SAPler 1 / 987
MS-Word als Editor
letzen Monat von tekko 1 / 4486