Datumselektion - näheste zu "Heute"

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
7 Beiträge • Seite 1 von 1
7 Beiträge Seite 1 von 1

Datumselektion - näheste zu "Heute"

Beitrag von Marty (ForumUser / 2 / 0 / 0 ) »
Hi Alle!

hab' noch nicht so lange ABAP-Kenntnisse (genau so wie mein Deutsch.. :wink: ), aber ich habe jetzt ein Problem für Profis:

Es gibt eine Tabelle, mit (z.B. 3) Datum-Einträge, und dann zusätliche Infos (nicht wichtig):

1. 08-01-2005 (Zusatzinfo)
2. 10-01-2005 (...)
3. 20-04-2005 (...)

Nehm' Mal an, dass es Heute den 11. Jänner ist.
Ich suche eine Weise worauf ich den Eintrag lesen kann, der im Vergangenheit liegt, und am nähesten zum 11. Januar. In diesem Fall also der 2. Eintrag.

Könnt ihr mir helfen?

Danke!

Martijn
(ein ratloser ABAP-newbie)

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


Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
probier's mal mit Nachfolgendem:

Code: Alles auswählen.

* Datum absteigend sortieren
SORT itab BY datum DESCENDING.

* alle Zeilen finden, wo Datum kleiner oder gleich heute
LOOP AT itab WHERE datum LE sy-datum.
* Schleife beim erstem Satz verlassen
  EXIT.
ENDLOOP.

IF sy-subrc EQ 0.
* Verarbeitung
ENDIF.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
LT statt LE - dann passts.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
black_adept hat geschrieben:LT statt LE - dann passts.
:oops:

Wobei: schließt 'jüngste Vergangenheit' den aktuellen Tag aus?
Hängt wahrscheinlich von der Aufgabenstellung ab...

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
Wobei: schließt 'jüngste Vergangenheit' den aktuellen Tag aus?
Wird ja langsam filosofisch hier. :D
Aber ich denke mal die Antwort ist "ja" denn der heutige Tag ist zu fast allen (Programmlauf)Zeiten unbestimmt und kann nicht eindeutig in die "Vergangenheit" eingeordnet werden.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von Gast ( / / 0 / 3 ) »
Hallo Marty.

Folgende Ausgabe erhalte ich in unserem Entwicklungssystem für unten stehenden Code (Eingabedatum 06.01.2005):

### Beispiel 1a ###
1161000157 05.01.2005
2160002473 05.01.2005
2160002474 05.01.2005
2160002475 05.01.2005
2160002476 05.01.2005
2300002043 05.01.2005
2300002044 05.01.2005
2300002045 05.01.2005
3160000131 05.01.2005
### Beispiel 2a ###
1161000157 05.01.2005
2160002473 05.01.2005
2160002474 05.01.2005
2160002475 05.01.2005
2160002476 05.01.2005
2300002043 05.01.2005
2300002044 05.01.2005
2300002045 05.01.2005
3160000131 05.01.2005
### Beispiel 2b - 1 Datensatz ###
1161000157 05.01.2005
### Beispiel 2b - 1 Datensatz ###
1161000157 05.01.2005

Eventuell kannst Du ja was mit anfangen...

Gruß
Dirk


Code: Alles auswählen.

report test.

tables vbak.

parameters:
pa_datum type sy-datum default sy-datum.

data:
datum_tmp type sy-datum,
wa_vbak   type vbak,
it_vbak   type table of vbak.


write: / '### Beispiel 1a ###'.

select *
into table it_vbak
from vbak
where erdat < pa_datum.

sort it_vbak by erdat descending vbeln.

loop at it_vbak into wa_vbak where erdat < pa_datum.
  if not datum_tmp is initial and datum_tmp <> wa_vbak-erdat.
    exit.
  endif.
  datum_tmp = wa_vbak-erdat.
  write: / wa_vbak-vbeln, wa_vbak-erdat.
endloop.


write: / '### Beispiel 2a ###'.

clear datum_tmp.

select *
into wa_vbak
from vbak
where erdat < pa_datum
order by erdat descending vbeln.
  if not datum_tmp is initial and datum_tmp <> wa_vbak-erdat.
    exit.
  endif.
  datum_tmp = wa_vbak-erdat.
  write: / wa_vbak-vbeln, wa_vbak-erdat.
endselect.


write: / '### Beispiel 2b - 1 Datensatz ###'.

select *
into table it_vbak
from vbak
where erdat < pa_datum.

sort it_vbak by erdat descending vbeln.

read table it_vbak into wa_vbak index 1.
if sy-subrc = 0.
  write: / wa_vbak-vbeln, wa_vbak-erdat.
endif.


write: / '### Beispiel 2b - 1 Datensatz ###'.

select *
into wa_vbak
from vbak
where erdat < pa_datum
order by erdat descending vbeln.
  write: / wa_vbak-vbeln, wa_vbak-erdat.
  exit.
endselect.

Alles passt!

Beitrag von Marty (ForumUser / 2 / 0 / 0 ) »
Ich möchte euch alle herzlich danken!

Alles passt so; alles ist schon transportiert zum Produktivsystem... :D

Und um weitere filosofische Diskussionen zu vermeiden (obwohl's auch spass machen kann) -> ich habe "LT" in meinem Code genutzt.. :wink:

Seite 1 von 1

Vergleichbare Themen

8
Antw.
1656
Views
Datumselektion, in dem Zeitraum Monat Jahr ermitteln MM/JJJJ
von swonny » 26.04.2021 09:36 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Regex in where
vor 2 Stunden von tar 8 / 179
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1489

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

Regex in where
vor 2 Stunden von tar 8 / 179
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1489

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9822