Skript richtig schreiben
Hallo zusammen,
wie bekomm ich denn das besser geschrieben, so das die Geschwindigkeit steigt. Funktionieren tut alles... jedoch bin ich ja nen Anfänger.
if dialog(“Tour 31 zum Disponieren auswählen ?”, “Planzeit, Auftragsart und Fahrtstrecke überprüft ?”, [“OK”, “zurück”]) = “OK” then
“Auf Tour Disponieren” := “31”
else
“Auf Tour Disponieren” := null
end;
if “Planzeit eingabe” = null or Auslieferdatum = null or Filiale = null or LK = null or MK = null or FT = null or Uhrzeit31 = null then
alert(“Lieferkennzeichen unvollständig, bitte alle Felder ausfüllen und vorgang wiederholen”)
else
do as server
let me := this;
let myR := first(select Pool where KV = me.“Suchfeld KV”);
let KVN := me.“Suchfeld KV”;
let Li := me.LK;
let Ur := me.text(Uhrzeit31);
let Ar := me.text(Artikel);
let Lia := me.text(Lieferart);
let Mo := me.MK;
let Pl := me.“Planzeit eingabe”;
let Fer := me.FT;
let To := me.“Auf Tour Disponieren”;
let Ak := me.text(“Aktionen & Reklamationen”);
let Na := first((select Pool).myR.Name);
let FilialeN := me.text(Filiale);
let Inh := first((select Pool).myR.Inhalt);
let Aus := me.Auslieferdatum;
let Or := first((select Pool).myR.Ort);
let Plz := first((select Pool).myR.PLZ);
let Vor := first((select Pool).myR.Vorname);
let Str := first((select Pool).myR.“Straße”);
let Wer := first((select Pool).myR.Auftragswert);
let Te := first((select Pool).myR.“Tele 1”);
let Tel := first((select Pool).myR.“Tele 2”);
let mail := first((select Pool).myR.Mail);
let KWe := me.KW;
let new := (create “Disponiert ”);
new.(Lieferzeit := Ur);
new.(Artikel := Ar);
new.(“L-Art” := Lia);
new.(Ort := Or);
new.(PLZ := Plz);
new.(KV := KVN);
new.(LF := Li);
new.(Tour := To);
new.(MK := Mo);
new.(PZ := Pl);
new.(FT := Fer);
new.(Name := Na);
new.(Filiale := FilialeN);
new.(Lieferdatum := Aus);
new.(Inhalt := Inh);
new.(KW := KWe);
new.(Vorname := Vor);
new.(“Straße” := Str);
new.(“Telefon 1” := Te);
new.(“Telefon 2” := Tel);
new.(“E-Mail” := mail);
new.(Auftragswert := number(replace(Wer, “,”, “.”)));
new.(Aktionen := Ak);
for i in (select CSVin)[Spalte4 = KVN] do
delete i;
me.(“Suchfeld KV” := null);
me.(LK := null);
me.(MK := null);
me.(FT := null);
me.(“Auf Tour Disponieren” := null);
me.(“Planzeit eingabe” := null);
me.(Artikel := null);
me.(Uhrzeit31 := null);
me.(Lieferart := null);
delete myR
end
end
end;
do as server
for i in (select “Disponiert ”)[Lieferdatum = Lieferdatum and Tour = “31”] do
(select “Tour 31”)[i.Lieferdatum = Lieferdatum].(
verplant := i.“Gesamtplanzeit Tour 31”;
Umsatz := i.“Umsatz Tour 31”
)
end
end;
do as server
let me := this;
let Aus := Auslieferdatum;
(select “Disponiert ”)[me.Aus = Lieferdatum and Tour = “31” and “Position Hilfsfeld” < 20].(“Position Hilfsfeld” := null);
let nn := 0;
for i in (select “Disponiert ”)[me.Aus = Lieferdatum and Tour = “31” and “Position Hilfsfeld” = null] order by Lieferdatum do
nn := nn + 1;
i.(“Position Hilfsfeld” := nn)
end
end;
do as server
let me := this;
let Aus := Auslieferdatum;
for i in (select “Disponiert ”)[Lieferdatum = Lieferdatum and Tour = “31”] do
(select “Tour 31”)[i.“Position Hilfsfeld” = 1 and i.me.Aus = Lieferdatum].(“Kunde 1” := i.“Straße” + “,” + i.PLZ);
(select “Tour 31”)[i.“Position Hilfsfeld” = 2 and i.me.Aus = Lieferdatum].(“Kunde 2” := i.“Straße” + “,” + i.PLZ);
(select “Tour 31”)[i.“Position Hilfsfeld” = 3 and i.me.Aus = Lieferdatum].(“Kunde 3” := i.“Straße” + “,” + i.PLZ);
(select “Tour 31”)[i.“Position Hilfsfeld” = 4 and i.me.Aus = Lieferdatum].(“Kunde 4” := i.“Straße” + “,” + i.PLZ);
(select “Tour 31”)[i.“Position Hilfsfeld” = 5 and i.me.Aus = Lieferdatum].(“Kunde 5” := i.“Straße” + “,” + i.PLZ);
(select “Tour 31”)[i.“Position Hilfsfeld” = 6 and i.me.Aus = Lieferdatum].(“Kunde 6” := i.“Straße” + “,” + i.PLZ);
(select “Tour 31”)[i.“Position Hilfsfeld” = 7 and i.me.Aus = Lieferdatum].(“Kunde 7” := i.“Straße” + “,” + i.PLZ);
(select “Tour 31”)[i.“Position Hilfsfeld” = 8 and i.me.Aus = Lieferdatum].(“Kunde 8” := i.“Straße” + “,” + i.PLZ);
(select “Tour 31”)[i.“Position Hilfsfeld” = 9 and i.me.Aus = Lieferdatum].(“Kunde 9” := i.“Straße” + “,” + i.PLZ);
(select “Tour 31”)[i.“Position Hilfsfeld” = 10 and i.me.Aus = Lieferdatum].(“Kunde 10” := i.“Straße” + “,” + i.PLZ);
(select “Tour 31”)[i.“Position Hilfsfeld” = 11 and i.me.Aus = Lieferdatum].(“Kunde 11” := i.“Straße” + “,” + i.PLZ);
(select “Tour 31”)[i.“Position Hilfsfeld” = 12 and i.me.Aus = Lieferdatum].(“Kunde 12” := i.“Straße” + “,” + i.PLZ);
(select “Tour 31”)[i.“Position Hilfsfeld” = 13 and i.me.Aus = Lieferdatum].(“Kunde 13” := i.“Straße” + “,” + i.PLZ);
(select “Tour 31”)[i.“Position Hilfsfeld” = 14 and i.me.Aus = Lieferdatum].(“Kunde 14” := i.“Straße” + “,” + i.PLZ)
end
end;
do as server
(select “Disponiert ”)[“Position Hilfsfeld” = 1].(Karte := text(“A”));
(select “Disponiert ”)[“Position Hilfsfeld” = 2].(Karte := text(“B”));
(select “Disponiert ”)[“Position Hilfsfeld” = 3].(Karte := text(“C”));
(select “Disponiert ”)[“Position Hilfsfeld” = 4].(Karte := text(“D”));
(select “Disponiert ”)[“Position Hilfsfeld” = 5].(Karte := text(“E”));
(select “Disponiert ”)[“Position Hilfsfeld” = 6].(Karte := text(“F”));
(select “Disponiert ”)[“Position Hilfsfeld” = 7].(Karte := text(“G”));
(select “Disponiert ”)[“Position Hilfsfeld” = 8].(Karte := text(“H”));
(select “Disponiert ”)[“Position Hilfsfeld” = 9].(Karte := text(“I”));
(select “Disponiert ”)[“Position Hilfsfeld” = 10].(Karte := text(“J”));
(select “Disponiert ”)[“Position Hilfsfeld” = 11].(Karte := text(“K”));
(select “Disponiert ”)[“Position Hilfsfeld” = 12].(Karte := text(“L”));
(select “Disponiert ”)[“Position Hilfsfeld” = 13].(Karte := text(“M”))
end;
do as server
(select “Tour 31” where Lieferdatum > today() and today() > date(year(Lieferdatum), month(Lieferdatum) - 3, day(Lieferdatum))).(“Neuer Kunde” := null);
(select “Tour 32” where Lieferdatum > today() and today() > date(year(Lieferdatum), month(Lieferdatum) - 3, day(Lieferdatum))).(“Neuer Kunde” := null);
(select “Tour 33” where Lieferdatum > today() and today() > date(year(Lieferdatum), month(Lieferdatum) - 3, day(Lieferdatum))).(“Neuer Kunde” := null);
(select “Tour 34” where Lieferdatum > today() and today() > date(year(Lieferdatum), month(Lieferdatum) - 3, day(Lieferdatum))).(“Neuer Kunde” := null);
(select “Tour 35” where Lieferdatum > today() and today() > date(year(Lieferdatum), month(Lieferdatum) - 3, day(Lieferdatum))).(“Neuer Kunde” := null);
(select “Tour 805” where Lieferdatum > today() and today() > date(year(Lieferdatum), month(Lieferdatum) - 3, day(Lieferdatum))).(“Neuer Kunde” := null)
end;
do as server
let me := this;
(select “Tour 31”)[me.Auslieferdatum = Lieferdatum].(“Neuer Kunde” := null);
me.(Auslieferdatum := null)
end
Kann an dem Skript leider auch nichts weg lassen.
CSVin = CSV einlesen
Pool = ausgewertete daten aus CSVin
Tour 31 = zusatzinfos
Disponiert = Disponierte Kunden
Planung = Dashboard hier befindet sich das Skript auf einem Button (dient nur zur Datenausgabe bzw. eingabe / jeder juser hat nur seinen eigenen datensatz hier ( nur sichtbar für den jeweiligen juser, )
Danke im voraus
6 Antworten
-
Hat keiner ne Idee wie es besser geht? Mit nur einem server Aufruf wird es langsamer
-
Hallo Michi,
sorry, aber so kann keiner hier durchblicken. Man kann zwar an einigen Stellen kürzer schreiben, ob es dadurch auch schneller wird - ist fraglich. Das ganze Datenmodel ist mir ein Rätzel. Jeder Tour ist eine eigene Tabelle. Sehr ungewöhnlich und auch gegen aller Kunstregeln.Leo
-
Wie kann man es besser lösen? Über das Dashboard wird alles geregelt. Dabei gibt es für jede Tour zwei Ansichten. Die eine ist die Ansicht für die disponierten Kunden für diesen Tag. Die andere ist die torauslastung , planzeitmaximum , Auswertungen und Hinweise. Kann man das anders lösen ? Das eine sind ja einfache Abfragen (Disponiert) , das andere sind Zusammenfassungen mit der Möglichkeit Parameter anzupassen und abfragewerte zur Verfügung zu stellen für die Optimierung. (Passt der neue Kunde von der Zeit, dann zeig die Tour und führe die maps anfrage aus ) ist die tabelle Tour...... Was ursprünglich einfach klang wird immer komplizierter da man alles was der Mensch intuitiv mit Papier macht ,auseinander genommen werden muss in einzelne Schritte, welche am Ende das selbe Ergebnis haben. Jedoch digital und somit verwertbar werden.
Bin echt über jeden Tipp oder Denkanstoß dankbar.
-
So auf anhib,
statt:
---
for i in (select CSVin)[Spalte4 = KVN] do
delete i;
me.(“Suchfeld KV” := null);
me.(LK := null);
me.(MK := null);
me.(FT := null);
me.(“Auf Tour Disponieren” := null);
me.(“Planzeit eingabe” := null);
me.(Artikel := null);
me.(Uhrzeit31 := null);
me.(Lieferart := null);
delete myR
end---
kann man es so schreiben:
---delete (select CSVin)[Spalte4 = KVN];
me.(“Suchfeld KV” := null);
me.(LK := null);
me.(MK := null);
me.(FT := null);
me.(“Auf Tour Disponieren” := null);
me.(“Planzeit eingabe” := null);
me.(Artikel := null);
me.(Uhrzeit31 := null);
me.(Lieferart := null);
delete myR
---so werden die Datensätze in CSVin ohne schleife gelöscht. Alles andere wird den Rahmen hier springen. Ich schätze, man könnte im Datenmodel alle Touren in einer Tabelle unterbringen und den Kode nur einmal durch die Ganze Tabelle Touren Laufen lassen.
Leo
-
Danke für den hinweis und die hilfe Leo,
dachte immer ich bekomm sonst die Optimierung nach Tagen nicht hin. Aber wenn ich mit :
let myDate := last((select “Tour 40”).Los);
for II from myDate to date(year(myDate), month(myDate) + 12, 1) step 1000 * 60 * 60 * 24 do
let newR := (create “Tour 40”);
newR.(“Vorgabe datum” := II);
newR.(Tour := “31”);
newR.(Filiale := “Friedrichshain”)alle Touren in nur eine Tabelle schreibe, also nur immer Tour := X ändere, dann kann ich immer noch die Optimierung durchführen. Das geht über:
do as server
let aa := (select “Tour 40” where “planzeit passt” = true and number(Tour) = 31 and “Vorgabe datum” > today());
“Hilfe Tour1” := first(aa.“Vorgabe datum”);
let bb := (select “Tour 40” where “planzeit passt” = true and number(Tour) = 32 and “Vorgabe datum” > today());
“Hilfe Tour2” := first(bb.“Vorgabe datum”);
let cc := (select “Tour 40” where “planzeit passt” = true and number(Tour) = 33 and “Vorgabe datum” > today());
“Hilfe Tour3” := first(cc.“Vorgabe datum”);
let myARRAY := [“Hilfe Tour2”, “Hilfe Tour1”, “Hilfe Tour3”, “Hilfe Tour4”, “Hilfe Tour5”, “Hilfe Tour6”, “Hilfe Tour7”, “Hilfe Tour8”];
let myMAX := max(myARRAY);
let myMIN := min(myARRAY);
Auslieferdatum := myMIN
end
else
do as server
let Aus := Auslieferdatum;
let aa := (select “Tour 40” where “planzeit passt” = true and number(Tour) = 31 and “Vorgabe datum” > today() and Aus < “Vorgabe datum”);
“Hilfe Tour1” := first(aa.“Vorgabe datum”);
let bb := (select “Tour 40” where “planzeit passt” = true and number(Tour) = 32 and “Vorgabe datum” > today() and Aus < “Vorgabe datum”);
“Hilfe Tour2” := first(bb.“Vorgabe datum”);
let cc := (select “Tour 40” where “planzeit passt” = true and number(Tour) = 33 and “Vorgabe datum” > today() and Aus < “Vorgabe datum”);
“Hilfe Tour3” := first(cc.“Vorgabe datum”);
let myARRAY := [“Hilfe Tour2”, “Hilfe Tour1”, “Hilfe Tour3”, “Hilfe Tour4”, “Hilfe Tour5”, “Hilfe Tour6”, “Hilfe Tour7”, “Hilfe Tour8”];
let myMAX := max(myARRAY);
let myMIN := min(myARRAY);
Auslieferdatum := myMIN
end
endoder hab ich wieder nen Denkfehler ? (Tour 40 ist einfach mal als test da)
Dauern da aber nicht irgendwann die abfrage zu lange? Da ja dann in der Tabelle für die Touren jedes Datum 6 mal mit unterschiedlichen Tournummern vorhanden ist. Also für nur ein Jahr 2112 Datensätze. Das ja nein feld Planzeit passt, wird immer nur von today() + 3 Monate angesprochen über:
(select “Tour 40” where Lieferdatum > today() and today() > date(year(Lieferdatum), month(Lieferdatum) - 3, day(Lieferdatum))).(“Kunden Planzeit” := Pla);
(select “Tour 40” where “Vorgabe datum” > today() and today() > date(year(Lieferdatum), month(Lieferdatum) - 3, day(Lieferdatum)) and gesperrt = true and verbleibend = “Kunden Planzeit” or verbleibend < “Kunden Planzeit”).(“planzeit passt” := false);
(select “Tour 40” where “Vorgabe datum” > today() and today() > date(year(Lieferdatum), month(Lieferdatum) - 3, day(Lieferdatum)) and gesperrt = false and verbleibend = “Kunden Planzeit” or verbleibend > “Kunden Planzeit”).(“planzeit passt” := true)Die reinen Kunden daten in Disponiert muss ich separat lassen, denn diese werden nach der Rechnungstellung gelöscht, so das man nur die Tourdaten hat für auswertungen, jedoch natürlich ohne jeglichen bezug auf Kunden
-
Hab das jetzt mal getestet. Um die performens oben zu halten dürfen einfach nicht zu viele (weniger als 5000 datensätze) in einer tabelle sein. Sonst wird die Ladezeit zu hoch. Zumindest wenn man im kundengespräch ist. Da muss das zackig laufen. Was heißt ich muss Daten verteilten. Aber ich kann das auf filialebene machen. Und alle Daten die älter als today sind werden in Archiv tabellen zusammengefasst.
Content aside
- vor 4 JahrenZuletzt aktiv
- 6Antworten
- 851Ansichten