0

Manuell Sortieren

Hallo zusammen,

ich suche einen Weg, Datensätze in einer Tabelle manuell zu sortieren. Die Idee ist, ein Feld "Reihenfolge" mit einer Zahl zu befüllen und dann diese Spalte einfach aufsteigend sortiert anzuzeigen. Etwa so:

Tomate 1

Banane 2

Gurke 3

 

Um die Reihenfolge zu ändern, würde ich nun gerne mit einem Button die Zahl um 1 erhöhen (bzw. reduzieren) und entsprechend mit der Nachbarzahl vertauschen.

Tomate 2

Banane 1

Gurke 3

->

Banane 1

Tomate 2

Gurke 3

Leider bekomme ich das irgendwie nicht in code gegossen. 

Kann mir jemand einen Tip geben?

In der tatsächlichen Anwendung soll es dann um die Gliederung von Arbeitsaufträgen (WBS) in einem Projekt gehen.

Danke

8 Antworten

null
    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo, im Webinar-Team gibt es die Datenbank '045_Manuelle_Sortierung', in der Leo beispielhaft zeigt, wie man Bestellpositionen manuell neu durchnummerieren kann.

    Dem Webinar-Team kann jeder Ninox-User mit Cloud-Account beitreten. Kurze Mail an support@ninox.com mit Bitte um Aufnahme in das Team "Webinar DE 2020" genügt.

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Zusammen, 

    die Datenbank hat aber keine Buttons zum Sortieren. Habe jetzt hier noch ein Beispiel mit Buttons:

    https://www.dropbox.com/s/xr20jnes8bsnpec/Manuelle%20Sortierung.ninox?dl=0

    Leo

    • ZitronenKiller
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Danke Leo,

    das ist genau was ich gesucht habe. Auf die Codezeilen wäre ich nicht gekommen...

    John

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

    Klasse! Hab mir die DB auch gleich geklaut. ;)

    • Joe
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo. Genau so eine Datenbank benötige ich. Leider lässt sie sich auf dem ipad nicht öffnen. Gibt es nocheine andere Möglichkeit an denCode/Screenshots zu kommen?

    • Frank_Heitmann.1
    • vor 8 Tagen
    • Gemeldet - anzeigen

    Ich hole das Thema jetzt auch noch einmal hoch. Der Dropbox-Inhalt ist schon längst gelöscht. Hat hier jemand nochmal Codebeispiele zur Hand?

      • Heinrich Frey Maschinenbau GmbH
      • Christian_Rott
      • vor 8 Tagen
      • Gemeldet - anzeigen

       Wenn ich es noch richtig zusammen bekomme benötigst du ein Formelfeld und zwei Buttons einen fürPostion hoch eine für Position runter. Stelle Dir mal meinen Code hier rein musst du dann aber an deine DB abändern.

      oder fürs Formelfeld:

      let myID := Nr;
      let myArr := for i in Angebot.Angebotspositionen order by Position do
              if i.Nr = myID then
                  "<b>" + i.(Position + " - " + Artikel.'Artikel Name') + "</b>"
              else
                  i.(Position + " - " + Artikel.'Artikel Name')
              end
          end;
      html(join(myArr, "<br>"))

      Formel Postion hoch:

      if Position != 1 then
          let me := this;
          let myPrev := first(Angebot.Angebotspositionen[Position = me.Position - 1]);
          me.(Position := me.Position - 1);
          myPrev.(Position := myPrev.Position + 1)
      end

       

      Formel Postion runter:

      if Position != max(Angebot.Angebotspositionen.Position) then
          let me := this;
          let myFoll := first(Angebot.Angebotspositionen[Position = me.Position + 1]);
          me.(Position := me.Position + 1);
          myFoll.(Position := myFoll.Position - 1)
      end

    • Frank_Heitmann.1
    • vor 8 Tagen
    • Gemeldet - anzeigen

    superschnelle Hilfe - danke dir.

    Ich hab's jetzt so gelöst:

    Position hoch:

    do as server
        let me := this;
        let dieseNummer := me.'Manuelle Sortierung';
        let vorherigerEintrag := last((select Rechnungspositionen where Rechnung = me.Rechnung and 'Manuelle Sortierung' < dieseNummer) order by 'Manuelle Sortierung');
        if vorherigerEintrag then
            let wechselNummer := vorherigerEintrag.'Manuelle Sortierung';
            vorherigerEintrag.('Manuelle Sortierung' := dieseNummer);
            me.('Manuelle Sortierung' := wechselNummer)
        end
    end
    

    Position runter:

    do as server
        let me := this;
        let dieseNummer := me.'Manuelle Sortierung';
        let naechsterEintrag := first((select Rechnungspositionen where Rechnung = me.Rechnung and 'Manuelle Sortierung' > dieseNummer) order by 'Manuelle Sortierung');
        if naechsterEintrag then
            let wechselNummer := naechsterEintrag.'Manuelle Sortierung';
            naechsterEintrag.('Manuelle Sortierung' := dieseNummer);
            me.('Manuelle Sortierung' := wechselNummer)
        end
    end