Automatisierte Reihenfolge von Positions-Nummern
Tach Gemeinde,
ich beschäftige mich gerade mit einem (eigentlich gängigen) Problem. Ziel ist es, Positionen eines Dokuments auch dann schlüssig und fortlaufend durchzunummerieren, wenn der Anwender die Positionsnummer einer Position ändert. Angenommen, ich habe fünf Positionen:
und der Anwender möchte die Position "fünf" an dritter Stelle haben.
DAS habe ich mit folgendem Code als Änderungs-Trigger beim Feld 'Position' bereits erfolgreich umgesetzt bekommen:
let my := this;
let myDok := Dokument;
let myPos := Position;
let myArray := ((select Position)[Dokument = myDok] order by intern);
for i in myArray do
if i.Nr != my then
if i.intern >= myPos then
i.(intern := i.intern + 1);
i.(Position := i.Position + 1)
end
end
end;
intern := myPos;
let myArray2 := ((select Position)[Dokument = myDok] order by intern);
var myCNT := 1;
for i in myArray2 do
i.(intern := myCNT);
i.(Position := myCNT);
myCNT := myCNT + 1
end
'intern' ist ein verstecktes Hilfsfeld, dass sich, so mein Plan, erst ändert, wenn alle Vergleiche durch sind.
Möchte der Anwender umgekehrt Position "drei" an die fünfte Stelle setzen, landet sie immer bei 4:
Ich bin mir sicher, ich hab nur eine Kleinigkeit übersehen, ich komme aber partout nicht drauf... :-/
lg, Torsten
17 Antworten
-
Hallo Torsten,
es sollte so funktionieren:
---
let myID := Nr;
let myN := Position;
var NN := 0;
for ii in Dokument.Position[Position >= myN and Nr != myID] order by Position do
ii.(Position := ii.Position + 1)
end;
for ii in Dokument.Position order by Position do
NN := NN + 1;
ii.(Position := NN)
end
---
Angenommen die Verknüpfung zu der Tabelle Position heißt auch Position.
Leo
-
Hallo Leo,
danke - führt aber leider zum gleichen Ergebnis :-/
lg, Torsten
-
Hallo Torsten,
stimmt, jetzt weiß ich wieder, warum ich diese Formel nicht mehr verwende. Ich habe damals (Datenbank 130_...) festgestellt, dass mit solcher Methode nur in eine Richtung gehen kann. Entweder bewegst du die Datensätze von oben nach unten oder eben mit meiner Formel von unten nach oben. Ich habe inzwischen bei solchen Situationen immer zwei Buttons mit Pfeilen nach Oben und nach unten eingebaut. Bei "Nach Unten" ist die Formel:
---
let my := this;
let next := first(Dokument.Position[Position= my.Position+ 1]);
my.(Position := my.Position + 1);
next.(Position := next.Position - 1)
---
und die Sichtbarkeitsformel:
---
let myPos := Position;
cnt(Dokument.Position[Position > myPos]) != 0
---
Entsprechen bei "nach Oben"
---
let my := this;
let myfor := first(Dokument.Position[Position = my.Position - 1]);
my.(Position:= my.Position - 1);
myfor.(Position:= myfor.Position+ 1)
---
und die Sichtbarkeitsformel:
---
let myPos := Position;
cnt(Dokument.Position[Position < myPos]) != 0
---
So
werden bei der ersten und der letzten Position je ein Button angezeigt und die anderen Positionen können in beide Richtungen mit Button "geschoben" werden. Ich finde diese Vorgehenswese Kundenfreundlicher, weil ich dem Benutzer nicht erklären muss, wie genau werden die Positionsnummer geschoben, wenn er die Nummern wechselt.So sieht die Lösung bei mir aus (die Positionen heßen hier "No."):
Leo
-
Hallo Leo,
super Idee, danke Dir!
lg, Torsten
-
Danke euch. Coole Idee, super Lösung. Werde ich bestimmt mal "klauen" ... ;)
-
Danke Leo, super Lösung!
-
Hallo Leo
Kannst Du bitte Deine Lösung bereitstellen? Ich versuche es nach zu bilden, aber es klappt nicht
Gruß Richard
-
Das wäre super! Danke Leo.
-
Hallo,
ich bin zwar nicht Leo - aber da ich's noch "rumliegen" hatte:
https://www.dropbox.com/s/yt4v9mayz37uon9/Positions-Nummern.ninox?dl=0
lg, Torsten
-
Hallo Torsten
Vielen Dank
Gruß Richard
-
Danke Torsten
-
Hallo,
in die Runde. Hat jemand vielleicht noch die Vorlage die in der Dropbox lag und kann mir diese zur Verfügung stellen. Die aus der Dropbox ist leider nicht mehr Verfügbar.
Danke für eure Hilfe vorab
-
Danke dir für die schnelle Hilfe.
-
Ich füge die DB einfach hier ein...
(Das ging im früheren Forum nicht)
Nach dem Herunterladen muss die Datei erst entzippt werden!
Content aside
- vor 2 JahrenZuletzt aktiv
- 17Antworten
- 3231Ansichten
-
3
Folge bereits