0

bestimmen ob summe = 0 ist bei Schleife ??

Grüßt euch,

wie kann ich das lösen??  

Wenn keine fehlteile vorhanden sind (also alle ergebnisse auf "0" stehen) soll nur ein text da stehen, ansonsten die Auflistung. 

Ps.: kann man eventuell der Optik wegen den text "fehlteile" automatisch so positionieren das es alles untereinander steht. (Lieferantennamen sind ja immer unterschiedlich lang, auch kommen hier immer mal welche dazu)

Danke Michi

---
if sind alle fehlteile = 0 then
"komplett WE"
else
zeig das an
---
let me := this;
let vergleich := unique(((select 'AB-bestätigung' where 'Aufträge' = me and 'Eingang der AB' < today()) order by text(Lieferantenauswahl)).text(Lieferantenauswahl));
let anzeige := for i in vergleich do
        let soll := sum((select 'AB-bestätigung')['Aufträge' = me and 'Eingang der AB' < today() and text(Lieferantenauswahl) = i].'Anzahl der Bestellten Artikel');
        let ist := sum((select Lieferscheine)['Aufträge' = me and 'Ausgelagert am' = null and text(Lieferantenauswahl) = i].'anzahl Artikel');
        let name := first(select 'AB-bestätigung' where 'Aufträge' = me and 'Eingang der AB' < today() and text(Lieferantenauswahl) = i).text(Lieferantenauswahl);
        let sumeaus := text(soll - ist);
        "•" + " " + name + "..." + "fehlteile: >  " + sumeaus
    end;
join(anzeige, "
")

15 Antworten

null
    • Michi.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Meine Idee war das ich vor der schleife ein leeres nummern array setz was ich in der schleife befüll.( let sume:=[] / gefüllt mit sume:= soll - ist ) sodas ich darauf zugreifen kann, ohne das ganze doppelt am laufen zu haben. Und am Ende mit sum([sume]) auf den Wert überprüfe. 

    Doch leider verstehe ich das ganze nicht. Array sind glaube ich nicht meine Freunde, aber ich muss das in meinen Schädel rein bekommen 

      • mirko3
      • vor 1 Jahr
      • Gemeldet - anzeigen

        Hallo Michi, genau so hätte ich es auch gemacht. Ich habs nicht geprüft, aber etwa so. Die html-Anzeige löst auch das Tabulatorproblem. Weniger schick ist die Lösung mit rpad() bei der Du nach rechts mit Zeichen auffüllst.

      let me := this;
      let vergleich := unique(((select 'AB-bestätigung' where 'Aufträge' = me and 'Eingang der AB' < today()) order by text(Lieferantenauswahl)).text(Lieferantenauswahl));
      let test:=[0];
      let anzeige := "<table>" + for i in vergleich do
              let soll := sum((select 'AB-bestätigung')['Aufträge' = me and 'Eingang der AB' < today() and text(Lieferantenauswahl) = i].'Anzahl der Bestellten Artikel');
              let ist := sum((select Lieferscheine)['Aufträge' = me and 'Ausgelagert am' = null and text(Lieferantenauswahl) = i].'anzahl Artikel');
              let name := first(select 'AB-bestätigung' where 'Aufträge' = me and 'Eingang der AB' < today() and text(Lieferantenauswahl) = i).text(Lieferantenauswahl);
              let sumeaus := text(soll - ist);
              test := array(test, [sumaus]);
              "<tr><td>" + name + "</td><td>Fehlteile: > " + sumaus + "</td></tr>"
          end + "</table>";
      if sum(test) = 0 then html("") else html(anzeige) end
      • Michi.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Mirko grüß dich,

      der obere teil ist ja schon ne ableitung von deiner hilfe. Der unter wird es auch. Klappt auch bestimmt. Danke

      Warum muss ich denn die variable die vorher gebildet ist und kein wert enthält da mir rein? 

      test := array(test, [sumaus]);

      Ich hab alles probiert und mir die Zähne ausgebissen. Mit dem führt man ja glaube ich die array zusammen. Aber so recht verstehe tu ich es nicht. Brauch man aber immer wieder

    • mirko3
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hi Michi.

    • let test := [0] legt das Zahlenarray mit einer 0 an
    • in der Schleife würde es bei jedem Schleifendurchgang mit der Variablen "sumaus" ergänzt, dafür wird die Funktion array() benutzt, welche zwei Arrays kombiniert, deshalb muß die Zahl, die in "sumaus" hinterlegt ist erst in ein Array gepackt werden, also []
    • dann wird in der if-Abfrage die Summe geprüft, was ja schon Dein Gedanke war
    • die Anordnung in korrekten Spalten durch join() ist immer schwierig, da die einzelnen Zeichen unterschiedliche Breiten haben, deshalb ist auch lpad() und rpad(), oder die Vergabe von Punkten ungenau und ich habe mich in Deinem Fall für eine html-Tabelle entschieden. Wenn Du das Feld drucken willst, mußt Du natürlich auf eine andere Version übergehen.
      • Michi.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Mirko Guten Morgen Mirko,

      es funktioniert so weit super auch die Ansicht über Html ist viel besser (soll nicht gedruckt werden). Jedoch wird anscheinend das array test nicht gefüllt oder es rechnet nicht richtig. Es müßte ja als Ergebnis 3 da stehen.

      • Michi.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Michi hab glaub den Grund, für join muste ich es ja als string übergeben.

      let aa := soll - ist;
      test := array(test, [aa]);

      • Michi.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Michi ein problem hab ich gerade noch gefunden.

      wenn ich die Anzahl in der Tabelle AB-bestätigung im feld Anzahl der bestellten Artikel ändere (ursprung für den Vergleich mit unique) verliere ich bis auf den ersten Eintrag in der Auflistung, den Lieferantennamen. Die summe dahinter wird richtig gerechnet. 

      Ändere ich dann in Lieferscheine die Anzahl, erscheinen wieder alle Lieferantennamen.

      Was hab ich da schon wieder falsch gemacht

    • Michi.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Mirko  Es geht bei änderung der Anzahl der eintrag verloren, wo man die Zahl geändert hat. Ändere zb. bei Schock die Anzahl der Artikel, ist bei: 

    let vergleich := unique(((select 'AB-bestätigung' where 'Aufträge' = me and 'Eingang der AB' < today()) order by text(Lieferantenauswahl)).text(Lieferantenauswahl))

    Nur noch Bosch & Nobilia zu sehen, obwohl die Bedingungen für Schock erfüllt sind.

    • Michi.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    hier wird richitg ausgegeben:

    let vergleich := unique(((select 'AB-bestätigung' where 'Aufträge' = me and 'Eingang der AB' < today()) order by text(Lieferantenauswahl)).text(Lieferantenauswahl));
    

     hier muss der fehler sein: die ausgabe verliert den Lieferantennamen

    first(select 'AB-bestätigung' where 'Aufträge' = me and 'Eingang der AB' < today() and text(Lieferantenauswahl) = i).text(Lieferantenauswahl)
    
    • Michi.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    geschieht nur wenn in der Tabelle AB-bestätigung die Anzahl geändert wird, sobald man jetzt in Lieferscheine irgend eine Anzahl ändert ist der Name wieder da.

    • mirko3
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Prüfe doch mal die beiden anderen Bedingungen bei der Variablen "name", ob es überhaupt einen Auftrag = me gibt und einen Eingang vor today(). Dann kann der Name ja stimmen, aber wenn eine der beiden anderen Bedingungen nicht zutrifft, gibt es kein Ergebnis und das Feld bleibt leer.

     'Aufträge' = me and 'Eingang der AB' < today() 
      • Michi.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Mirko die stimmen. (sind ja gleich) letztes Bild: gleiche Bedingungen, aber die Anzahl geändert in AB-bestätigung.

      Die variable vergleich zeigt es richtig.

      Die variable name in der schleife zeigt es auch richtig. ABER  eben nur so lang, wie man in der Tabelle AB-bestätigung die Anzahl der bestellten Artikel nicht ändert. sobald das geschieht fehlt der name.

      Geht man dann in Lieferscheine und ändert dort eine Anzahl der Artikel, so erscheint auch der name wieder. (als ob irgendwas mit dem first nicht passt)

    • mirko3
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Dann versuch doch mal bei first() an das select noch ein "order by number(Nr)" einzubauen. Und wäre nicht hier sogar last() zutreffender? Aber ich fische hier gerade voll im Trüben.

    • Michi.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hab ich probiert (beides) Ergebnis ist das selbe. Hab aber festgestellt wenn ich die DB schliese und wieder öffne, dann rechnet Ninox neu und es steht alles wieder richtig da. (als ob das Skript nicht voll durschläuft wenn man in der Tabelle AB bestätigungen was nachträglich ändert.) ??? 

    • Michi.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Das einzige was ich mir noch vorstellen kann, ist das es damit zu tun hat, das in der Tabelle AB-Bestätigung das bezugs feld Lieferantenauswahl ein DAF ist und in Lieferscheine ein einfaches Auswahlfeld ist.

    Lass mir einfach bei Änderung der Lieferanten die Daten in die bezugstabelle für das DAF schreiben damit die bezeichnungen immer gleich sind. Muss das in Lieferanten und einer weiteren Tabelle noch ändern (gab da noch kein DAF beim erstellen, nur ist es mühsam raus zu finden wo das überall verwendet wurde als bezug in Skripten)

    let mySuche1 := lower(text(Lieferantenauswahl));
    let aa := cnt(select auswahlfeld where contains(lower(Text), mySuche1));
    if aa = 0 then
        let tex := text(Lieferantenauswahl);
        let myR := (create auswahlfeld);
        myR.(Text := tex)
    end;
    

Content aside

  • Status Answered
  • vor 1 JahrZuletzt aktiv
  • 15Antworten
  • 53Ansichten
  • 2 Folge bereits