Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Vigeli am 16.08.04 - 17:47:59

Titel: Hilfe !!! @Integer Frage
Beitrag von: Vigeli am 16.08.04 - 17:47:59
hallo forum

mit hilfe folgeder formel werden bei mir wochentage problemlos berrechnet:

start=16.08.2004 (07:30)
End=16.08.2004 (17:30)

=1 Tag
_____________________________________________

ddiff:=1 + @Integer((End - Start) / 86400); REM "Zeitdifferenz in Sekunden in ganze Tage umrechnen, 60s/min * 60min/h*24h/Tag = 86400s/Tag";
blocks:=@Integer(ddiff / 7); REM "Zahl der 7-Tage-Blöcke";
rest:=@Modulo(ddiff; 7); REM "Resttage ermitteln mithilfe 7-Tage-Divisionsrest";
swt:=@Weekday(Start);
ewt:=@Weekday(End);

res:=blocks * 5 +
rest +
@If(
   rest>0;
      @If(swt > ewt; -2; 0) +
      @If(swt = 1; -1; 0) +
      @If(ewt = 7; -1; 0);
   0);

@If(@IsError(res); 0; res)

____________________________________________________

wie muss ich vorgehen um einen halbentag (weniger als 4,5 Std) berrechen zu können?

Besten Dank
Titel: Re:Hilfe !!! @Integer Frage
Beitrag von: Tode am 18.08.04 - 15:26:02
Deine Formel kapier ich nicht... aber ehrlich gesagt habe ich sie mir nicht genau angesehen, sieht mir zu kompliziert aus...
EDIT: Ich kapier sie doch... aber das ist ja wirklich viel zu kompliziert...

Um die Anszahl der Wochentage zwischen zwei Dati zu bekommen brauchst Du doch keine so komplizierte Formel:

Bsp: 15.08.2004 - 18.08.2004

range := @TextToTime( "[" + @Text( start ) + " - " + @Text( ende ) + "]");
alleTage := @Implode( range );
(ergibt: 15.08 , 16.08, 17.08, 18.08 )

tage := @Weekday( alleTage );
(ergibt 0 ; 1 ; 2 ; 3 ) (0 steht für Sonntag, 6 für Samstag)

tageohneWE := @Trim( @Replace( @Text( tage ) ; "0" : "6" ; "" );
(ergibt  1 ; 2 ; 3 )
anzahlTageOhneWE := @Elements( tageOhneWE );

und für Halbe Tage schaust Du jetzt einfach noch, wie die Start- Zeit und die Endzeit liegen...

HTH
Tode

Hier noch mal die Formel ohne Kommentare:
range := @TextToTime( "[" + @Text( start ) + " - " + @Text( ende ) + "]");
alleTage := @Implode( range );
tage := @Weekday( alleTage );
tageohneWE := @Trim( @Replace( @Text( tage ) ; "0" : "6" ; "" );
anzahlTageOhneWE := @Elements( tageOhneWE );
Titel: Re:Hilfe !!! @Integer Frage
Beitrag von: Semeaphoros am 18.08.04 - 16:25:12
Tode: der korrekte Plural von Datum, wenn man ihn denn schon in "gehobener" Form angeben möchte, wäre Data, was aber wiederum wegen sprachlicher Nichtexistenz eigentlich nicht korrekt ist. Einfacher wäre bestimmt der Ausdruck "zweier (Kalender-)Daten" gewsen :)
Titel: Re:Hilfe !!! @Integer Frage
Beitrag von: Tode am 18.08.04 - 16:43:01
Die LATEINISCH korrekte Plural- Form von Datum (dare do dedi datum -etwas gegebenes) wäre tatsächlich "DATA"....

Die deutsche Sprache hat sich hier allerdings von der lateinischen wegentwickelt.

Laut Duden ist der korrekte Plural von Datum "Daten".. nicht "Datums", oder "Dati", auch nicht "Datümer"...

nur, um das richtig zu stellen... ;)

Gruß
Tode
Titel: Re:Hilfe !!! @Integer Frage
Beitrag von: Semeaphoros am 18.08.04 - 16:55:25
Sag ich ja
Titel: Re:Hilfe !!! @Integer Frage
Beitrag von: Tode am 18.08.04 - 17:05:03
habe ich wieder nur die Hälfte gelesen...

Ich gebe mich geschlagen.... ;)
Titel: Re:Hilfe !!! @Integer Frage
Beitrag von: Vigeli am 18.08.04 - 18:01:32
hallo tode

.. ich danke dir vielmals für deine bemühungen, echt nett :-) !!!

...ABER ich bin zu blöd dafür, wie kann ich das genau machen?
hier ein beispiel mit einer maske. kannst du mir das mitte erklären?

vielen dank

gruss
vige

Titel: Re:Hilfe !!! @Integer Frage
Beitrag von: HarryB am 19.08.04 - 10:19:35
@Vigeli

Vielleicht wäre es hilfreich zu erklären, was du mit deiner Berechnung erreichen willst. Umreiße doch mal bitte die genaue Problemstellung, ohne dabei bereits eine Lösung zu präsentieren. Leider ist das Problem nicht immer aus der Lösung ersichtlich...

Viele Grüße
Harry
Titel: Re:Hilfe !!! @Integer Frage
Beitrag von: Vigeli am 19.08.04 - 10:32:42
 ..... was mit meiner Berechnung erreichen will?? hier nochmals ein versuch:

ZIEL ist halbe ferientage abzuziehen: wenn weniger als 4,5 Std = 1/2 Tag, wenn mehr als 4,5 Std = 1 Tag abzuziehen


ist ein wenig kompliziert ....
Titel: Re:Hilfe !!! @Integer Frage
Beitrag von: HarryB am 19.08.04 - 10:39:32
Wie werden denn die Urlaubstage eingetragen? Gibt der User ein: Urlaub vom 02.08.04 - 13.08.04 und die Formel soll die Anzahl der Urlaubstage berechnen? Gibt der User die Tage jeweils einzeln und mit Uhrzeit ein?

Wie wäre es, wenn du genau umgekehrt vorgibst und der User eingibt: ich habe 1/1 Tag, 1/2 Tag, x/1 Tage bzw. x/2 Tag Urlaub, ausgehend von einem Ausgangsdatum? Bei Eingabe von 1/2 Tag Urlaub setzt das Script/die Fomel das dann als 7:30 - 12:00 h um (falls die Uhrzeiten überhaupt eine Rolle spielen).

Viele Grüße
Harry
Titel: Re:Hilfe !!! @Integer Frage
Beitrag von: Vigeli am 19.08.04 - 10:45:57
richtig:  

der user gibt die tage jeweils einzeln und mit uhrzeit  wie folgt ein:

urlaub vom 02.08.04 - 13.08.04  - 07:30 - 17:30 Uhr, nd die formel soll die anzahl der urlaubstage berechnen!

oben habe ich eine datenbank als bespiel angehängt
Titel: Re:Hilfe !!! @Integer Frage
Beitrag von: Tode am 19.08.04 - 12:03:52
Also gut:

Du verwendest erst mal meine erste Formel, um die "Ganzen" Tage zu berechnen.

jetzt brauchst Du noch eine Formel, die prüft, ob der erste Tag ein ganzer oder halber Tag ist, das gleiche für den letzten Tag.

ersterTagAbzug := @If( @Time( start ) > @Time( @TextToTime( "12:00" ) )  ; 0,5 ; 0 );
letzterTagAbzug := @If( @Time( end ) < @Time( @TextToTime( "12:00" ) )  ; 0,5 ; 0 );

ergebnis := anzahlTageOhneWE - ersterTagAbzug - letzterTagAbzug;

HTH
Tode