0

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:

Screenshot 2019-06-16 22.02.21

und der Anwender möchte die Position "fünf" an dritter Stelle haben.

Screenshot 2019-06-16 22.03.32

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:

Screenshot 2019-06-16 22.10.20

 

Ich bin mir sicher, ich hab nur eine Kleinigkeit übersehen, ich komme aber partout nicht drauf... :-/

 

lg, Torsten

17 Antworten

null
    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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

    • Torsten_Stang.1
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Leo,

     

    danke - führt aber leider zum gleichen Ergebnis :-/

     

    lg, Torsten

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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."):

    Bildschirmfoto 2019-06-17 um 06.26.49

    Leo

    • Torsten_Stang.1
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Leo,

     

    super Idee, danke Dir!

     

    lg, Torsten

    • Ninox-Professional
    • planoxpro
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Danke euch. Coole Idee, super Lösung. Werde ich bestimmt mal "klauen" ... ;)

    • andreas_mtscouteu
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Danke Leo, super Lösung!

    • Ryszard_Paluch
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Leo

    Kannst Du bitte Deine Lösung bereitstellen? Ich versuche es nach zu bilden, aber es klappt nicht

    Gruß Richard 

    • andreas_mtscouteu
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Das wäre super! Danke Leo.

    • Torsten_Stang.1
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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

    • Ryszard_Paluch
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Torsten

    Vielen Dank

    Gruß Richard 

    • andreas_mtscouteu
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Danke Torsten

    • Administrator.5
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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

      • Torsten_Stang.1
      • vor 2 Jahren
      • Gemeldet - anzeigen
      • + Maßanzug statt Massenware +
      • RonaldP
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Moin Torsten Stang ,

      danke für das schicke Teil :-)

      Frage: Da ja doch immer wieder mal nach dieser DB gefragt wird, darf die in das Webinarteam?
      Wenn ja, können wir hier einen Link zur DB im Webinarteam machen und jeder der zukünftig in diesem Thread sucht, kann die DB dort runterladen.

      Vg Ronald

      • Torsten_Stang.1
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Hallo  Ronald,

       

      klar...

    • Administrator.5
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Danke dir für die schnelle Hilfe.

    • + Maßanzug statt Massenware +
    • RonaldP
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Ich füge die DB einfach hier ein...
    (Das ging im früheren Forum nicht)
    Nach dem Herunterladen muss die Datei erst entzippt werden!

    Positions-Nummern.ninox