0

Hilfe zur Sortierung

Hallo Forum, hallo Team,

ich komme gerade nicht weiter. Meine Situation:

Ich habe eine Tabelle mit Herstellern, diese haben jeweils Produkte in einer Untertabelle... 

Einige Hersteller nehmen an einem Event teil und bekommen einen Standplatz zugewiesen. Ich setze einen Schalter "Event" und vergebe eine Stand-Nr. Einige Produkte der Hersteller werden ebenfalls bei dem Event vorgeführt, bekommen also auch einen Schalter "Event".

Bis hierhin alles kein Problem.

Jetzt generiere ich mir eine Liste mit Teilnehmern, deren Produkte und derer Preise - dank Leo´s "Join"-Hinweis alles machbar...

Ich habe also ein Funktionsfeld wo ich via:

for p in select 'Hersteller' where Eventschalter do
"Stand-Nr.: " + p.Stand + "
Hersteller: " + p.'Hersteller' + "
______________________________________________

" + join(p.Produkte[Eventschalter = 1].("• Art." + Artikelnummer + " - " + Artikel + " " .....

 

usw. eine Liste generiere.

Ich habe dieses Funktionsfeld dubliziert, und lasse mir die Preise und Bestellspalte für Kunden farblich formatiert anzeigen, da die Druckausgabe über "join-Felder" ja sehr begrenzt ist was die Formatierung angeht. Einige Felder liegen übereinander - das ist soweit alles für den Zweck ausreichend...

Bildschirmfoto 2019-04-27 um 10.21.57

 

FRAGE: Wie bekomme ich in einer for-Schleife die Sortierung nach Ständen hin?

Wie kann ich NINOX sagen nach welchem Feld er die Ausgabe der for-Schleife sortieren soll?

Danke für eure Hinweise...

Beste Grüße

Tobias

7 Antworten

null
    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Tobias,

    das Zauberwort heißt "order by". In deiner Formel kann das so aussehen:

    ---

    for p in select 'Hersteller' where Eventschalter order by Stand do
    "Stand-Nr.: " + p.Stand + "
    Hersteller: " + p.'Hersteller' + "
    ______________________________________________

    " + join(p.Produkte[Eventschalter = 1].("• Art." + Artikelnummer + " - " + Artikel + " " .....

    ---

     

    Leo

    • T_Bartzsch
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Leo, Hammer! Funktioniert :) Tausend Dank.

    Jetzt kämpfe ich noch mit den Umbrüchen auf mehrere Seiten - ich hoffe wirklich da tut sich demnächst noch etwas seitens NINOX bei der PDF Ausgabe...

    Schönes Wochenende!

    Beste Grüße

    Tobias

    • T_Bartzsch
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Leo, lässt sich die join Routine auch noch Sortieren? Wenn Produkte ein Feld "Sortierung" haben?

    • T_Bartzsch
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Es funktioniert.... Ich habe einfach in der p-Schleife statt JOIN eine weitere i-Schleife verbaut die ich über "order by Sortierung" sortieren kann

    • marie_mlb
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hast du das Problem mit den Umbrüchen lösen können?

    • T_Bartzsch
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Ja, mehr oder weniger. In diesem Fall weise ich einem Weinhersteller nicht nur eine Standnummer zu, sondern vergebe auch manuell eine Seitennummer in ein entsprechendes Feld. Je nachdem wie viele Artikel der jeweilige Hersteller hat, kann ich mal 5, 6, oder 8 Hersteller auf eine Seite bringen. Die obige Formel sortiert also nicht nur nach Schalter “Teilnahme” sondern filtert auch nach gleicher Seite. 

    Das geht selbst bei einer Messeliste mit ca. 30 Seiten noch bequem von Hand. Ich generiere mir dann jeweils auf dem ersten Hersteller einer Seite das PDF und fasse diese dann am Ende zusammen. Sicher ließe sich das auch noch automatisieren, wenn man weiß: “Bei 5 Herstellern dürfen es 23 Artikel auf der Seite sein, bei 8 Herstellern nur noch 16” usw. Auch das zusammenfassen der einzelenen PDF ließe sich über eine RestAPI machen...

     

    Der aktuelle Code sieht so aus:

     

    {let mySeite := Seite;
    replace(text(for p in (select “Hersteller/Weingut” where “Messe” and Seite = mySeite) order by Stand do

    ” + for i in p.Weine[Messe = 1] order by “Netto VK” do
    if i.Jahrgang then i.Jahrgang + “* ” else void end + i.“Artikelname Verkostungsliste” + “ ” + replace(i.“Inhalt formatiert”, “,”, “.”) + if i.“Allergene:” like “Sulfite” then
    “**”
    end + if i.Aktionstext then
    “ - [” + i.Aktionstext + “]”
    end + “


    end + “


    end), “,”, “”)}

     

    zur Erklärung:

    - ich checke die Seite des Herstellers in dessen Datensatz ich gerade bin.

    - in einer for-p-Schleife suche ich alle Hersteller mit gesetztem “Messe”-Schalter und gleicher Seite sortiert nach Standnummer. Jeder Hersteller hat eine verknüpfte Tabelle “Weine”.

    - diese Weine frage ich in der for-i-Schleife ab sortiert nach Preis. Jeder Wein hat widerum einen Schalter “Messe” weil nicht alle Hersteller alle Produkte mitbringen. Aus diesen Weinen ziehe ich mir die Informationen die ich darstellen will.

    - Da die for-Schleife die Werte kommasepariert ausgibt, ersetze ich das Komma mit replace am Ende durch nichts (daher muss ich in der Inhaltsangabe eines Weines in der i-Schleife das Komma durch einen Punkt ersetzen.

    WICHTIG 

    Die “harten” Umbrüche in obiger Formel müssen genau so übernommen werden! Ich lege mir - wie Folien - mehrere unterschiedlich formatierte Formelfelder übereinander! Daher ist in obigem Beispiel direkt die erste Zeile eine leere Zeile. Dahin kommt in einem zweiten Formelfeld der Name des Herstellers. In diesem zweiten Formelfeld bleibt die Struktur voll erhalten, inkl. for-i-Schleife, allerdings werden keine Werte aus der i-Schleife abgefragt sondern nur die Zeilenumbrüche übernommen... Ist vielleicht etwas kompliziert, aber so kann man einigermaßen schön formatierte PDF erzeugen. 

    Hier mal ein Screenshot aus dem Layouteditor und dann das fertige PDF:

     

    Ich habe hier in einem Thread schon mal das ganze etwas näher erklärt, finde es nur gerade nicht... wenn ichs finde hänge ich den Thread hier nochmal an.

    • T_Bartzsch
    • vor 3 Jahren
    • Gemeldet - anzeigen

Content aside

  • vor 3 JahrenZuletzt aktiv
  • 7Antworten
  • 2057Ansichten