[Gelöst] Mehrstufige Sortierung

29. Juli 2008 11:06

Hallo zusammen,

gibt es eine Möglichkeit, gleichzeitig nach Feldern aufteigend und anderen Feldern absteigend zu sortieren.
Also wie in SQL: Order BY Feld1 DESC, Feld2 ASC ?

Hintergrund: wir haben benutzen die Tabelle 5061 "Market. & Vertr. Bemerk.-Zeile". Wir haben den neuen Key "Datum,No" angelegt, und wollen danach absteigend sortieren, also die aktuellsten Einträge sollen als erstes folgen. Nur blöd ist, dass nun die Zeilennummern auch absteigend sortiert werden.

Gibt es da irgend eine Lösung?
Zuletzt geändert von Gollum83 am 30. Juli 2008 10:04, insgesamt 1-mal geändert.

29. Juli 2008 11:14

Nein, NAV-Schlüssel sind in allen Feldern entweder auf- oder absteigend, nie aber gemischt.

Um dies dennoch zu erreichen, müsstest du ein neues Feld erschaffen, z.B. "Zeilennr. absteigend". Außerdem müsstest du einen neuen Schlüssel mit erstellen bzw. deinen bisherigen erweitern: "Datum,No.,Zeilennr. absteigend".
Das neue Feld musst du zur Laufzeit passend füllen (Vorschlag: Einfach die "normale" Zeilennr. * (-1) ; dann liefert dir die gewählte Sortierung die Zeilen vorwärts.

29. Juli 2008 11:37

Hallo Natalie,

erst mal vorab vielen Dank für den Tip.
Schade, dass das Mischen nicht möglich ist.

Ich versteh, was du meinst. Aber es geht nicht darum, den Inhalt des Feldes "Zeilennummer" in aufsteigender Reihenfolge zu bekommen,
sondern wirklich um den kompletten Datensatz.

Grund: Pro Datum und Kontaktnummer kann es ja mehrere Bemerkungszeilen geben.Die erste Bemerkungszeile bekommt die niedrigste Zeilenummer, die letzte die letzte Zeilennummer.
Wenn ich nun die neue Sortierung wähle, werden zwar vom Datum her die neuesten Daten angezeigt, den Text muss man dann aber von unten nach oben lesen. Die zuletzt eingegebene Bemerkung steht ganz oben (höchste Zeilennummer), was bei einem zusammenhängenden Text keinen Sinn macht.

Es scheint so, als würde die Sortierung auf Felder wirken, die ich in meinem key überhaupt nicht angegeben hab

29. Juli 2008 11:45

Gollum83 hat geschrieben:Wenn ich nun die neue Sortierung wähle, werden zwar vom Datum her die neuesten Daten angezeigt, den Text muss man dann aber von unten nach oben lesen. Die zuletzt eingegebene Bemerkung steht ganz oben (höchste Zeilennummer), was bei einem zusammenhängenden Text keinen Sinn macht.

Genau das habe ich in meinem Lösungsvorschlag berücksichtigt:
Ergebnis:
Datum: rückwärts
Zeilen innerhalb Datum: vorwärts durch neues Feld Zeilennr. * (-1).

29. Juli 2008 12:39

ah ok, ich denke ich habs vom Prinzip her verstanden
ich muss halt eine möglichkeit finden, bei zugriff auf die Tabelle,
jedesmal die Werte zu aktualisieren.

Ich werds heute, spätestens aber morgen umsetzen, und dann geb ich feedback.

Herzlichen Dank schon mal an dieser Stelle

29. Juli 2008 12:44

Sollen die Bemerkungen denn angezigt werden - sprich: Form -, oder in einem Report gedruckt?

30. Juli 2008 09:03

Die Bemerkungen sollen in einem Form zu sehen sein.
Also wenn ich die Logik von Natalie umsetzen will, muss ich vor dem Anzeigen der Daten durch alle betroffenen Daten gehen, und die Aktualisierung vornehmen

30. Juli 2008 09:32

Gollum83 hat geschrieben:Also wenn ich die Logik von Natalie umsetzen will, muss ich vor dem Anzeigen der Daten durch alle betroffenen Daten gehen, und die Aktualisierung vornehmen


Ich würde es so machen (nachdem das neue Feld samt Schlüssel angelegt worden ist):
1. einen Report schreiben, der in allen bisherigen Zeilen das neue Feld füllt.
2. In die Programmierung eingreifen, sodass alle zukünftigen Zeilen entsprechend gefüllt werden. Je nach "Architektur" muss diese Programmierung auf der Form und/oder auf der Tabelle erfolgen.

30. Juli 2008 09:50

Habe das Feld und denn neuen Schlüssel angelegt.
Das Form wählt den neuen Schlüssel absteigend.
Im OnOpenForm Trigger greife ich per Record-Variable folgendermaßen ein:
Code:

IF FINDLAST THEN;
IF ContComment.FIND('-') THEN
REPEAT
  ContComment."Line No. DESC" := 0;
  ContComment.MODIFY;
UNTIL ContComment.NEXT = 0;

IF ContComment.FIND('-') THEN
REPEAT
  ContComment."Line No. DESC" := ContComment."Line No." * -1;
  ContComment.MODIFY;
UNTIL ContComment.NEXT = 0;


Man merkt zwar beim Starten des Forms eine kleine Verzögerung.
Aber ich denke mál, dass in dieser Bemerkungstabelle jetzt nicht unbedingt tausende Datensätze sind, also dürfte es passen.

An dieser Stelle ein herzliches Dankeschön

30. Juli 2008 09:55

Wieso gleich zweimal?
"Line No." ist ein Feld, dass sich niemals ändert (zumindest im Standard nicht). Daher ist es unnötig, dein neues Feld permanent zu aktualisieren.
Es reicht, wenn du es einmalig mit dem Report machst (für alte Zeilen) und dann nur noch bei Anlage von neuen Zeilen.

30. Juli 2008 10:04

du hast recht. das würde der performance nicht schaden...