0

Bedingung geht nicht

Eine eigentlich einfache Aufgabe bekomme ich gerade nicht zum Laufen...

Das Zahlenfeld 'anfahrt Nr' will einfach nicht in den Argumenten. (=1 geht noch, ohne zu wissen, ob das Ergebnis passt) alles andere ergibt immer 0, was definitiv nicht passt.)

let ja := 'Datum 2024';
cnt((select Abrechnungen)[date(year('Datum der abrechnung'), month('Datum der abrechnung'), day('Datum der abrechnung')) = date(year(ja), month(ja), day(ja)) and
        'anfahrt Nr' = 1])

Kann mir einer auf die Sprünge helfen

21 Antworten

null
    • Ninox-Professional
    • planoxpro
    • vor 9 Monaten
    • Gemeldet - anzeigen

    Hallo Michi, warum so kompliziert beim Datums-Vergleich? Ich würd's mal so versuchen:

    let ja := 'Datum 2024';
    cnt(select Abrechnungen where 'anfahrt Nr' = 1 and date('Datum der abrechnung') = date(ja))
    
      • Michi.1
      • vor 9 Monaten
      • Gemeldet - anzeigen

       grüß dich,

      Weil ich die Daten nach Monaten in eine andere Tabelle schreibe und das ganze noch für mehrere Jahre. Ergebnis ist dann ein datensatz pro jahr. Das klappt ja auch, nur eben in dem zusammenhang nicht das Argument. Das will einfach nicht so. Ist doch aber nur ein simpler Vergleich... verstehe einfach .einen fehler nicht

      • Ninox-Professional
      • planoxpro
      • vor 9 Monaten
      • Gemeldet - anzeigen

       Was sind denn 'Datum 2024' und 'Datum der abrechnung' für Datentypen? Ich war von Datumsfeldern ausgegangen (oder Datum + Uhrzeit).

      • Michi.1
      • vor 9 Monaten
      • Gemeldet - anzeigen

       es sind datumsfelder. 

      muss das datum nur auseinander nehmen damit ich die bezüge bekomme. ( date(year(ja)+ i) zb. 

      Aber davon abgesehen funktioniert es eben ohne das schon nicht. Das verstehe ich eben nicht. Wenn ich nur das zahlenfeld mit select abfrage = 1, 2, 3 usw funktioniert es. Nur das Datum geht auch. 

      Das oben genannte Script geht, zeigt aber bei =1 das selbe Ergebniss , wie ohne die Abfrage auf das zahlenfeld. Sobald man !=1 oder = 2 ect. Verwendet ist das Ergebnis 0
       

    • Ninox-Professional
    • planoxpro
    • vor 9 Monaten
    • Gemeldet - anzeigen

    Hi Michi ...

     said:
    muss das datum nur auseinander nehmen damit ich die bezüge bekomme. ( date(year(ja)+ i)

    In deinem Code oben addierst oder subtrahierst du aber nichts, sondern liest einfach nur die Werte von Jahr, Monat und Tag aus. Ich verstehe nicht, was das in der Abfrage bringen soll.

     said:
    Wenn ich nur das zahlenfeld mit select abfrage = 1, 2, 3 usw funktioniert es. Nur das Datum geht auch. 

    Dass beide Abfragen einzeln jeweils ein Ergebnis bringen, bedeutet ja nicht zwangsläufig, dass sie das auch in Kombination tun. Wenn es in der Tabelle 'Abrechnungen' Datensätze gibt, bei denen im Zahlenfeld 'anfahrt Nr' eine 1 steht UND bei denen der Wert des Feldes 'Datum der abrechnung' mit dem aus 'Datum 2024' übereinstimmt, dann sollten diese Datensätze bei o. a. Formel auch mitgezählt werden. Ich würde also eher noch mal das Ergebnis überprüfen.

      • Michi.1
      • vor 9 Monaten
      • Gemeldet - anzeigen

      jetzt mal das script im ganzen

      delete (select hilfstabelle_Auswertung);
      let anfangspunkt := Anfang_Auswertungszeitraum;
      let durchlaufjahr := year(today()) - year(anfangspunkt) + 1;
      for i in range(0, durchlaufjahr) do
          let jahranzeige := year(anfangspunkt) + i;
          let monatsarray := [0];
          for p in range(0, 12) do
              let arraybildung := cnt((select Abrechnungen)[date(year('Datum der abrechnung'), month('Datum der abrechnung'), day('Datum der abrechnung')) = date(year(anfangspunkt) + i, month(anfangspunkt) + p, day(anfangspunkt)) and
                          'anfahrt Nr' != 1]);
              monatsarray := array(monatsarray, [arraybildung])
          end;
          let myARRAY := split(text(monatsarray), ",");
          let m1 := item(myARRAY, 1);
          let m2 := item(myARRAY, 2);
          let m3 := item(myARRAY, 3);
          let m4 := item(myARRAY, 4);
          let m5 := item(myARRAY, 5);
          let m6 := item(myARRAY, 6);
          let m7 := item(myARRAY, 7);
          let m8 := item(myARRAY, 8);
          let m9 := item(myARRAY, 9);
          let m10 := item(myARRAY, 10);
          let m11 := item(myARRAY, 11);
          let m12 := item(myARRAY, 12);
          let jan := m1;
          let feb := m2;
          let ma := m3;
          let ap := m4;
          let maii := m5;
          let ju := m6;
          let jul := m7;
          let au := m8;
          let se := m9;
          let ok := m10;
          let no := m11;
          let de := m12;
          let new := (create hilfstabelle_Auswertung);
          new.(Jahr := jahranzeige);
          new.(Jan := jan);
          new.(Feb := feb);
          new.('Mär' := ma);
          new.(April := ap);
          new.(Mai := maii);
          new.(Jun := ju);
          new.(Jul := jul);
          new.(Aug := au);
          new.(Sep := se);
          new.(Okt := ok);
          new.(Nov := no);
          new.(Dez := de)
      end
      
      • Anfang_Auswertungszeitraum = Feldtyp: Datum ( zb. 01.01.2022)
      • 'Datum der abrechnung'= Feldtyp: Datum ( zb. 05.08.2023)
      • 'anfahrt Nr' = Feldtyp: Zahl (Inhalt geht von der Zahl 1 bis 6 )

      Das Script arbeitet mit dem richtigen Ergebnis, wenn ich 'anfahrt Nr' weglasse oder 'anfahrt Nr'= 1 anfüge. (es zeigt dann wirklich nur die Anzahl der Treffer mit 'anfahrt Nr'=1) ???

      Sobald ich aber 'anfahrt Nr' !=1 oder andere Konstellationen versuche, wird kein einziger Treffer angezeigt, was falsch ist.

      • Michi.1
      • vor 9 Monaten
      • Gemeldet - anzeigen

      Die Argumente sind aber immer enthalten

      • Michi.1
      • vor 9 Monaten
      • Gemeldet - anzeigen

       

       said:
      Das Script arbeitet mit dem richtigen Ergebnis, wenn ich 'anfahrt Nr' weglasse oder 'anfahrt Nr'= 1 anfüge. (es zeigt dann wirklich nur die Anzahl der Treffer mit 'anfahrt Nr'=1) ???

       Wenn ich das Argument 'anfahrt Nr' weglasse, müssen die Treffer für einen Monat 58 sein. Angezeigt werden aber 20.

      20 ist wiederum das richtige Ergebnis für die 'anfahrt Nr' = 1.

      Hab das jetzt mal mit einem Ja/Nein Feld probiert. Geht ebenso wenig.  Es muss also irgendwas beim Vergleich mit dem Datum sein. Oder ich habe den Gesamtaufbau falsch.

      • Ninox-Professional
      • planoxpro
      • vor 9 Monaten
      • Gemeldet - anzeigen

       

      Ok, das sieht ganz anders aus als die beiden eingangs zitierten Code-Zeilen. Das müsste ich mir später noch mal genauer ansehen, aber eines fällt spontan auf: In dem Vergleichsdatum ‚anfangspunkt‘ erhöhst du zwar Jahr und Monat, aber der Wert von day() bleibt immer der gleiche.

      Wenn also in ‚Anfang_Auswertungszeitraum‘ bspw. 01.01.2022 steht, wird auch immer auf den 1. geprüft. 01.01., 01.02., 01.03. usw. Lautet das 'Datum der abrechnung' also bspw. auf den 02.01.2022 oder irgendeinen anderen Tag des Monats, dann gibt es keine Übereinstimmung, der Datensatz wird also nicht mitgezählt.

      Falls der Tag keine Rolle spielt und du nur auf Jahr und Monat abfragen willst, dann würde ich entweder yearmonth() nehmen oder die Abfrage auf year() und month() beschränken. Als Beispiel auf deinen Code bezogen:

      cnt(select Abrechnungen
      where year('Datum der abrechnung') = year(anfangspunkt) + i
      and month('Datum der abrechnung') = month(anfangspunkt) + p
      and 'anfahrt Nr' != 1);

      Das würde ich, ungeachtet des sonstigen Codes, mal versuchen.

      • Ninox-Professional
      • planoxpro
      • vor 9 Monaten
      • Gemeldet - anzeigen

      Nebenbei: Die dreifache Zuweisung der Werte im unteren Teil ist. m. E. auch unnötiger Ballast. Die drei Zeilen 

      let m1 := item(myARRAY, 1);
      ...
      let jan := m1;
      ...
      new.(Jan := jan);

      sollten sich auch auf eine reduzieren lassen:

      new.(Jan := item(myARRAY, 1));

      Und das gilt natürlich auch für die anderen Monate.

      • Michi.1
      • vor 9 Monaten
      • Gemeldet - anzeigen

      ich verzweifle hier....

      Du hast recht. Ich benötige nur alle Monate für das Jahr und die Jahre aufgelistet. Dein Ansatz führt leider genau zum selben Ergebnis. Hab jetzt für noch den select mit order by in eine Variable gelegt... bringt mehr Tempo aber mehr nicht.

      delete (select hilfstabelle_Auswertung);
      let anfangspunkt := Anfang_Auswertungszeitraum;
      let durchlaufjahr := year(today()) - year(anfangspunkt) + 1;
      let datorder := ((select Abrechnungen) order by 'Abrechnung vom');
      for i in range(0, durchlaufjahr) do
          let jahranzeige := year(anfangspunkt) + i;
          let monatsarray := [0];
          for p in range(0, 12) do
              let arraybildung := cnt(datorder[year('Datum der abrechnung') = year(anfangspunkt) + i and
                              month('Datum der abrechnung') = month(anfangspunkt) + p and
                          'anfahrt Nr' != 1]);
              monatsarray := array(monatsarray, [arraybildung])
          end;
          let myARRAY := split(text(monatsarray), ",");
          let new := (create hilfstabelle_Auswertung);
          new.(Jahr := jahranzeige);
          new.(Jan := item(myARRAY, 1));
          new.(Feb := item(myARRAY, 2));
          new.('Mär' := item(myARRAY, 3));
          new.(April := item(myARRAY, 4));
          new.(Mai := item(myARRAY, 5));
          new.(Jun := item(myARRAY, 6));
          new.(Jul := item(myARRAY, 7));
          new.(Aug := item(myARRAY, 8));
          new.(Sep := item(myARRAY, 9));
          new.(Okt := item(myARRAY, 10));
          new.(Nov := item(myARRAY, 11));
          new.(Dez := item(myARRAY, 12))
      end
      
      • Ninox-Professional
      • planoxpro
      • vor 9 Monaten
      • Gemeldet - anzeigen

       

      Wenn ich das Script richtig interpretiere, dann willst du die Anzahl der Abrechnungsdatensätze für jeden Monat seit ‚Anfang_Monatszeitraum‘ ermitteln und jahresweise in eine Tabelle schreiben. Ich würde es mal so versuchen:

      delete select hilfstabelle_Auswertung;
      let myY := year(Anfang_Auswertungszeitraum);
      let myYM := yearmonth(Anfang_Auswertungszeitraum);
      let datorder := ((select Abrechnungen where 'anfahrt Nr' != 1 and yearmonth('Abrechnung vom') >= myYM) order by 'Abrechnung vom');
      for ZY in range(myY, year(today()) + 1) do
         let myArray := for ZM in range(1, 13) do
            cnt(datorder[year('Abrechnung vom') = ZY and month('Abrechnung vom') = ZM]) end;
         let newRec := (create hilfstabelle_Auswertung);
         newRec.(
            Jahr := ZY;
            Jan := item(myArray, 0);
            Feb := item(myArray, 1);
            'Mär' := item(myArray, 2);
            April := item(myArray, 3);
            Mai := item(myArray, 4);
            Jun := item(myArray, 5);
            Jul := item(myArray, 6);
            Aug := item(myArray, 7);
            Sep := item(myArray, 8);
            Okt := item(myArray, 9);
            Nov := item(myArray, 10);
            Dez := item(myArray, 11)
         )
      end
      • Michi.1
      • vor 9 Monaten
      • Gemeldet - anzeigen

      DANKE, da wäre ich nicht drauf gekommen. Endlich richtige Ergebnisse.

      • Rafael_Sanchis
      • vor 9 Monaten
      • Gemeldet - anzeigen

       Hi Michi, please one question, the last script works for you ? Without problem

      Thanks

      • Michi.1
      • vor 9 Monaten
      • Gemeldet - anzeigen

       ohne Probleme

      • Rafael_Sanchis
      • vor 9 Monaten
      • Gemeldet - anzeigen

       

      thanks, to me give me some problems, sometimes I have to leave the DB enter again ans work

      • Michi.1
      • vor 9 Monaten
      • Gemeldet - anzeigen

      läuft im WEB und auf der Mac-App

      • Rafael_Sanchis
      • vor 9 Monaten
      • Gemeldet - anzeigen

       

      • Rafael_Sanchis
      • vor 9 Monaten
      • Gemeldet - anzeigen

       

      How I say work but I neeed to leave the DB and enter again and take the changes

      • Michi.1
      • vor 9 Monaten
      • Gemeldet - anzeigen

      ich hab das Skript in einem Button, dieser füllt eine Tabelle für das Diagramm

      • Rafael_Sanchis
      • vor 9 Monaten
      • Gemeldet - anzeigen

       

      Yes the same I place de script in a button, extrange 🤔