0

Nächstes Datum finden

Hallo,

Ich habe in der Ursprungstabelle 2 Datumswerte. Davon hat das 1. immer einen wert, das 2. jedoch nur bei bedarf. Aus diesen werten sollen 3 fx Felder in einer anderen Tabelle gefüllt werden. Sie sollen den entsprechenden Wochentag anzeigen der am nächsten liegt und bei click das dementsprechende Datum ausgeben.

Das klappt alles wunderbar so lange nur das 1. Datum ausgefüllt ist. Doch wie bekomme ich das 2. Datum da mit rein.

Bisher bei wenn nur Datum 1 befüllt:

fx 1.Tag:


first((select Handy where Datum1>= today() ) order by Liefertermin).weekdayName(Liefertermin)
end

bei click: 

'für Anzeige' := first((select Handy where Datum1>0today()) order by Liefertermin).Liefertermin

 

fx 2. Tag:

let aa := first((select Handy where Datum1>=today() ) order by Liefertermin).Liefertermin;
first((select Handy where Datum1 > aa ) order by Liefertermin).weekdayName(Liefertermin)

bei click: 

let aa := first((select Handy where Datum1>0today()) order by Liefertermin).Liefertermin;
'für Anzeige' := first((select Handy where Datum1 > aa ) order by Liefertermin).Liefertermin

 

Der versuch alle Datum angaben von Datum 1 und Datum 2 in ein array zu packen scheitern, da die dann ja als text vorhanden sind und nicht weiterverarbeitet  werden können.

let aa := first((select Handy where Datum 1 ) order by Datum 1).Datum 1 + ",";
    let bb := first((select Handy where Datum 2 ) order by Datum 2).Datum 2 + ",";
    let arry:= aa + bb;
    let myARRAY := split(text(dd), ",");
    let kk := item(myARRAY, 0);
    let tt := item(myARRAY, 1);
    

Kann einer helfen? Ergebnis soll sein das immer der nächste Tag ab today() angezeigt werden soll. Also auch das Datum 2 berücksichtigt ist.

12 Antworten

null
    • Michi.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Liefertermin ist natürlich Datum 1

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

    Habs glaub.

    fx 1. Tag

    let aa := first((select Handy where Datum 1 > today()) order by Datum 1).Datum 1;
    let cc := first((select Handy where Datum 2 > today()) order by Datum 2).Datum 2;
    let dd := [cc, aa];
    min(dd)

    fx 2. Tag

    let aa := first((select Handy where Datum 1 > today()) order by Datum 1).Datum 1;
    let cc := first((select Handy where Datum 2 > today()) order by Datum 2).Datum 2;
    let dd := [cc, aa];
    let ss:=min(dd)

    let bb := text(Teamauswahl);
    let ff := first((select Handy where Datum 1 > ss) order by Datum 1).Datum 1;
    let zz := first((select Handy where Datum 2 > ss) order by Datum 2).Datum 2;
    let gg := [ff, zz];
    min(gg)

    oder geht es anders?

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

    doch noch ne frage? Wie frag ich ab ob ein wert enthalten ist.

    let array := [li, li2];

    if array then 
    weekdayName(date(min(array))) + " - " + format(date(min(array)), "DD.MM.")

    will nicht so recht. So hab ich immer den Bindestrich da stehen auch wenn kein wert enthalten ist.

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hi Michi. Vielleicht so:
     

    let array := [li, li2];
    if cnt(array) = 0  then
        ""
    else
        weekdayName(date(min(array))) + " - " + format(date(min(array)), "DD.MM.")
    

    P.S. Ich würde die Variable noch umbenennen, da "array" ja auch eine Funktion array() ist. Das könnte Mißverständnisse auslösen. Bist Du mit dem Rest Deines Problems durch? Gruß Mirko

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

    Das hab ich so gelöst

    let bb := 'für Anzeige';
    let cc := text(Teamauswahl);
    let ff := ((select Handy where Liefertermin = bb and Rolle = cc) order by Nr).number(Nr);
    let ff1 := ((select Handy where Liefertermin2 = bb and Rolle = cc) order by Nr).number(Nr);
    let array := ff + ff1;
    let myARRAY := split(text(array), ",");
    let kk := item(myARRAY, 0);
    let tt := item(myARRAY, 1);
    let gg := item(myARRAY, 2);

    Setzte die Ergebnisse zusammen füge zum trennen der Nr ein komma hinzu und teile es in einzelne ansprechbare Variablen am komma. So bekomm ich das derzeit hin für die Zuordnung. Mir viel nix anderes ein.

     

    Danke für den Tipp, setz ich um

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

    Eine Problem hab ich noch, wie kann ich garantieren das nur die Daten today() + 1 Tag neu aufgespielt werden. Diese Datensätze dürfen nicht gelöscht oder überschrieben werden.  Das aktuelle Skript berücksicht das nicht.

    if dialog("Daten für App bereitstellen", "Bitte die Kalenderwoche für die bereitstellung auswählen.", ["Aktuelle Woche", "Nächste Woche", "abbrechen"]) = "Aktuelle Woche" then
        for i in (select 'Aufträge')[Liefertermin > today() and item(split(yearweek(today()), "/"), 1) = item(split(yearweek(Liefertermin), "/"), 1)] do

    Dann werden alle Datensätze sofern schon vorhanden gelöscht und neu eingespielt.

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

    Hilfe openFullscreen will jetzt nicht mehr 🥵 

    Wie kann man das denn lösen? 

    let bb := 'für Anzeige';
    let cc := text(Teamauswahl);
    let ff := join((select Handy where Liefertermin = bb and Rolle = cc).text(Nr), ",");
    let ff1 := join((select Handy where Liefertermin2 = bb and Rolle = cc).text(Nr), ",");
    let zus := ff + ff1;
    let myARRAY := split(text(zus), ",");
    let kk := item(myARRAY, 0);
    let tt := item(myARRAY, 1);
    let gg := item(myARRAY, 2);
    (select Handy)[ number(Nr) = number(kk)].(Counter := 1);
    openFullscreen(number(kk))

    mekert rum mit openFullscreen(number) / oder openFullscreen(string)

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

      openFullscreen() erwartet als Parameter eine Datensatz-ID (Tabellen-Kennung plus Record-No.). Mit Strings oder Zahlen funktioniert es nicht.

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

      planox. pro Die bekommt er ja über die variable kk, nur leider musste ich die gewonnenen ID (Nr) der datensätze als string umwandeln um sie in einzelne variablen zu legen (kk, tt ,gg usw..).

      Könnte über : 

      let idfinden:=(select Handy)[ number(Nr) = number(kk)].(Nr);

      openFullscreen(first(idfinden)) 

      das ganze wieder gängig machen, doch da bau ich ja noch nen select ein sind so schon viele.

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

      Oder kann man, den mist der zwar funktionieren tut, gänzlich anders und besser schreiben? Ihr habt da 1000 mal mehr Ahnung. Ich benötige dringend die entsprechenden Nr der Datensätze einzeln ansprechbar, damit ich mit Ihnen arbeiten kann. Für die App sollen halt nur Felder zum anklicken da sein. Mit Ansichten zu arbeiten fällt da weg.

    • Ninox-Professional
    • planoxpro
    • vor 2 Jahren
    • Gemeldet - anzeigen
    Michi said:
    Die bekommt er ja über die variable kk, nur leider musste ich die gewonnenen ID (Nr) der datensätze als string umwandeln

    Eben, und dann ist es keine ID mehr, sondern ein Text, mit dem Ninox genauso viel anfangen kann wie mit "Trallala". Die ID stellt quasi ein eigenes Datenformat dar (nid), das z. B. bei select, create oder record() zurückgegeben wird.
     

    Ungeachtet des sonstigen Codes, den ich mir jetzt nicht näher angesehen habe, könnte folgendes funktionieren:

    let idfinden := first((select Handy)[ number(Nr) = number(kk)]);
    openFullscreen(idfinden)
    
      • Michi.1
      • vor 2 Jahren
      • Gemeldet - anzeigen

      planox. pro das funktioniert planox, das weis ich ja, aber ich hab so für eine Anwendung 4 select Anweisungen. Das ist mehr als blöd. Bekomm es aber auch nicht hin ff und ff1 in eine anweisung zu packen. Selbst wenn ich den teil mit den Lieferterminen in [] packe bringt mir das falsche Ergebnisse. Daher die zwei select ff und ff1.

      Das muss doch besser gehen

Content aside

  • vor 2 JahrenZuletzt aktiv
  • 12Antworten
  • 100Ansichten
  • 2 Folge bereits