0

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

null
    • Michael.3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Setze ich hier 

    let myWVDate := myDate - myFrist;

    anstelle myFrist eine 10 ein, wird die Berechnung durchgeführt.

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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)

    • Michael.3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Entferne die Anführungszeichen.

    myFrist := first(select Vorgaben).WV1

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Ich gehe mal davon aus, das die Tabelle Vorgaben nur einen Datensatz enthält und aus den Feldern WV1,WV2,WV3,WV4,WV5 besteht.

    • Michael.3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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

    • Michael.3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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.

    • Michael.3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Ä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.

    • Michael.3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Vielen DANK für den Support!

     

    Funktioniert nun so wie ich will.