Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: uwepa am 05.07.05 - 15:16:01

Titel: Felder aktualisieren
Beitrag 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
Titel: Re: Felder aktualisieren
Beitrag von: klaussal am 05.07.05 - 15:19:51
Was klappt nicht ?

Ein paar mehr Details wären schon hilfreich.
Titel: Re: Felder aktualisieren
Beitrag von: Driri am 05.07.05 - 15:20:57
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.
Titel: Re: Felder aktualisieren
Beitrag von: koehlerbv am 05.07.05 - 15:24:55
@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" ...
Titel: Re: Felder aktualisieren
Beitrag von: uwepa am 05.07.05 - 15:33:13
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))
Titel: Re: Felder aktualisieren
Beitrag von: koehlerbv am 05.07.05 - 16:11:59
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
Titel: Re: Felder aktualisieren
Beitrag von: uwepa am 05.07.05 - 16:35:37
Nein das SetField zeigt immer noch den Wert 0 an (Vorgabe)
Titel: Re: Felder aktualisieren
Beitrag von: uwepa am 05.07.05 - 16:36:57
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.
Titel: Re: Felder aktualisieren
Beitrag von: Axel am 05.07.05 - 16:46:43
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
 
Titel: Re: Felder aktualisieren
Beitrag von: uwepa am 05.07.05 - 16:48:01
@If((Genommen+Tage) > Anspruch;@Prompt([Ok];"Achtung";"Es steht Ihnen nur noch "+@Text(Anspruch-Genommen)+" Tage Urlaub zur Verfügung!");@SetField("OK" ; 1))
Titel: Re: Felder aktualisieren
Beitrag von: koehlerbv am 05.07.05 - 16:50:07
Nochmal zur Erinnerung: Das steht in der Eingabevalidierung ...
Titel: Re: Felder aktualisieren
Beitrag von: Axel am 05.07.05 - 16:58:14
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
Titel: Re: Felder aktualisieren
Beitrag von: uwepa am 05.07.05 - 17:06:59
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.
Titel: Re: Felder aktualisieren
Beitrag von: uwepa am 05.07.05 - 17:13:20
Übrigens Bernhard wünsche ich noch alles Gute nachträglich zum Geburtstag.
Titel: Re: Felder aktualisieren
Beitrag von: koehlerbv am 05.07.05 - 17:22:06
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 ?  ;)
Titel: Re: Felder aktualisieren
Beitrag von: uwepa am 05.07.05 - 17:28:03
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