Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: uwepa am 05.07.05 - 15:16:01
-
Hallo,
ich habe ja schon fleißig gelesen, aber für mich noch nicht das Passende gefunden. Da mein Chef schon hinter mir steht :'( bitte ich nun um Hilfe, damit es nicht noch länger dauert. Nun zum Thema.
Ich habe eine kleine Urlaubsdatenbank gebastelt. In der trägt der Benutzer seinen Urlaub ein den er haben will, die Tage werden berechnet. Der Urlaubsanspruch wird auch berechnet. Nun trägt der MA seine bisher erhaltenen Tage ein. Ich kontrolliere nun ob die Anzahl der zur Verfügung stehenden Tage ausreicht. Das klappt auch alles. Aber im Fehlerfall möchte ich, dass das Feld "Genommen" wieder auf 0 gesetzt wird und der Cursor zur Eingabe in diesem Feld steht und die Arbeit erst wieder fortgesetzt wird, wenn alles i. O. ist.
Außerdem möchte ich, dass ein Feld "OK" auf 1 gesetzt wird, damit ich dieses mit abfragen kann, bevor der Urlaubsantrag an den Vorgesetzten weitergeleitet wird. Im Moment wird es in jedem Fall weitergeleitet.
War das verständlich?
Ich habe im Feld "Genommen" in der Eingabevalidierung folgende Befehle:
@If((Genommen+Tage) > Anspruch;
@Prompt([Ok];"Achtung";"Es steht Ihnen nur noch + @Text(Anspruch-Genommen)+" Tage Urlaub zur Verfügung!");
@SetField(OK ; "1"))
Aber das klappt nicht.
Feld "Genommen" Zahl bearbeitbar Vorgabewert 0
Feld "OK" Zahl berechnet Vorgabewert 0
Ich bin für jede Hilfe dankbar.
Uwe
-
Was klappt nicht ?
Ein paar mehr Details wären schon hilfreich.
-
Hallo,
und herzlich willkommen im Forum.
In der @SetField-Formel ist ein Syntaxfehler. Der Feldname muß in Anführungszeichen, also so :
@SetField("OK"; "1")
Wenn Du in der @If-Formel mehrere Formeln ausführen willst, kannst Du dies über @Do machen.
-
@SetField in der Eingabevalidierung kommt auch nicht besonders gut ...
Soweit meine 2 ct ...
Bernhard
PS: Wie Du die benötigten Urlaubstage berechnest, würde mich mal interessieren ... Ich bin mir nämlich sehr sicher, dass Du dies - gerade mit @functions - nicht hinbekommen kannst. Nicht, dass Du hier in die völlig falsche Richtung rennst und Dein Chef dann nicht mehr "hinter Dir steht" ...
-
Ich gebe die Pers-Nr. ein und lese aus einer anderen DB den entsprechenden Urlaubsanspruch für den MA.
(Habe ich auch aus dem Forum)
FIELD Anspruch := Anspruch;
Variable := @DbLookup("" : "NoCache" ; ".....":"\\..\\...nsf" ; "Urlaub" ; PERSNR ; 7) ;
@If(@IsError(Variable);@Return("");"");
@SetField ("Anspruch" ; Variable)
Das klappt.
Dann trage ich das Beginndatum und das Endedatum ein und berechne die Tage.
(Habe ich auch aus dem Forum)
von := Beginn;
bis :=Ende;
feierTage := "01.01.2005":"06.01.2005":"25.03.2005":"28.03.2005":"01.05.2005":"05.05.2005":
"16.05.2005":"03.10.2005":"31.10.2005":"24.12.2005":"25.12.2005":"26.12.2005":"31.12.2005":
"01.01.2006":"06.01.2006":"14.04.2006":"17.04.2006":"01.05.2006":"25.05.2006":"05.06.2006":
"03.10.2006":"31.10.2006":"24.12.2006":"25.12.2006":"26.12.2006":"31.12.2006";
REM {halbeTage := 24.12.2005 : 31.12.2005 : ...};
alleTageStr := @Explode(@TextToTime(@Text(Von) + " - " + @Text(Bis)));
alleTage := @TextToTime(alleTageStr);
wochenendeStr := @Replace(@Text(@Weekday(alleTage)); "1" : "7"; "x" : "x") + alleTageStr;
wochenende := @Trim(@Right(wochenendeStr; "x"));
freieTage := @Unique(feierTage : wochenende);
arbeitsTage := @Trim(@Replace(alleTageStr; @Keywords(alleTageStr; freieTage; ""); ""));
REM {halbeArbTage := @Keywords(arbeitsTage; halbeTage; )};
Tage := @Elements(arbeitsTage) - (@Elements(halbeArbTage) / 2);
Tage
Das klappt auch.
Dann trage ich das Feld "Genommen" mit Hand ein.
@If((Genommen+Tage) > Anspruch;@Prompt([Ok];"Achtung";"Es steht Ihnen nur noch "+@Text(Anspruch-Genommen)+" Tage Urlaub zur Verfügung!");@SetField("OK" ; 1))
-
feierTage := "01.01.2005":"06.01.2005":"25.03.2005":"28.03.2005":"01.05.2005":"05.05.2005":
"16.05.2005":"03.10.2005":"31.10.2005":"24.12.2005":"25.12.2005":"26.12.2005":"31.12.2005":
"01.01.2006":"06.01.2006":"14.04.2006":"17.04.2006":"01.05.2006":"25.05.2006":"05.06.2006":
"03.10.2006":"31.10.2006":"24.12.2006":"25.12.2006":"26.12.2006":"31.12.2006";
Ah, dann kommst Du aus Sachsen-Anhalt ... Und bist Dir sicher, dass keine weiteren Mitarbeitern mit Ansprüchen anderer Bundesländer eingestellt werden (Aussendienstler im Vertrieb zum Beispiel).
Deine Halbe-Tage-Mathematik verstehe ich noch nicht so ganz: Die Vorgabe ist auskommentiert, unten wird aber dann damit weitergerechnet.
Wenn Du wirklich die Feiertage auf ein einziges Bundesland (mit "harmlosen" Regeln und nicht so wie Bayern oder Thüringen ...) begrenzen können solltest, dann solltest Du auch die Feiertage in Setup-Dokumente auslagern, um nicht jedes Mal den Code ändern zu müssen, bloss weil wieder so ein ganzes Jahr vorbei ist.
Dann trage ich das Feld "Genommen" mit Hand ein.
Warum ?
Aber zurück zur Frage: Funktioniert jetzt Dein @SetField ?
Bernhard
-
Nein das SetField zeigt immer noch den Wert 0 an (Vorgabe)
-
Auf Deine Frage, warum ich den Wert genommen mit Hand eintrage.
Ich bin ein absoluter Laie und froh, dass ich die DB so weit mit Eurer Hilfe hinbekommen habe.
-
Nein das SetField zeigt immer noch den Wert 0 an (Vorgabe)
Wie sieht denn die Formel aus, in der du diese @SetField-Anweisung verwendest?
Axel
-
@If((Genommen+Tage) > Anspruch;@Prompt([Ok];"Achtung";"Es steht Ihnen nur noch "+@Text(Anspruch-Genommen)+" Tage Urlaub zur Verfügung!");@SetField("OK" ; 1))
-
Nochmal zur Erinnerung: Das steht in der Eingabevalidierung ...
-
Hi,
ich bezweifle, dass man @SetField in der Eingabevalidierung verwenden kann.
Was willst du denn mit der Formel erreichen? Was hat den das Feld OK für einen Sinn?
Axel
-
Ich möchte dieses Feld auf einen bestimmten Wert setzen.
Dieses soll bei der Weiterleitung des Mails an den nächsten Bearbeiter
(über eine Schaltfläche) abgefragt werden.
Die Aktion der Schaltfläche soll nur dann ausgeführt werden,
wenn der Wert auf 1 steht.
Sonst erhält ja der nächste Bearbeiter unter umständen einen fehlerhaften Antrag.
-
Übrigens Bernhard wünsche ich noch alles Gute nachträglich zum Geburtstag.
-
Danke, Uwe. Das freut mich wirklich sehr !
Schau mal, dass Du Dein @SetField in die Eingabeumsetzung umlagerst. In der Eingabevalidierung stehen Dir @Failure und @Success zur Verfügung, und das nützt Dir hier gar nichts.
Konsequent wäre, wenn einen Button hättest: "Antrag stellen", und die dortigen Routinen die entsprechenden Prüfungen durchführen und dementsprechend das Stellen des Antrages dann erlauben oder eben nicht. Mit wirklich sehr viel Erfahrung genau auf diesem Gebiet kann ich mir nciht vorstellen, dass man eine Lösung auf Feld(-prüfungs-)ebene hinbekommen kann, die dann auch noch sicher funktioniert.
Bernhard
PS: Stimmt Sachsen-Anhalt ? ;)
-
Ich komme aus dem wunderschönen Harz.
Nicht ganz so hoch wie die Alpen, aber auch schön.
Die DB entspricht der Schablone "Dok-Bibliothek Notes und Web (R6)"
und hier habe ich solange rumgefriemelt bis ich alles soweit hatte.
Nun fehlt der saubere Abschluss.
Uwe