Nach Datum sortieren

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

Nach Datum sortieren

Beitrag von HansPeter (ForumUser / 13 / 0 / 0 ) »
Änderung durch Moderator:
Auf Anfrage des Benutzers wurde der Inhalt seines Beitrags gelöscht. In dem Zusammenhang möchten wir daran erinnern, dass keiner hier in diesem Forum Inhalte postet, die gegen die Richtlinien seines Unternehmens verstoßen.
Zuletzt geändert von Jan am 25.01.2019 07:52, insgesamt 1-mal geändert.
Grund: Auf Anfrage des Benutzers

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


Re: Nach Datum sortieren

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »
Der Fehler scheint trivial. Ich sehe keinen LOOP über die Tabelle, die du sortierst.
Außerdem scheint es mir nicht opportun die Tabelle innerhalb des LOOP jedes mal neu zu sortieren anstatt kurz vor der ( nicht existenten ) Ausgabe.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Nach Datum sortieren

Beitrag von HansPeter (ForumUser / 13 / 0 / 0 ) »
Hab das sortieren bereits außerhalb des LOOPS getan.
Allerdings verstehe ich wirklich nicht, wie ich meine Struktur fülle und APPEND verwende.

Muss ich also

Code: Alles auswählen.

  LOOP AT gt_daten INTO gs_daten.
Aber wo kriegt er die Daten jetzt her? Bin ein noob.

Re: Nach Datum sortieren

Beitrag von HansPeter (ForumUser / 13 / 0 / 0 ) »
black_adept hat geschrieben:kurz vor der ( nicht existenten ) Ausgabe.
Die Ausgabe ist doch ganz am Ende vorhanden?

Code: Alles auswählen.

    

    SORT gt_daten BY gbdat ASCENDING.

    WRITE: /  p0002-vorna,
                   p0002-nachn,
                   p0002-gbdat COLOR 2.
    IF ( g_alter <= 20 ).
      WRITE        g_alter COLOR 1.
    ELSEIF ( g_alter <= 30 ).
      WRITE        g_alter COLOR 2.
    ELSEIF ( g_alter <= 40 ).
      WRITE        g_alter COLOR 3.
    ELSEIF ( g_alter <= 50 ).
      WRITE        g_alter COLOR 4.
    ELSEIF ( g_alter <= 60 ).
      WRITE        g_alter COLOR 5.
    ELSEIF ( g_alter <= 70 ).
      WRITE        g_alter COLOR 6.
    ELSEIF ( g_alter <= 80 ).
      WRITE        g_alter COLOR 7.
    ENDIF.

Re: Nach Datum sortieren

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »
Folgende Änderungen:
1.) Im GET-Zeitpunkt machst du wie bisher den APPEND an die Tabelle GT_DATEN, aber du lässst das ganze WRITE-Geraffel da weg.
2.) Du braucht einen Zeitpunkt "END-OF-SELECTION", der nach all den GETs gerufen wird.
3.) In diesem Zeitpunkt machst du den SORT und dann innerhalb des LOOP über die Tabelle GT_DATEN dann all deine WRITE-Ausgabe.
4.) Du diskriminierst Personen, die älter als 80 Jahre alt sind. Das ist lt. Gesetz verboten.
5.) Gerade als Noob: Benutze den Debugger und schau nach, was in deinem Programm passiert. Damit erklären sich normalerweise sehr, sehr viele Fragen und der Debugger ist eins der wichtigsten Tools der Entwicklers. Die Grundfuntionen muss man aus dem FF beherrschen und je früher man damit anfängt um so besser. Und auch wenn ich weiß wer mir gleich widersprechen wird: Mach das Ganze in der SAPGUI und nicht in Eclipse, da der Debugger m.W. aktuell hier noch mehr Funktionen unterstützt.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Nach Datum sortieren

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Das Coding ist "etwas verdreht". Lass mich mal versuchen den Knoten etwas zu lösen:

Code: Alles auswählen.

FORM get_pernr.
  
  SORT p0002 BY GBDAT. "<-- Zuerst mal die Daten sortieren.

  LOOP AT p0002. "<-- Die sortierte Tabelle für die Ausgabe verwenden

    READ TABLE p0001
      WITH KEY pernr = p0001-pernr. "< -- Hier erfolgt die "1:1 Verknüpfung mit der ersten Tabelle
    CHECK sy-subrc EQ 0 AND p0001-persg = '1' AND p0001-persk ='01'.   "Es werden nur Daten von Personen angezeigt,
    "die i.d Mitarbeitergruppe "1" und -kreis "01" sind.
*    WRITE: /    p0001-persg,
*                p0001-persk.

*Berechnen des Alters
    CALL FUNCTION 'COMPUTE_YEARS_BETWEEN_DATES'
      EXPORTING
        first_date                  = p0002-gbdat
        "MODIFY_INTERVAL                   =  ' '
        second_date                 = sy-datum
      IMPORTING
        years_between_dates         = g_alter 
      EXCEPTIONS
        sequence_of_dates_not_valid = 1
        OTHERS                      = 2.

  WRITE: /  p0002-vorna,
            p0002-nachn,
            p0002-gbdat COLOR 2.
  IF ( g_alter <= 20 ).
    WRITE        g_alter COLOR 1.
  ELSEIF ( g_alter <= 30 ).
    WRITE        g_alter COLOR 2.
  ELSEIF ( g_alter <= 40 ).
    WRITE        g_alter COLOR 3.
  ELSEIF ( g_alter <= 50 ).
    WRITE        g_alter COLOR 4.
  ELSEIF ( g_alter <= 60 ).
    WRITE        g_alter COLOR 5.
  ELSEIF ( g_alter <= 70 ).
    WRITE        g_alter COLOR 6.
  ELSEIF ( g_alter <= 80 ).
    WRITE        g_alter COLOR 7.
  ENDIF.
  ENDLOOP.
ENDFORM.
Das sollte zumindest funktionieren, aber schön ist was anderes (Tabellen ohne Kopfzeile, Kein CHECK), aber ich will dich jetzt nicht überfordern. So sieht man wenigstens was ich im Detail wirklich geändert habe.

EDIT:
Mit black_adept's Anmerkungen kannst du das Programm dann selber noch auf "Hochglanz" polieren.
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: Nach Datum sortieren

Beitrag von SaskuAc (Specialist / 321 / 37 / 43 ) »
Eine andere Frage, ist das hier das ganze Programm? Oder nur ein Ausschnitt?

Wenn nur ein Ausschnitt, dann kannst du das getrost ignorieren.
Falls es aber das Ganze Programm ist, dann würde ich dir sogar empfehlen, das ganze nicht innerhalb einer Form zu machen. Das Coding ist so kurz, und du hast keine weitere "Kapselung", dass sich die Form nicht lohnt. Du brauchst es ja tatsächlich nur an dieser einen Stelle.

Und mal kurz etwas, was ich persönlich ändern würde, ist aber für deine Frage nicht relevant. Ich würden den FuBa 'COMPUTE_YEARS_BETWEEN_DATES' weglassen und stattdessen folgendes coding verwenden:

Code: Alles auswählen.

data(tmp) = sy-datum+0(6) - p0002-gbdat+0(6). 
g_alter = tmp+0(2). 
so hättest du den FuBa auf 2 Zeilen verkürzt und hast trotzdem die Anzahl der Jahre. ( geht natürlich nur bei 2 Stelligen Zahlen, heißt 10-99, aber da du hier das Alter von Mitarbeitern berechnen willst, sollte das mehr als nur ausreichen )

Weil du ja, soweit ich weiß, Anfänger bist kurz erklärt.

Code: Alles auswählen.

data(tmp) = XXX " das ist eine Inline Deklaration. Hier erstellst du eine Variable die den Typ von ( in dem Beispiel XXX ) annimmt, bzw. bei der Berechnung dann I ( Integer ) 

" anstatt der Inline deklaration kannst du auch folgendes schreiben: 
data tmp type i length 6. 
tmp = sy-datum+0(6) - p0002-gbdat+0(6). 
" finde persönlich aber die inline schöner und ( meistens ) einfacher. - gibt aber außnahmen 


sy-datum+0(6) " das +0(6) ist eine sogenannte Offset angabe. Heißt du nimmst nur einen Teil der Variable, in dem Fall fange an der 0ten Stelle an und nimm dann die nächsten 6 Zeichen. 
" Ein Datum ist meistens 8 Stellen lang YYYYMMDD - heißt bei dem offset +0(6) wird YYYYMM genommen
" --> die Rechnung wäre dann so: 
tmp = 201901 - 199710. " --> 2191
" wenn du dann nur die ersten 2 Stellen ( per offset +0(2) ) von dem Ergebnis ( also tmp ) nimmst, hast du das alter in Jahren ( in dem Beispiel also 21 ) 
Das wäre jetzt mein Stil, wie ich es schöner, bzw. besser finden würde. Aber der Fuba ist auch vollkommen okay. Das ist etwas komplett subjektives, nichts was jeder für richtig oder gar schöner / lesbarer hält. ( Und wie schon geschrieben, das funktioniert auch nur, wenn der Mitarbeiter zwischen 10 und 99 Jahren alt ist. Wenn du also mal etwas schreiben musst, wo du eine andere Alters / Zeitspanne hast, dann nimm ruhig den FuBa her )

Re: Nach Datum sortieren

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
SaskuAc hat geschrieben:Falls es aber das Ganze Programm ist, dann würde ich dir sogar empfehlen, das ganze nicht innerhalb einer Form zu machen. Das Coding ist so kurz, und du hast keine weitere "Kapselung", dass sich die Form nicht lohnt.
Das habe ich ihm schon in dem anderen Thread gesagt, aber er hält daran fest, da es vom Gerüst her das Beispielprogramm seines Betreuers ist. Ich verstehe auch nicht, weshalb er da überhaupt loopt, anstatt die Werte vom GET zeilenweise zu übernehmen.
a-dead-trousers hat geschrieben:Und auch wenn ich weiß wer mir gleich widersprechen wird: Mach das Ganze in der SAPGUI und nicht in Eclipse, da der Debugger m.W. aktuell hier noch mehr Funktionen unterstützt.
Falls Du mich meinst: Ich werde Dir da nicht widersprechen. Ich nutze Eclipse nur als Editor; die gesamte Testung mache ich auch im SAPGui. Die Integration der Debuggingtools und SAPGui-Fenster in Eclipse ist nett, mir aber zu lahm. Außerdem mag ich keine Mäusekino-SAPGuis mit Eclipse-Rahmen außenrum. Es ist aber angenehm, auf diese Weise volle 5 Modi (plus einer für den Debugger) frei zu haben und keinen davon für die SE38 verbraten zu müssen.

Aber HansPeter wird sowieso kein Eclipse verwenden; der hat andere Sorgen.
Hanspeter hat geschrieben:Hab das sortieren bereits außerhalb des LOOPS getan.
Allerdings verstehe ich wirklich nicht, wie ich meine Struktur fülle und APPEND verwende.
Warum verwendest Du nicht eine SORTED TABLE anstatt einer STANDARD TABLE? Dann kannst Du einfach INSERT TABLE anstelle von APPEND verwenden und hast die Tabelle immer durchgehend sortiert.

Re: Nach Datum sortieren

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
DeathAndPain hat geschrieben:
a-dead-trousers hat geschrieben:Und auch wenn ich weiß wer mir gleich widersprechen wird: Mach das Ganze in der SAPGUI und nicht in Eclipse, da der Debugger m.W. aktuell hier noch mehr Funktionen unterstützt.
Falls Du mich meinst ...
Das war eine Aussage von black_adept und nicht von mir. :P
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

Seite 1 von 1

Vergleichbare Themen

7
Antw.
5389
Views
Aufsteigend nach Datum sortieren aber leere Felder
von ABAP_User » 03.02.2012 15:53 • Verfasst in ABAP® für Anfänger
2
Antw.
3386
Views
SELECT-OPTION -> Datum und Datum - 7 Tage
von etalon » 08.09.2004 10:48 • Verfasst in ABAP® Core
7
Antw.
5768
Views
Convert Gregorianisches Datum -> Julianisches Datum
von michael baum » 06.06.2005 09:25 • Verfasst in ABAP® Core
4
Antw.
340
Views
Daten zwischen Datum A und Datum B
von cecslucas » 13.10.2022 09:44 • Verfasst in ABAP® für Anfänger
2
Antw.
1791
Views
tabellen sortieren
von swonny » 31.01.2007 15:34 • 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

Zwischensumme Adobe Forms
vor 4 Tagen von Lucyalison 1 / 72
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141