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 / 755 / 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 / 4395 / 223 / 1182 ) »
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 / 755 / 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.
7948
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.
331
Views
Wert einer Spalte mit Loop Anweisung ändern
von Gekomo » 30.09.2022 15:14 • Verfasst in ABAP® für Anfänger
5
Antw.
2046
Views
Zeichenfolge bis bestimmten Wert ausgeben
von nicetoknow » 10.08.2012 10:17 • Verfasst in ABAP® für Anfänger
1
Antw.
386
Views
Schleifenzähler vor Loop ausgeben
von Niklas Lapp » 20.02.2023 08:30 • Verfasst in ABAP® für Anfänger
1
Antw.
1444
Views

Ü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

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