Hilfe beim Coding
Hallo zusammen,
ich habe folgendes Problem bei dem Code, den ich auf einem Butten gelegt habe. Mit drücke des Buttons sollen für unterschiedliche Vorgänge sollen Wiedervorlagen angelegt werden. Dies wird abgefragt in einem Dialog und funktioniert auch. Nun möchte ich aus der Tabelle Vorgaben unterschiedliche Wiedervorlagefristen verwenden (WV1 ... WV5).
Aus dem Code geht hervor, dass ich myFrist mit dem jeweiligen Wert aus der Tabelle Vorgaben bestücken müchte. Dieser Wert soll dann in eine Berechnung einfliessen:
let myWVDate := myDate - myFrist;
Doch es gibt eine Fehlermeldung: Eine Tabellenspalte wurde nicht gefunden myFrist
let my := this;
let myDate := 'Nächste HU';
let myHerst := Hersteller;
let myMod := Modell;
let myFKz := Kennzeichen;
let myVBK := 'VB-Kasten';
let myVersK := 'Vers.-Karte';
let WVSelect := dialog("Wiedervorlage anlegen", "Für welchen Vorgang soll eine Wiedervorlage angelegt werden?", ["HU", "Inspektion", "VB-Kasten", "Vers.-Karte", "Abbruch"]);
let WV := dialog("Wiedervorlagefristen", "Welche Wiedervorlagefrist soll für den ausgewählten Vorgang verwender werden?", ["WV1", "WV2", "WV3", "WV4", "WV5", "Abbruch"]);
if WV = "WV1" then
let myFrist := (select Vorgaben)[WV1].WV1;
void
end;
if WV = "WV2" then
let myFrist := (select Vorgaben)[WV1].WV2;
void
end;
if WV = "WV3" then
let myFrist := (select Vorgaben)[WV3].WV3;
void
end;
if WV = "WV4" then
let myFrist := (select Vorgaben)[WV4].WV4;
void
end;
if WV = "WV5" then
let myFrist := (select Vorgaben)[WV5].WV5;
void
end;
if WVSelect = "HU" then
let newWV := (create Wiedervorlage);
let myWVDate := myDate - 10;
newWV.(Datum := myWVDate);
newWV.(Status := 4);
newWV.(Modul := 3);
newWV.('Text (mehrzeilig)' := "Die nächste HU für das Fahrzeug " + myHerst + " " + myMod + " mit dem polizeilichen Kenneichen " + myFKz + " ist am " + myDate + " fällig! Bitte Termin vereinbaren.");
popupRecord(newWV)
else
if WVSelect = "Inspektion" then
...
Was muss geänder werden, habt Ihr eine Idee?
Gruß
Michael
12 Antworten
-
Setze ich hier
let myWVDate := myDate - myFrist;
anstelle myFrist eine 10 ein, wird die Berechnung durchgeführt.
-
Hallo Michael.
1. Ich würde myFrist außerhalb der If - Anweisungen definieren.
let myFrist := null oder "" oder 0
In den if-Anweisungen dann nur noch: myFrist := select .....
2. Was ist das Ergebnis von dem select? String oder Number
Sicherheitshalber würde ich es dann so schreiben: let myWVDate := myDate - number(MyFrist) -
Hallo UweG,
vielen Dank! Ich habe es gleich umgesetzt und von der Syntax passt es, denn es wird kein Fehler angezeigt. Die oben definierte Variable myFrist scheint aber leer zu sein. Hast Du eine Idee woran es liegen könnte?
let my := this;
let myDate := 'Nächste HU';
let myHerst := Hersteller;
let myMod := Modell;
let myFKz := Kennzeichen;
let myVBK := 'VB-Kasten';
let myVersK := 'Vers.-Karte';
let myFrist := "";
let WVSelect := dialog("Wiedervorlage anlegen", "Für welchen Vorgang soll eine Wiedervorlage angelegt werden?", ["HU", "Inspektion", "VB-Kasten", "Vers.-Karte", "Abbruch"]);
let WV := dialog("Wiedervorlagefristen", "Welche Wiedervorlagefrist soll für den ausgewählten Vorgang verwender werden?", ["WV1", "WV2", "WV3", "WV4", "WV5", "Abbruch"]);
if WV = "WV1" then
myFrist := first(select Vorgaben)."WV1"
else
if WV = "WV2" then
myFrist := first(select Vorgaben)."WV2"
else
if WV = "WV3" then
myFrist := first(select Vorgaben)."WV3"
else
if WV = "WV4" then
myFrist := first(select Vorgaben)."WV4"
else
if WV = "WV5" then
myFrist := first(select Vorgaben)."WV5"
else
void
end
end
end
end
end;
if WVSelect = "HU" then
let newWV := (create Wiedervorlage);
let myWVDate := myDate - number(myFrist);
newWV.(Datum := myWVDate);
newWV.(Status := 4);
newWV.(Modul := 3);
newWV.('Text (mehrzeilig)' := "Die nächste HU für das Fahrzeug " + myHerst + " " + myMod + " mit dem polizeilichen Kenneichen " + myFKz + " ist am " + myDate + " fällig! Bitte Termin vereinbaren.");
popupRecord(newWV)Vielen Dank
Michael
-
Entferne die Anführungszeichen.
myFrist := first(select Vorgaben).WV1
-
Ich gehe mal davon aus, das die Tabelle Vorgaben nur einen Datensatz enthält und aus den Feldern WV1,WV2,WV3,WV4,WV5 besteht.
-
Hallo UweG,
vielen Dank für die schnelle Antwort. Deine Annahme ist richtig.
leider scheint myFrist nicht gefüllt zu werden, da die Berechnung keine Wirkung zeigt. Entweder grübele ich zusammen mit dem Forum weiter über das Problem nach oder ich muss mir generell etwas anderes überlegen.
let my := this;
let myDate := 'Nächste HU';
let myHerst := Hersteller;
let myMod := Modell;
let myFKz := Kennzeichen;
let myVBK := 'VB-Kasten';
let myVersK := 'Vers.-Karte';
let myFrist := "";
let WVSelect := dialog("Wiedervorlage anlegen", "Für welchen Vorgang soll eine Wiedervorlage angelegt werden?", ["HU", "Inspektion", "VB-Kasten", "Vers.-Karte", "Abbruch"]);
let WV := dialog("Wiedervorlagefristen", "Welche Wiedervorlagefrist soll für den ausgewählten Vorgang verwender werden?", ["WV1", "WV2", "WV3", "WV4", "WV5", "Abbruch"]);
if WV = "WV1" then
let myFrist := first(select Vorgaben).WV1;
void
else
if WV = "WV2" then
let myFrist := first(select Vorgaben).WV2;
void
else
if WV = "WV3" then
let myFrist := first(select Vorgaben).WV3;
void
else
if WV = "WV4" then
let myFrist := first(select Vorgaben).WV4;
void
else
if WV = "WV5" then
let myFrist := first(select Vorgaben).WV5;
void
else
void
end
end
end
end
end;
if WVSelect = "HU" then
let newWV := (create Wiedervorlage);
let myWVDate := myDate - number(myFrist);
newWV.(Datum := myWVDate);
newWV.(Status := 4);
newWV.(Modul := 3);
newWV.('Text (mehrzeilig)' := "Die nächste HU für das Fahrzeug " + myHerst + " " + myMod + " mit dem polizeilichen Kenneichen " + myFKz + " ist am " + myDate + " fällig! Bitte Termin vereinbaren.");
popupRecord(newWV)Nochmals Danke
Michael
-
Mit first(select Vorgaben).WV1 wird der erste Datensatz in der Tabelle 'Vorgaben' gefunden und der Inhalt von Feld 'WV1' ausgelesen.
Du kannst es überprüfen, indem du ein Funktionsfeld erstellst und darin diesen Select-Befehl einträgst.
Dann solltest dn Inhalt von WV1 sehen.
Wenn du schon myFrist definiert hast mit let myFrist:="", dann must du nicht bei jeder if-Abfrage nochmals ein let auf myFrist anwenden. Hier reicht dann myFrist := select .....
Du kannst statt der vielen if then- und den unnötigen else-Anweisungen auch folgendes schreiben:switch WV do
case "WV1":
myFrist := first(select Vorgaben).WV1
case "WV2":
myFrist := first(select Vorgaben).WV2
case "WV3":
myFrist := first(select Vorgaben).WV3
case "WV4":
myFrist := first(select Vorgaben).WV4
case "WV5":
myFrist := first(select Vorgaben).WV5
end
-
Hi UweG,
ich habe die case Geschichte eingebaut eingebaut und bekomme die Meldung, dass die Ausdrücke für "dann" und "sonst" unterschiedliche Dateitypen liefern. Ergänze ich .WV1 mit den "" zu ."WV1" dann entfällt die Fehlermeldung. In der Tabelle Vorgaben sind die Felder WV1 bis WV5 als Zahlenfelder gekennzeichnet. Wären hier Textfelder besser?
Gruß
Michael
-
Die Fehlermeldung besagt, dass die Datentypen nicht zusammenpassen.
Mit let myFrist := "" definierst du einen String.
first(select Vorgang).WV1 ist nach deiner Aussage eine Zahl.
Entweder let myFrist := 0 oder text(first(select Vorgang).WV1) dann must du den String wieder in eine Zahl umwandeln.
Du must darauf achten, dass die Datentypen zusammenpassen. -
So, habe jetzt mal für WV1 das Feld von Zahl nach Text geändert und siehe da, es klappt. Werde später mal alle Variablen änder und testen.
Also nochmals vielen vielen Dank!
Michael
-
Ändern sich die Werte WV1-WV5 in der Tabelle immer wieder?
Falls es sich um feststehende Werte handelt kann man sich die Tabelle sparen und direkt in der Case-Abfrage die Werte eintragen.
Bsp.
case "WV1":
myFrist := 10
case "WV2":
myFrist := 20 usw. -
Vielen DANK für den Support!
Funktioniert nun so wie ich will.
Content aside
- vor 2 JahrenZuletzt aktiv
- 12Antworten
- 266Ansichten