0

Zeilenbezogene Prüfung (Hilfe benötigt)

Hey ihr Ninox-Profis.
Ich bin leider immernoch echt ein Laie was Ninox angeht. Ich versuche kurz zu erklären worum es geht und vielleicht kann mir ja jemand weiterhelfen! :')
Oben im Bild seht ihr bei "Messtyp" einen spezifischen Messtyp eingetragen, welcher mit den Grenzmaßen daneben verschiedene Toleranzen bilden. Das funktioniert alles schön und gut.
In der Untertabelle "Alle Messpunkte" wird in der Spalte "OK?" berechnet, ob das Teil in der Toleranz liegt. Hierzu benutze ich den Code: 

if 'Prüfbericht-Assistent'.'Kundenspezifische Toleranz' = 0 and
    'Prüfbericht-Assistent'.Messtyp != 4 then
    Messwert >= 'Prüfbericht-Assistent'.Minimum and
    Messwert <= 'Prüfbericht-Assistent'.Maximum
else
    if 'Prüfbericht-Assistent'.'Kundenspezifische Toleranz' = 0 and
        'Prüfbericht-Assistent'.Messtyp = 4 then
        Messwert >= 'Prüfbericht-Assistent'.'Minimum (Winkel)' and
        Messwert <= 'Prüfbericht-Assistent'.'Maximum (Winkel)'
    else
        if 'Prüfbericht-Assistent'.'Kundenspezifische Toleranz' = 1 and
            'Prüfbericht-Assistent'.Messtyp != 4 then
            Messwert >= 'Prüfbericht-Assistent'.'Minimum (kundenspezifisch)' and
            Messwert <= 'Prüfbericht-Assistent'.'Maximum (kundenspezifisch)'
        else
            if 'Prüfbericht-Assistent'.'Kundenspezifische Toleranz' = 1 and
                'Prüfbericht-Assistent'.Messtyp = 4 then
                Messwert >= 'Prüfbericht-Assistent'.'Winkel-Min. (kundenspezifisch)' and
                Messwert <= 'Prüfbericht-Assistent'.'Winkel-Max. (kundenspezifisch)'
            end
        end
    end
end

Nun wie die Profis bestimmt schon festgestellt haben ändert sich die Antwort im "OK?" Feld, wenn ich den Messytp ändere. Allerdings möchte ich Werte von verschiedenen Messtypen messen, die in die Untertabelle eingetragen werden, und das "OK?" Feld soll sozusagen mit dem Messtyp berechnen, der bei der Werteintragung ausgewählt war.
Das Ziel ist es mehrere Teile für eine Kategorie zu messen, und dann zur nächsten Kategorie (Messtyp) zu gehen, ohne dass sich die Antworten bei "OK?" ändern. Ich hänge euch noch eine Kopie der Datenbank an. Vielleicht kann mir ja jemand helfen!
Liebe Grüße, Jan

7 Antworten

null
    • pma_mgmt
    • vor 9 Tagen
    • Gemeldet - anzeigen

    Ich würde wie folgt vorgehen: 

    Eine Untertabelle Messungen erstellen mit Feldern: 
    kundenspezifische Toleranz
    Messtyp
    Messwert
    ja/nein-Feld Resultat mit "schreibbar wenn" "false" (kann nur durch Skripte geändert werden, nicht durch Menschen).

    Dann würde ich in Trigger nach Änderung in alle drei Felder schreiben 

    if Toleranz!=null and Messtyp!=null and Messwert!=null then
    HIER DEINE LOGIK, z.B. if Messwert>Minimum and Messwert<Maximum then true else false end
    end
    

    Dann hast du nämlich zu deinem spezifischen Prüfpunkt alle relevanten Parameter fest geschrieben. 

    Anschließend kannst du mit einer Formel 

    if cnt(Messungen[Resultat=false])>0 then "Messungen ungültig" else "Messungen gültig" end
    

    auf Ebene des Prüfobjektes prüfen, ob alle Untermessungen zum Objekt in Ordnung sind

    Grüße Peter

    • Jan_Heine
    • vor 9 Tagen
    • Gemeldet - anzeigen

    Hey Peter,
    danke für deine Antwort, aber ich glaube ich kann dir nicht ganz folgen. Was genau bewirkt das if-Statement damit das ja/nein Feld gleichbleibt?
    Liebe Grüße, Jan

      • pma_mgmt
      • vor 9 Tagen
      • Gemeldet - anzeigen

       Wenn ich dein Problem verstanden habe, dann gelten zum Zeitpunkt der Prüfung für das Prüfobjekt und für den Prüfpunkt gewisse Regeln. Diese Regeln musst du zum Prüfpunkt bzw. Prüfobjekt speichern, denn sollte sonst jemand in 5 Jahren die Toleranzen anpassen, dann würden plötzlich entweder alle bisher geprüften Objekte als ungültig definiert werden oder aussortierte Objekte plötzlich genehmigt werden. -> Deshalb keine Formel, sondern ein Datenfeld das sich berechnet auf Basis der aktuell gültigen Regeln.

      Dann würde ich eben als "'Prüfpunktergebnis':=if Regel1>Minimum and Regel1<Maximum then true else false end" hinter einen Trigger nach Änderung in die Felder schreiben, die für diesen Prüfpunkt relevant sind. Solltest du also messen, dann feststellen, dass es eigentlich doch ok ist, wenn für diesen Prüfling/Prüfpunkt größere Toleranzen gelten, dann würdest du die relevanten Felder ändern und die Prüfung würde erneut gerechnet werden. 

      Ich würde die Prüfung nicht als Formelfeld machen, denn ein Formelfeld ist ein Feld das jedes Mal auf dem Client berechnet wird. Wenn du also z.B. "Formel:=a+b+c+d" hast oder nur "Formelergebnis" abrufst, muss dein Client in der ersten Version sich alle a, b, c, d holen und rechnen und bei der zweiten Version einfach nur "Formelergebnis" laden. Auf der App kaum ein Problem, im Browser bei komplexen Prüfungen ein Problem. 

      Stell dir vor du willst ein Diagramm darstellen mit 100 Prüflingen die jeweils 1.000 Prüfungen haben. Dann müsstest du in Variante 2 100*1000 Werte von Ninox abfragen um das Diagramm darzustellen. Wenn du aber Variante 1 machst, dann müssten die 1000 Werte erst ihr Prüfergebnis berechnen aus weiteren 5 Elementen pro Prüfung -> 100*1000*5 Werte die von Ninox geladen und dann berechnet werden müssen. Noch einfacher wäre es dann: Wann immer du eine Prüfung hinzufügst, fügst du ein "Gesamtergebnis" auf Ebene des Prüflings ein. Dann brauchst du für das Diagramm nur 100 Abrufe.

    • Jan_Heine
    • vor 8 Tagen
    • Gemeldet - anzeigen

    Okayokay vielen Dank, dass du dir die Zeit genommen hast! Ich werde mal versuchen das irgendwie in Code zu realisieren! Ich melde mich dann!
    Vielen vielen Dank, Jan

    • mirko3
    • vor 7 Tagen
    • Gemeldet - anzeigen

    Hallo Jan. Werte einer Tabelle sind besser aufgehoben in fixen Feldern (text, number, ja/nein). Wenn Du Funktionsfelder benutzt, können diese die Werte ändern, wenn sich Bedingungen ändern. Meist hat man das alles nicht ganz so im Visier und eine kleine Änderung am Code an einer anderen Stelle und alle Deine tausenden Messwerte sind dahin. Ich habe noch nicht ganz begriffen, was Du da alles für Sachen durchführen musst, habe aber mal ein paar Änderungen an Deiner DB auf gut Glück vorgenommen. 

    1. es gibt jetzt ein Ja/Nein Feld für "OK". Dieses wird beim Anlegen des Datensatzes gefüllt durch Deinen Code mit den ganzen if-else Sachen.

    2. Der Button "neuer Prüfbericht" enthält nun noch ein paar Teile mehr und

    3. In der Untertabelle gibt es jetzt auch noch ein Feld für die Registrierung des Messtyps. 

    4. Du könntest jetzt also das "OK?" Feld löschen, oder zur Kontrolle mit dem neuen "OK" Feld noch ein paar Tage stehen lassen.

    mal sehen, ob ich das so richtig interpretiert habe. Aber wenn ich mir Deinen Dialog mit Peter ansehe, dann könnte ich auch daneben liegen. Mirko

    • Jan_Heine
    • vor 2 Tagen
    • Gemeldet - anzeigen

    Hey Mirko,
    der Code ist wirklich gut, aber wenn ich die Kriterien im Nachhinein ändere, dann ändert sich das OK? Feld trotzdem noch. Es soll halt zum Zeitpunkt der Messung mit meinem Code zu den Toleranzen geschaut werden, ob das okay ist, und der Wert (Ja oder Nein) soll stehen bleiben, auch wenn ich die Kriterien oben ändere.
    Danke und liebe Grüße, Jan

    • Jan_Heine
    • vor 2 Tagen
    • Gemeldet - anzeigen

    Ich hab grade den Code von dem Knopf ein bisschen für mich geändert und jetzt funktioniert alles prima! Ich danke dir vielmals Mirko für die Lösung, und auch Peter für die Hinweise!