Nach Datum sortieren


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

Nach Datum sortieren

Beitragvon HansPeter » 23.01.2019, 13:29

Ä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
HansPeter
ForumUser
 
Beiträge: 12
Registriert: 18.01.2019, 12:52
Dank erhalten: 0 mal

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: Nach Datum sortieren

Beitragvon black_adept » 23.01.2019, 13:55

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
black_adept
Top Expert
 
Beiträge: 3184
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 553 mal
Ich bin: Freiberufler/in

Re: Nach Datum sortieren

Beitragvon HansPeter » 23.01.2019, 14:02

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.
HansPeter
ForumUser
 
Beiträge: 12
Registriert: 18.01.2019, 12:52
Dank erhalten: 0 mal

Re: Nach Datum sortieren

Beitragvon HansPeter » 23.01.2019, 14:06

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.
 
HansPeter
ForumUser
 
Beiträge: 12
Registriert: 18.01.2019, 12:52
Dank erhalten: 0 mal

Re: Nach Datum sortieren

Beitragvon black_adept » 23.01.2019, 14:10

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
black_adept
Top Expert
 
Beiträge: 3184
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 553 mal
Ich bin: Freiberufler/in

Re: Nach Datum sortieren

Beitragvon a-dead-trousers » 23.01.2019, 14:20

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.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 3156
Registriert: 07.02.2011, 13:40
Dank erhalten: 779 mal
Ich bin: Entwickler/in

Re: Nach Datum sortieren

Beitragvon SaskuAc » 24.01.2019, 06:14

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 )
SaskuAc
Specialist
 
Beiträge: 227
Registriert: 01.06.2015, 10:16
Dank erhalten: 23 mal
Ich bin: Entwickler/in

Re: Nach Datum sortieren

Beitragvon DeathAndPain » 24.01.2019, 13:31

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.
DeathAndPain
Expert
 
Beiträge: 934
Registriert: 05.05.2006, 10:14
Dank erhalten: 218 mal
Ich bin: Entwickler/in

Re: Nach Datum sortieren

Beitragvon a-dead-trousers » 24.01.2019, 14:36

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.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 3156
Registriert: 07.02.2011, 13:40
Dank erhalten: 779 mal
Ich bin: Entwickler/in


Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
Adobe Forms - Download - Keine Seiten
vor 11 Stunden von shimsham 2 Antw.
UTF-8 mit Funktionsbaustein
vor 13 Stunden von a-dead-trousers 4 Antw.
gelöst Fehler SAVE NOT ALLOWED bei F4IF_START_VALUE_REQUEST
vor 10 Stunden von AdrianSchm 1 Antw.
SAP Logon bei Aufruf WebGUI
Gestern von msfox 0 Antw.
Formatierung Textdatei aus Query und ABAP
vor 13 Stunden von wreichelt 5 Antw.

  Ähnliche Beiträge beta
Aufsteigend nach Datum sortieren aber leere Felder
06.02.2012, 09:56 von ralf.wenzel 7 Antw.
Sortierung absteigend nach neuestem Datum - BW
12.02.2011, 08:31 von Frank Dittrich 1 Antw.
PNP: GET pernr selektiert nicht nach Datum
09.12.2016, 12:54 von Dyrdek 1 Antw.
tabellen sortieren
12.05.2007, 10:43 von herschel 2 Antw.
Tabelle sortieren
18.04.2007, 08:18 von TWP 1 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

cron