0

Feld auf Änderungen überprüfen

Hallo,

 

ich stehe auf dem Schlauch bei einer Formel.

Ich habe eine Tabelle, in der eine Untertabelle mit einer Straßenliste ist. Regelmäßig gibt es in dieser Tabelle Änderungen, es kommen Datensätze dazu und werden gelöscht. Ich habe ein Funktionsfeld mit der Formel 'Zuletzt geändert am' und ein Datums und Uhrzeitfeld, das mit dem aktuellen Datum und Uhrzeit befüllt wird, sobald ein Button zum ausdrucken der Tour gedrückt wird. (printRecord(this, "1 - Tour");
'Zuletzt gedruckt am_' :=now())
 

Nun soll mit einer anderen Formel die beiden Felder verglichen werden und dieses mit einer Farbe angezeigt werden.

let myDruck := 'Zuletzt gedruckt am_';

let myAend := 'Zuletzt geändert am';

if myDruck < myAend then

styled("Nein", "Red")

else

if myDruck > myAend then

styled("Ja", "Green")

 

end

end

 

Leider funktioniert die Formel nicht, er zeigt immer nur Nein!

 

Hat da jemand einen Tip für mich?

 

Gruß

Mirko

6 Antworten

null
    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Mirko, m. E. kann der Zeitwert von 'Zuletzt gedruckt' nie größer sein als der von 'Zuletzt geändert', weil ja auch das Setzen des Datums beim Drucken von Ninox als Änderung registriert wird.

    • Mirko.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Copytexter,

     

    selbst wenn ich das mit = oder >= mache, ändert sich da nichts?

     

    Kann das daran liegen, das die Felder nicht vom gleichen Typ sind?

    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Mirko,

     

    sobald Du ein Feld des Datensätzes (hier 'Zuletzt gedruckt am_') änderst, ändert sich auch das systeminterne 'Zuletzt geändert am'-Feld.

     

    Wie wäre es denn mit einer verknüpften (und versteckten) Protokoll-Tabelle, die Du z.B. bei neuen Datensätzen automatisch mit erstellst:

     

    let my := this;
    let myNew := (create Protokoll);
    my.Protokoll := myNew

     

    Beim Druck setzt Du das Feld entsprechend:

     

    printRecord(this, "1 - Tour");
    Protokoll.'Zuletzt gedruckt am_' :=now()

     

    Dann kannst Du wie folgt abfragen:

     

    let myDruck := Protokoll.'Zuletzt gedruckt am_';
    let myAend := 'Zuletzt geändert am';
    if myDruck < myAend then
       styled("Nein", "Red")
    else
       styled("Ja", "Green")
    end

     

    lg, Torsten

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

    Hi, im Grunde geht es ja nur um ein paar Millisekunden, die der Zeitstempel der letzten Änderung dem des letzten Druckens immer voraus ist. Deshalb könnte man sich vielleicht auch mit einem kleinen Trick behelfen und den Zeitstempel zum Drucken einfach um eine Minute erhöhen:

    'Zuletzt gedruckt am_' := now() + time(0, 1)

    Dann würde das Berechnungsfeld auf Grün schalten, sobald der Button "Drucken" geklickt wird, und erst wieder auf Rot, wenn irgendeine andere Änderung am Datensatz vorgenommen wird. 

    if 'Zuletzt gedruckt am_' < 'Zuletzt geändert am' then
        styled("Nein", "Red")
    else
        styled("Ja", "Green")
    end

    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    ^^ auch eine (gute) Idee - damit geht aber ggfls. der Zeitstempel der letzten "realen" Änderung verloren...

    • Mirko.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Copytexter,

     

    super Idee mit der Zeit, ich habe es jetzt so gelöst:

     

    'Zuletzt gedruckt am_' := now() + time(0, 0, 1)

     

    Ich schlage einfach nur eine Sekunde drauf, so passt das auch!

     

    Danke für die Hilfe!

     

    Gruß Mirko