Damit du also die Tage bis zum Urlaubsende ausgeben kannst, benötigst du das Ergebnis folgender Berechnung:
Tage bis Urlaubsende = i_count + i_ende - i_start
Zunächst Danke für jede Hilfestellung. Für Tage bis Urlaubsende benötigt es natürlich auf jeden Fall eine weitere Variable, fände ich jedenfalls besser, als die vorhandene Variable Tage bis Beginn zu ändern, so behält man Flexibilität.
Interessant finde ich eine solche Variable eigentlich nur für Urlaube, die in Zeiträumen angegeben sind, bei einzelnen Tagen macht es wenig Sinn (zumindest für meine Anwendung) und eigentlich auch nur während des laufenden Urlaubs (wie zuvor geschrieben, um gegebenenfalls die Heizung abhängig von der aktuellen Raumtemperatur 1,2, oder 3 Tage vorher hochzufahren)
Müsste ich dann nicht Tage bis Urlaubsende aus i_ende - i_today berechnen können? Denn i_start ist ja während des laufenden Urlaubs schon vorbei, oder kann (sollte) ich dann trotzdem damit rechnen?
Ich habe mich mal durch das Script durchgearbeitet, wirklich sehr lehrhaft! Ich finde es wahnsinnig spannend, wie du das alles sehr strukturiert und flexibel gehalten hast. Ich kann glaube ich ich von dem Script mehr über Script-Programmierung lernen als alles was ich bisher gesehen habe.
Ich habe mich mal daran versucht, die Änderungen auszuarbeiten, die notwendig wären, um eine zusätzliche Varible für Tage bis Urlaubsende zu erstellen und zu füllen.
Vielleicht kannst du mal drüber schauen
Code: Alles auswählen
string sv_count = "Urlaub-Tage-bis,Tage-bis-Urlaubsende";
foreach(s_data1, sv_count.Split(",")) {
svObj = svObjects.Get(s_data1);
! ***Wenn SV vorhanden => ValueTyp pruefen
if (svObj) {
if (svObj.ValueSubType() != ivtFloat) { WriteLine(s_data1 # " : ValueSubTyp wrong!"); quit; }
else { if (b_debug) { WriteLine(s_data1 # " : ValueTyp OK!"); } }
! ***andernfalls SV neu anlegen
} else {
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(s_data1);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.ValueName0("Tage bis zum Urlaub");
svObj.ValueName1("Tage-bis-Urlaubsende");
svObj.ValueUnit("");
svObj.ValueMin(-1);
svObj.ValueMax(1000);
svObj.State(-1);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
if (b_debug) { WriteLine(s_data1 # " : Systemvariable create!"); }
}
}
if (holydays) {
! *** Scriptvariablen
boolean Urlaub_heute=false; boolean Urlaub_morgen=false; boolean pruefung=true;
integer i_idx=0; integer i_data; integer i_today; integer i_count=-1; integer i_count2=-1; string holyday; string s_idx="";
if ((i_today >= i_start) && (i_today <= i_ende)) { Urlaub_heute = true; i_count=0; i_count2=i_ende-i_today} ! ...heute Urlaub und...
svObj=svObjects.Get(sv_count.StrValueByIndex(",", 0)); if (svObj){svObj.State(i_count);}
svObj=svObjects.Get(sv_count.StrValueByIndex(",", 1)); if (svObj){svObj.State(i_count2);}
Bleiben bei mir zumindest folgende Fragen:
Wie stelle ich sicher, dass die Variable nach Urlaubsende auf null geht und nicht unsinnig negativ wird (quasi Tage seit letztem Urlaub, wobei das ja auch interessant sein könnte
)
Wie baue ich diese Variable in die Version „keine Zeiträume“ ein, wie gesagt, ist vermutlich ohnehin dafür nicht so wichtig, aber ich denke es macht Sinn, alles universell zu halten.
Vermutlich wäre es auch „sauberer“ i_count überall in i_count1 umzubenennen.
Gibt es noch andere Stellen, an denen ich etwas ändern/ergänzen muss?
Danke K-H